Skip to main content

Marmite

marmite

Marmite [Markdown makes sites] is a very! simple static site generator.

AGPL License Crates.io Version Docs and Demo

Create blog

Playground

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.

How it works

It does "one" simple thing only:

  • Reads all .md files on the input directory.
  • Using CommonMark parse it to HTML content.
  • Extract optional metadata from frontmatter or filename.
  • Generated html file for each page.
  • Outputs the rendered static site to the output folder.

It also handles generating or copying static/ and media/ to the output dir.

Before you start, you should know

  1. Marmite is meant to be simple, don't expect complex features
  2. Marmite is for bloggers, so writing and publishing articles in chronological order is the main use case.
  3. The generated static site is flat HTML by default (./{name}.html|rss|json). Workspaces can produce subdirectory-based multi-site layouts.
  4. Taxonomies: tags:, stream:, series:, authors:, and languages: (i18n)
  5. Marmite uses the date: attribute to differentiate posts from pages

Features

  • Everything embedded in a single binary.
  • Zero-Config to get started.
    • Optionally fully configurable via marmite.yaml
    • Configurable markdown parser (CommonMark extensions, rendering options)
  • Common-mark + Github Flavoured Markdown + Extensions.
  • Raw HTML allowed.
  • Emojis :smile:, spoiler ||secret||.
  • Wikilinks [[name|url]] and Obsidian links [[page]].
  • Markdown alerts (GitHub-style callouts).
  • Backlinks and related content.
  • Tags.
  • Multi authors with profile pages.
  • Multi streams (separate content in different listings).
  • Series support (ordered, chronological content groups with navigation).
  • Language streams / i18n (multilingual content with auto-discovery, translation links, hreflang SEO tags).
  • Draft content management (filtered from feeds and search).
  • Pagination.
  • Static search index with inline match previews.
  • RSS Feeds (index, tags, authors, streams, languages).
  • Next/previous post navigation (stream-aware).
  • Built-in HTTP server with WebSocket live reload.
  • Auto rebuild when content changes.
  • Shortcodes (YouTube, Spotify, cards, galleries, table of contents, custom templates).
  • Image gallery with automatic thumbnail generation.
  • Automatic image resizing (parallel processing, incremental builds, configurable quality).
  • Media organization (slug-based subfolders, @/ shorthand, content subfolder media).
  • Automatic sitemap generation.
  • --show-urls dry run to preview all site URLs without building.
  • File mappings (copy arbitrary files during site generation).
  • Redirect aliases (frontmatter aliases field generates redirect pages for old URLs).
  • Internal link validation (build-time checking, optional strict failure mode).
  • IndieWeb compliance (microformats, semantic HTML).
  • Markdown source publishing alongside HTML.
  • Built-in theme
    • Light and Dark modes.
    • Multiple colorschemes.
    • Fully responsive.
    • Spotlight search.
    • Easy to replace the index page and add custom CSS/JS.
    • Easy to customize Tera templates.
    • Math and Mermaid diagrams (native build-time SVG or client-side JS).
    • Build-time syntax highlighting via arborium.
    • Commenting system integration.
    • Banner images and og: tags.
  • Theme system with remote theme installation.
  • CLI to start a new theme from scratch.
  • Workspace multi-site support (single command builds, config inheritance, cross-site references).
  • AT Protocol / standard.site integration (publish posts to the decentralized social web).
  • Embedded AI agent skills for AI-assisted site management.
  • Available via cargo, pip/uvx, Homebrew, AUR, FreeBSD, Docker, and install script.

Installation

Install with cargo

cargo binstall marmite

or

cargo install marmite

Or download the pre-built binary from the releases

Alternative installation methods

Package managers

Homebrew (macOS/Linux)

brew install marmite

View formula

Arch Linux (AUR)

yay -S marmite-bin

View package

FreeBSD

pkg install marmite

View port

Or use docker

