{"id":21754026,"url":"https://github.com/vuzi/mrhyde","last_synced_at":"2026-04-12T01:45:59.657Z","repository":{"id":57298359,"uuid":"370422283","full_name":"Vuzi/mrHyde","owner":"Vuzi","description":"🧪 MrHyde is a lightweight and simple static website generator using Liquid and Markdown templates","archived":false,"fork":false,"pushed_at":"2022-02-05T20:51:18.000Z","size":367,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-24T20:12:28.945Z","etag":null,"topics":["liquid","markdwon","nodejs","static-site-generator","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Vuzi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-05-24T16:47:18.000Z","updated_at":"2022-01-18T00:20:45.000Z","dependencies_parsed_at":"2022-09-06T03:30:28.784Z","dependency_job_id":null,"html_url":"https://github.com/Vuzi/mrHyde","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/Vuzi/mrHyde","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vuzi%2FmrHyde","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vuzi%2FmrHyde/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vuzi%2FmrHyde/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vuzi%2FmrHyde/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Vuzi","download_url":"https://codeload.github.com/Vuzi/mrHyde/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vuzi%2FmrHyde/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267185055,"owners_count":24049338,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-26T02:00:08.937Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["liquid","markdwon","nodejs","static-site-generator","typescript"],"created_at":"2024-11-26T09:12:40.021Z","updated_at":"2026-04-12T01:45:54.626Z","avatar_url":"https://github.com/Vuzi.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n   \u003cimg src=\".github/title.png\"/\u003e\n\u003c/p\u003e\n\u003chr/\u003e\n\n\u003cp align=\"center\"\u003e\n   \u003cimg src=\"https://badgen.net/badge/Built%20With/NodeJs/3C873A?con=typescript\"\u003e\n   \u003cimg src=\"https://badgen.net/badge/-/TypeScript/blue?icon=typescript\u0026label\"\u003e\n   \u003cimg src=\"https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/Vuzi/5edb6797cd18e510fd89a26d1cf2d2af/raw/mrHyde__master.json\"\u003e\n   \u003cimg src=\"https://github.com/vuzi/mrHyde/actions/workflows/build.yml/badge.svg\"\u003e\n\u003c/p\u003e\n \n\u003cp align=\"center\"\u003e\n   \u003ca href=\"https://nodei.co/npm/mister_hyde/\"\u003e\n      \u003cimg src=\"https://nodei.co/npm/mister_hyde.png\" /\u003e\n   \u003c/a\u003e\n\u003c/p\u003e\n\nTo scan a folder `./example` ↴\n\n```\n$ mrHyde scan ./example\n```\n\nTo generate from a folder `./example` to `./out` ↴\n```\n$ mrHyde run ./example ./out\n```\n\nTo generate from a folder `./example` to `./out` in __watch__ mode ↴\n```\n$ mrHyde run ./example ./out -w\n```\n\nTo start in dev mode, from a folder `./example` to `./out`, and exposing the generated content to `http://localhost:8080` ↴\n```\n$ mrHyde dev ./example ./out -p 8080\n```\n\nAnd for more, see [usage](#usage) 🚀\n\n## What's that?\n**MrHyde** is a very simple and lightweight **static website generator**. MrHyde allow\nto build simple (or complex, that's up to you) static websites, using HTML templates and\nmarkdown. As for others generator, minimal componants to create a blog are also included.\n\nMyHyde is powered by [LiquidJs](https://liquidjs.com/) \u0026 [Marked](https://marked.js.org/) 🧙‍♂️\n\n### What's a static website and why should I care\nA static website is _serverless_ website, i.e. meaning that you don't need to write and run\nyour own web server. You'll still need _some_ server to serve your static files, but\nthat's a much easier problem to have as there's free services (like Github Pages) that'll do that\nfor you, free of charges.\n\n### Isn't it just like Jekyll?\nYes, hence the name. This is a pet project, made to be lightweight and have just the minimum of features \nrequired to be effectively used. Jekyll in comparison is (a lot) more mature, and have a plethora of features\nthat MrHyde won't ever have.\n\n## Usage\n### Getting started\nInstallation ↴\n```\n$ npm install -g mrHyde\n```\n\nUsage from `./example` to `./out` ↴\n```\n$ mrHyde run ./example ./out\n```\n\nYou may also start in watch mode to automatically re-run the generation when any file is modified ↴\n```\n$ mrHyde run ./example ./out --watch\n```\n\nOnly scanning the directory is also possible ↴\n```\n$ mrHyde scan ./example\n```\n\nFinally, if you're actively working you might want to start the application in dev mode,\nwhich active the watcher and expose the `out` directory to HTTP ↴\n```\n$ mrHyde dev ./example ./out -p 8080\n```\n\n### Project structure\nA project should follow this organisation:\n\u003cpre\u003e\n/\n    index.html            // Index page, plain HTML\n    about.liquid          // Page using a liquid template\n    /_sutff               // Ignored directory (or file) starting with a _\n        ignored.html\n    /somePage             // Page\n        _template.liquid  // Template used for all the pages in that sub folder\n        firstPage.md      // Markdown page, needs a template to be rendered\n        secondPage.md       \n    /someOtherPage        // Page\n        _template.liquid  // Template used for all the pages in that sub folder\n        firstPage.yml     // Yaml data page, needs a template to be rendered\n        secondPage.yml       \n    assets/               // Asset folder, will be moved without any processing\n        image.png \n\u003c/pre\u003e\n\nThe generated files will keep their original path and name once processed into the output directory.\n\n### Special directories \u0026 files\nAny file or directory starting with an underscore will be ignored during the processing. Ignored files\nmay but indirectly used, as the `_template.liquid` file.\n\nThe `_template.liquid` file is a special file that will be used along with all the other pages present\nits own folder. This file is required for **markdown** and **yaml** files, as they don't have an easy\nway to produce complete HTML on their own.\n\nThe asset directory should be used to store assets that won't be processed by **MrHyde** and referenced\nby the differents pages\n\n### Metadata\nAny file can contain metadata. This metadata is defined in yaml at the first of the file, and will be passed\neither to the template (if a template is used), or to the parent directory.\n\n**MrHyde** will also had some convenient metadata, such as the date of generation, name of the file,\nand full relative path.\n\nFor example, in a `.md` file:\n```markdown\n---\ntitle: My first great blog article\nauthor: Vuzi\nabstract: This is my first article !\ntags:\n  - Blogging\n  - Hacker\n  - Test\n---\n# Introduction\nHello\n```\nWill result in the local template file to be called with the following metadata:\n\n```javascript\n{\n  \"filePath\": \"foo/bar/stuff.md\",\n  \"fileName\": \"stuff.md\",\n  \"now\": \"2021-05-23T10:26:00.996Z\",\n  \"title\": \"My first great blog article\",\n  \"author\": \"Vuzi\",\n  \"abstract\": \"This is my first article !\",\n  \"tags\": [ \"Blogging\", \"Hacker\", \"Test\" ],\n  \"content\": // HTML from the markdown\n}\n```\n\n### Templating\n**Markdown** and **yaml** require a template to be rendered. Liquid files can also be used along a template.\nA template is a special file name `_template.liquid` that will be applied to the directory it is defined in.\n\nThe template can be used along the metadata defined previously :\n\n```liquid\n\u003carticle\u003e\n\n  \u003cheader\u003e\n    \u003ch1\u003e{{ metadata.title }}\u003c/h1\u003e\n\n    \u003cspan\u003e\n      By {{ metadata.author }}\n    \u003c/span\u003e\n\n  \u003c/header\u003e\n\n  {{ content }}\n\n\u003c/article\u003e\n```\n### Passing metadata upward\nMetadata will bubble up from every file generated, allowing to create links and use that information dynamically:\n\u003cpre\u003e\n/\n    index.liquid\n    /posts\n        post1.liquid\n\u003c/pre\u003e\n\n`posts/post.liquid` ↴\n```\n---\ntitle: My first great blog article\nabstract: This is an article\n---\n[... content]\n```\n\n`index.liquid` ↴\n```liquid\n  \u003cdiv\u003e\n    \u003cul\u003e\n    {%- for postKeyValue in posts -%}\n      {% assign post = postKeyValue[1] %}\n      \u003cli\u003e\n        \u003ch2\u003e{{ post.title }}\u003c/h2\u003e\n        \u003cp\u003e{{ post.abstract }}\u003c/p\u003e\n        \u003ca href=\"{{ post.filePath }}\" \u003eClick here\u003c/a\u003e\n      \u003c/li\u003e\n    {%- endfor -%}\n    \u003c/ul\u003e\n  \u003cdiv\u003e\n```\n\n## Command line arguments\n```\n$ mrHyde scan -h\n\nScan the source folder\n\nPositionals:\n  dir  Directory to scan                               [required] [default: \".\"]\n\nOptions:\n  -v, --version    Show version number                                 [boolean]\n  -h, --help       Show help                                           [boolean]\n      --templtate  Template file          [string] [default: \"_template.liquid\"]\n```\n\n```\n$ mrHyde run -h\n\nRun the static website generator\n\nPositionals:\n  dir  Directory to scan                                     [string] [required]\n  out  Output directory                              [string] [default: \"./out\"]\n\nOptions:\n  -v, --verbose   Run with verbose logging            [boolean] [default: false]\n      --version   Show version number                                  [boolean]\n  -h, --help      Show help                                            [boolean]\n      --template  Template file           [string] [default: \"_template.liquid\"]\n      --asset     Asset directory                   [string] [default: \"assets\"]\n  -e, --erase     Erase the output before generation  [boolean] [default: false]\n  -w, --watch     Run in watch mode                   [boolean] [default: false]\n  \n```\n\n```\n$ mrHyde dev -h\n\nRun the static website generator in watch mode and expose the result\n\nPositionals:\n  dir  Directory to scan                                     [string] [required]\n  out  Output directory                              [string] [default: \"./out\"]\n\nOptions:\n  -v, --verbose   Run with verbose logging            [boolean] [default: false]\n      --version   Show version number                                  [boolean]\n  -h, --help      Show help                                            [boolean]\n      --template  Template file           [string] [default: \"_template.liquid\"]\n      --asset     Asset directory                   [string] [default: \"assets\"]\n  -e, --erase     Erase the output before generation  [boolean] [default: false]\n      --host      Web server host                [string] [default: \"localhost\"]\n  -p, --port      Web server port                         [number] [default: 80]\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvuzi%2Fmrhyde","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvuzi%2Fmrhyde","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvuzi%2Fmrhyde/lists"}