Markdown makes sites - A Static Site Generator for Blogs
See the code
Marmite [Markdown makes sites] is a very! simple static site generator.
I'm a big user of other SSGs but it is frequently frustrating that it takes so much setup to get started.
Just having a directory of markdown files and running a single command sounds really useful.
— Michael, marmite user.
It does "one" simple thing only:
.md files on the input directory.CommonMark parse it to HTML content.frontmatter or filename.html file for each page.output folder.It also handles generating or copying static/ and media/ to the output dir.
./{name}.html|rss|json). Workspaces can produce subdirectory-based multi-site layouts.tags:, stream:, series:, authors:, and languages: (i18n)date: attribute to differentiate posts from pagesmarmite.yaml:smile:, spoiler ||secret||.[[name|url]] and Obsidian links [[page]].@/ shorthand, content subfolder media).--show-urls dry run to preview all site URLs without building.aliases field generates redirect pages for old URLs).og: tags.curl -sS https://marmite.blog/install.sh | sh
Also available via cargo, pip/uvx, Homebrew, Arch Linux, FreeBSD, and Docker. See the full installation guide for all methods.
It's simple, really!
$ marmite folder_with_markdown_files path_to_generated_site
Site generated at path_to_generated_site/
CLI
$ marmite --help
Marmite is the easiest static site generator.
Usage: marmite [OPTIONS] [INPUT_FOLDER] [OUTPUT_FOLDER] [COMMAND]
Commands:
atproto Manage atproto / standard.site integration
help Print this message or the help of the given subcommand(s)
Arguments:
[INPUT_FOLDER] Input folder containing markdown files
[OUTPUT_FOLDER] Output folder to generate the site [default: `input_folder/site`]
Options:
-v, --verbose... Verbosity level (0-4) [default: 0 warn]
-w, --watch Detect changes and rebuild the site automatically
--serve Serve the site with a built-in HTTP server
--bind <BIND> Address to bind the server [default: 0.0.0.0:8000]
-c, --config <CONFIG> Path to custom configuration file [default: marmite.yaml]
--init-templates Initialize templates in the project
--start-theme <NAME> Initialize a theme with templates and static assets
--set-theme <THEME> Download and set a theme from a remote URL or local folder
--generate-config Generate the configuration file
--init-site Init a new site with sample content and default configuration
--force Force the rebuild of the site even if no changes detected
--shortcodes List all available shortcodes
--show-urls Show all site URLs organized by content type
--skill Print the embedded agent skill document (SKILL.md) to stdout
--skill-install Install the skill into .agents/skills/
--skill-install-claude Install the skill into .claude/skills/ for Claude Code
--new <TITLE> Create a new post with the given title
-e Edit the file in the default editor
-p Set the new content as a page
-t <TAGS> Set the tags for the new content (comma separated)
--site <SITE> Target site within a workspace
--skip-image-resize Skip image resizing during build
--check-internal-links Check internal links during build
--strict-internal-links Fail the build on broken internal links
-h, --help Print help
-V, --version Print version
Run
marmite --helpfor the full list of options including site metadata overrides, search, pagination, and other configuration flags.
When running with --serve --watch (or --serve -w), Marmite automatically rebuilds
on file changes and refreshes the browser via WebSocket. The default theme includes
live reload out of the box. For custom themes, add this snippet to your base template:
<script src="/__marmite__/livereload.js"></script>
Read a tutorial on how to get started https://marmite.blog/getting-started.html and create your blog in minutes.
Read more on how to customize templates, add comments etc on https://marmite.blog/
Marmite is very simple.
If this simplicity does not suit your needs, there are other awesome static site generators.
Here are some that I recommend:
185 followers · starred Nov 2025
208 followers · starred Apr 2025
1,475 followers · starred Feb 2025
931 followers · starred Jan 2025
Markdown makes sites - A Static Site Generator for Blogs
See the code
Marmite [Markdown makes sites] is a very! simple static site generator.
I'm a big user of other SSGs but it is frequently frustrating that it takes so much setup to get started.
Just having a directory of markdown files and running a single command sounds really useful.
— Michael, marmite user.
It does "one" simple thing only:
.md files on the input directory.CommonMark parse it to HTML content.frontmatter or filename.html file for each page.output folder.It also handles generating or copying static/ and media/ to the output dir.
./{name}.html|rss|json). Workspaces can produce subdirectory-based multi-site layouts.tags:, stream:, series:, authors:, and languages: (i18n)date: attribute to differentiate posts from pagesmarmite.yaml:smile:, spoiler ||secret||.[[name|url]] and Obsidian links [[page]].@/ shorthand, content subfolder media).--show-urls dry run to preview all site URLs without building.aliases field generates redirect pages for old URLs).og: tags.curl -sS https://marmite.blog/install.sh | sh
Also available via cargo, pip/uvx, Homebrew, Arch Linux, FreeBSD, and Docker. See the full installation guide for all methods.
It's simple, really!
$ marmite folder_with_markdown_files path_to_generated_site
Site generated at path_to_generated_site/
CLI
$ marmite --help
Marmite is the easiest static site generator.
Usage: marmite [OPTIONS] [INPUT_FOLDER] [OUTPUT_FOLDER] [COMMAND]
Commands:
atproto Manage atproto / standard.site integration
help Print this message or the help of the given subcommand(s)
Arguments:
[INPUT_FOLDER] Input folder containing markdown files
[OUTPUT_FOLDER] Output folder to generate the site [default: `input_folder/site`]
Options:
-v, --verbose... Verbosity level (0-4) [default: 0 warn]
-w, --watch Detect changes and rebuild the site automatically
--serve Serve the site with a built-in HTTP server
--bind <BIND> Address to bind the server [default: 0.0.0.0:8000]
-c, --config <CONFIG> Path to custom configuration file [default: marmite.yaml]
--init-templates Initialize templates in the project
--start-theme <NAME> Initialize a theme with templates and static assets
--set-theme <THEME> Download and set a theme from a remote URL or local folder
--generate-config Generate the configuration file
--init-site Init a new site with sample content and default configuration
--force Force the rebuild of the site even if no changes detected
--shortcodes List all available shortcodes
--show-urls Show all site URLs organized by content type
--skill Print the embedded agent skill document (SKILL.md) to stdout
--skill-install Install the skill into .agents/skills/
--skill-install-claude Install the skill into .claude/skills/ for Claude Code
--new <TITLE> Create a new post with the given title
-e Edit the file in the default editor
-p Set the new content as a page
-t <TAGS> Set the tags for the new content (comma separated)
--site <SITE> Target site within a workspace
--skip-image-resize Skip image resizing during build
--check-internal-links Check internal links during build
--strict-internal-links Fail the build on broken internal links
-h, --help Print help
-V, --version Print version
Run
marmite --helpfor the full list of options including site metadata overrides, search, pagination, and other configuration flags.
When running with --serve --watch (or --serve -w), Marmite automatically rebuilds
on file changes and refreshes the browser via WebSocket. The default theme includes
live reload out of the box. For custom themes, add this snippet to your base template:
<script src="/__marmite__/livereload.js"></script>
Read a tutorial on how to get started https://marmite.blog/getting-started.html and create your blog in minutes.
Read more on how to customize templates, add comments etc on https://marmite.blog/
Marmite is very simple.
If this simplicity does not suit your needs, there are other awesome static site generators.
Here are some that I recommend:
185 followers · starred Nov 2025
208 followers · starred Apr 2025
1,475 followers · starred Feb 2025
931 followers · starred Jan 2025