[!IMPORTANT]
The directory containing your marmite project must be mapped to containers /input
If running inside the directory use $PWD:/input The result will be generates in a site folder inside the input dir.

Build

$ docker run -v $PWD:/input ghcr.io/rochacbruno/marmite
Site generated at: site/

Serve (just add port mapping and the --serve)

$ docker run -p 8000:8000 -v $PWD:/input ghcr.io/rochacbruno/marmite --serve

[!INFO]
By default will run :latest, Add :x.y.z with the version you want to run.

Usage

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 --help for the full list of options including site metadata overrides, search, pagination, and other configuration flags.

Live reload in development

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>

Getting started

Read a tutorial on how to get started https://marmite.blog/getting-started.html and create your blog in minutes.

Docs

Read more on how to customize templates, add comments etc on https://marmite.blog/

That's all!

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:

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

marmite-0.4.0.tar.gz (411.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

marmite-0.4.0-py3-none-win_amd64.whl (19.0 MB view details)

Uploaded Python 3Windows x86-64

marmite-0.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (19.6 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

marmite-0.4.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (19.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

marmite-0.4.0-py3-none-macosx_11_0_arm64.whl (19.9 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

marmite-0.4.0-py3-none-macosx_10_12_x86_64.whl (19.1 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file marmite-0.4.0.tar.gz.

File metadata

  • Download URL: marmite-0.4.0.tar.gz
  • Upload date:
  • Size: 411.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for marmite-0.4.0.tar.gz
Algorithm Hash digest
SHA256 845972ffb3f45e40fd121f0ee6d6a6787470cfd9a3e1610d2b17020a1456ddbc
MD5 3b4972146a2150db22c881c264e68fe5
BLAKE2b-256 45bbef20033a5cd3b5a2f34fa8c798859bb2f7b7ea7ff95e3cfbfcb1c8247f29

See more details on using hashes here.

File details

Details for the file marmite-0.4.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: marmite-0.4.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 19.0 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for marmite-0.4.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 5b117901fe6ff4abcdc0e084dd24a6499b7acb8d2be2038696baf24b45ddf0a5
MD5 e74b86e66be10877c3472cc73fb295fb
BLAKE2b-256 fdcd2d1fa532d012736747be32079f7954ca1dcea9b61d4251594c63d38820e0

See more details on using hashes here.

File details

Details for the file marmite-0.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for marmite-0.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eba3de2b74f5f33b84045331cfe3a261c5796e680d4da6fdac6a58a4f30f4775
MD5 ef4485fa6f53c70fbb29389efbf210a4
BLAKE2b-256 d499a1184dd0551519c278e4dab71ed574f29e01cda4fbc00cfd4abd7707a307

See more details on using hashes here.

File details

Details for the file marmite-0.4.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for marmite-0.4.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d777f6551d24822b91e26f17e82421c728c57b52186a78eeba379f86a711ee0f
MD5 18fe39f7c70d39db34b741ba40bc18dd
BLAKE2b-256 b7b42dfd26d10fd981a3d6f9967be6b8aa1d583026b458ddafe39ff1eeec2df7

See more details on using hashes here.

File details

Details for the file marmite-0.4.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for marmite-0.4.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5a61f5fbc9724368517fe1214536937edca9a868f43c2d06bed5941cd597bcaf
MD5 4bf6b21657cb5bbdad28476d7db1bbff
BLAKE2b-256 52d2b53c5d7a8ceea302f1f3a4d4a5d523685b4c2230fcff4d21c2174abd4cc1

See more details on using hashes here.

File details

Details for the file marmite-0.4.0-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for marmite-0.4.0-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 901247561fcdde3090fbe87806b0570f222bc877c0464f6393e9902abaaed817
MD5 48ca4f4d865670e2275415c8a21d1ee5
BLAKE2b-256 a8827f68fb9bee54ffa30118e216443870493bb6eae6ffb0a1e7a42fb2c43da0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page