Marmite Documentation
Friday, 31 July 2026 - ⧖ 11.0 minMarkdown Makes Sites
Marmite is a fast, minimal static site generator written in Rust that converts Markdown files into HTML websites. It's designed for simplicity and includes features like live reloading, RSS feeds, and a built-in development server.
Marmite is the easiest static site generator optimized for blogs. It doesn't require specific folder structure or complex configuration - the goal is that a blog can be generated simply by running Marmite on a folder with Markdown and media files. Written in Rust, it provides very fast builds with everything included in a single binary.
Quick Start
Install
$ curl -sS https://marmite.blog/install.sh | sh
or check installation guide for more install options
Start blogging
$ marmite myblog --init-site \
--name Mysite \
--tagline "My Articles and Notes" \
--colorscheme nord \
--toc true \
--enable-search true
$ marmite myblog --new "My First Blog Post" -t "new,post"
$ marmite myblog --serve
Documentation
Getting Started
- Why to use Marmite?: Learn about Marmite's features and design philosophy
- Getting Started: Quick start guide to create your first blog with Marmite
- Python Installation: Installing marmite via pip or uvx
- Command Line Interface: Complete reference for all CLI commands and options
Content Creation
- Content Types and Taxonomy: Understanding posts, pages, tags, and streams
- Markdown Format: Supported markdown syntax and extensions
- Wikilinks Guide: Obsidian-style wikilinks with slug resolution
- Using Markdown to Customize Layout: Special markdown files for layout customization
- Streams Guide: Organizing content with streams
- Filename-Based Streams: Automatic stream detection from filename prefixes
- Language Streams (i18n): Multilingual content with auto-detected languages, translation linking, per-language streams and RSS, hreflang SEO tags
- Creating Translated Content from CLI: Create translations via
--new "Title" --lang pt --translates slug, with JSON output and automatic subfolder placement - Series Feature: Creating ordered content series
- Draft Posts Guide: Working with draft content
- Folder-Level Frontmatter Defaults: Inherit shared frontmatter (stream, tags, date, etc.) from a folder-level frontmatter.yaml file at any nesting depth, with layered inheritance and support for nested translation groups
Configuration
- Configuration Reference: Complete reference for all marmite.yaml options
- Configurable Markdown Parser: Customizing markdown processing
- IndieWeb Compliance: Making your site IndieWeb compatible
Templates and Theming
- Customizing Templates: How to customize templates and create themes
- Template Reference: Tera template language reference
- Themes Feature: Using and creating custom themes
- Remote Themes: Installing themes from remote repositories
Features
- Image Optimization and Resizing: Automatic image resizing with parallel processing and incremental builds
- Image Gallery: Create and display image galleries with automatic thumbnail generation
- Shortcodes Guide: Using shortcodes to add dynamic content to posts and pages
- Shortcodes Demo: Examples of all available shortcodes including YouTube, Spotify, cards, and content listings
- Show URLs Dry Run Command: Preview all site URLs without building - perfect for verification and planning
- Automatic Sitemap Generation: Built-in sitemap.xml generation for better SEO with configurable options
- File Mapping Feature: Copy arbitrary files during site generation using configurable mappings
- Automatic Image Download: Auto-generating banner images
- Media Organization: Slug-based media subfolders, @/ shorthand, and content subfolder media (content/{slug}/media/) with shared inheritance for translations
- Markdown Source Publishing: Publishing source files alongside HTML
- Link Checker with Lychee: Checking for broken links
- Enabling Comments: Adding comment systems to your blog
- Draft Posts Guide: Working with draft content and publishing workflow
- Workspace Multi-Site: Build and manage multiple sites from a single workspace with cross-site references, shared config, and unified builds
- AT Protocol standard.site: Complete guide to publishing your Marmite blog posts to the decentralized AT Protocol
- Redirect Aliases: Generate redirect pages for old URLs when content slugs change
- Internal Link Validation: Build-time validation of internal links with warning and strict failure modes
- Marmite Playground: Try marmite in the browser with a live editor and real-time preview
- Marmite Editor: Three-panel content editor with CodeMirror 6, live preview, metadata sidebar, auto-save, autocomplete, raw file editing, and config dialog during --serve mode
- Marmite Toolbar: Floating dev toolbar for creating, editing, moving, cloning, and deleting content from the browser during --serve mode
- Content Management API: REST API under /marmite/ for programmatic content and config management during --serve mode
Deployment
- Hosting: Deploying to GitHub Pages, Netlify, and other platforms
Community
- Contributors: List of project contributors
- Showcase: Sites built with Marmite
Tutorials
Python Tutorial Series
- Python Tutorial Part 1: Introduction to Python basics
- Python Tutorial Part 2: Control flow and functions
- Python Tutorial Part 3: Data structures and modules
Release Notes
- Marmite 0.2.6 Release Notes: Latest features and improvements
Optional
- About: About the project
- Pagination: How pagination works
- Content without metadata: Example of content without frontmatter
Key Features
- Image Optimization: Automatic image resizing with configurable max widths, parallel processing using all CPU cores, and incremental builds that skip unchanged images
- Shortcodes: Insert dynamic content using simple markers like
<!-- .youtube id=VIDEO_ID -->,<!-- .spotify url="album/ID" -->, or<!-- .card slug=content-slug --> - Enhanced Tera Functions: New template functions including
get_data_by_slug()for content lookup and enhancedgroup()function with sorting and limiting - Content Cards: Display linked previews of any content (posts, pages, tags, authors, series) with automatic data resolution
- External URL Support: Card shortcodes automatically detect and handle external URLs with proper targeting
- Template URL Functions: All shortcode templates use the
url_for()function for proper URL generation - URL Preview (Dry Run): Use
--show-urlscommand to preview all site URLs without building, perfect for verification and planning - Automatic Sitemap Generation: Built-in sitemap.xml generation for better SEO, enabled by default with support for absolute and relative URLs
- File Mapping: Copy arbitrary files during site generation with flexible source and destination patterns, supporting single files, directories, and glob patterns
- Themes: Complete theme system with remote theme installation and customization
- Series Support: Group related content in chronological order with automatic navigation
- Enhanced Streams: Filename-based stream detection with configurable display names
- Configurable Markdown Parser: Full control over CommonMark extensions and rendering options
- IndieWeb Compliance: Built-in microformats and semantic HTML for better web interoperability
- Navigation Links: Automatic next/previous post navigation with stream-aware linking
- Draft Content Management: Special handling of draft posts with filtering from feeds and search
- Related Content: Configurable related content and backlinks between posts
- Markdown Alerts: Support for GitHub-style callouts and alert boxes in markdown
- AT Protocol Publishing: Native support for publishing blog posts to standard.site and the decentralized AT Protocol with automatic well-known verification
- Redirect Aliases: Frontmatter
aliasesfield generates redirect pages at old URLs when content slugs change, with meta refresh, canonical links, and conflict detection - Internal Link Validation: Build-time checking of internal links with configurable warning or strict failure mode via
check_internal_linksandstrict_internal_linksoptions. Media file links (images, PDFs, etc.) can also be validated withcheck_media_links: true - Native Mermaid Rendering: Mermaid diagrams are rendered to inline SVG at build time by default (
native_mermaid_render: true). No client-side JavaScript or CDN dependency. Setnative_mermaid_render: falseto use client-side MermaidJS rendering instead. The renderer can be customized withmermaid_configat three cascading levels (marmite.yaml, frontmatter.yaml, .md frontmatter) with deep merge. Accepts the same keys as the mermaid-rs-renderer JSON config format (camelCase):theme(dark, forest, neutral, modern, default),themeVariables(colors, fonts),flowchart(nodeSpacing, rankSpacing),preferredAspectRatio, and more. - Language Streams (i18n): Multilingual content support via language streams. Languages are auto-detected from content - no configuration required. Set
language: xxin frontmatter or use subfolder naming conventions (content/hello/pt-ola.md). Optionally configurelanguagesin marmite.yaml withdisplay_namefor pretty labels. Link translations via subfolder grouping,translates:pointer (each translation points to the original slug, marmite builds bidirectional links), ortranslations:list. Each language gets its own stream page and RSS feed. Translation links and hreflang SEO tags are added automatically. Flat HTML output preserved. Create translations from the CLI with--new "Title" --lang pt --translates slug. Alanguages.htmlgroup page lists all content organized by language (always generated, even on monolingual sites). Thelanguages_titleconfig option controls the page heading. Thelanguage_display_nameTera function andgroup(kind="language")are available for custom templates. - Smart Content Creation: The
--newCLI command auto-detectsposts/andpages/subdirectories in structured projects and places content there automatically. Posts go toposts/, pages (with-p) go topages/. Use-dto override. Flat projects and content-folder projects without these subdirectories are unaffected. - Workspace Multi-Site: Build multiple independent sites from a single workspace directory. A
marmite-workspace.yamldefines sites, shared defaults, and cross-site reference rules. The default site renders at the root, others in subdirectories. Cross-site links usesite::pathsyntax (e.g.,photos::gallery.htmlbecomes/photos/gallery.html). Config inheritance lets workspace defaults flow to all sites with per-site overrides. Watch mode and live reload cover all sites.--show-urlsand--shortcodesaggregate across sites.--new --site namecreates content in a specific site. - Development Toolbar: A floating sidebar panel injected during
--servemode. Provides tabs for viewing content metadata, editing frontmatter with autocomplete, creating/cloning/moving/deleting content, managing menu and layout, editing site config, and viewing site stats. Toolbar state persists in localStorage. A 404 "Create it!" button lets you create missing pages with one click. - Content Management API: REST API under
/__marmite__/available during--serve. Endpoints:POST /content(create),PATCH /content/{slug}(update frontmatter),POST /content/{slug}/clone(full copy),POST /content/{slug}/move(rename/relocate),DELETE /content/{slug}(remove),POST /config(create),PATCH /config(update),GET /data(aggregated tags, streams, series, authors, slugs, config, build stats). All responses are JSON. Per-content metadata available at/{slug}.metadata.json.
Agents
Marmite ships with an embedded agent skill following the Agent Skills open format. AI coding agents (Claude Code, Codex, Gemini CLI, Cursor, and others) can use this skill to build, configure, and manage marmite sites.
Viewing the Skill
Print the embedded skill document to stdout:
$ marmite --skill
This outputs the full SKILL.md with workflows for project setup, content authoring, configuration, templates, themes, shortcodes, and deployment.
Installing the Skill
Install the skill into a project so agents discover it automatically. No input folder argument is needed - the skill is installed in the current directory by default.
For agents that follow the standard agent-skills pattern (Codex, Gemini CLI, Cursor, etc.):
$ marmite --skill-install
This creates .agents/skills/marmite/ with the SKILL.md and all reference files.
For Claude Code, which uses .claude/skills/ instead:
$ marmite --skill-install-claude
This creates .claude/skills/marmite/ with the same files.
Both flags can be combined to install for all agents at once:
$ marmite --skill-install --skill-install-claude
The installed structure:
.agents/skills/marmite/ # Standard agent-skills pattern
SKILL.md # Main skill document
references/
cli-reference.md # All CLI flags and options
installation.md # Installation methods
config-reference.md # Complete marmite.yaml reference
frontmatter.md # Content frontmatter fields
content-organization.md # Directory structure and taxonomy
markdown-format.md # Markdown syntax and extensions
tera-templates.md # Template system and variables
shortcodes.md # Shortcode creation and usage
deployment-guide.md # Hosting and deployment guides
comment-system.md # Comment system integration
.claude/skills/marmite/ # Claude Code
SKILL.md # Same files as above
references/ # Same references
How Agents Use It
Agents that support the agent-skills pattern load skills in three stages:
- Discovery - the agent reads the skill name and description from SKILL.md frontmatter
- Activation - when the task matches (e.g., "create a blog with marmite"), the agent reads the full SKILL.md
- Execution - the agent follows the workflows and loads reference files as needed for detailed information
Example Agent Interactions
With the skill installed, an agent can handle requests like:
- "Create a new marmite blog about cooking with search enabled and the dracula colorscheme"
- "Add a Python tutorial series with three parts"
- "Set up GitHub Pages deployment for this site"
- "Create a custom shortcode for embedding recipe cards"
- "Add Giscus comments to the blog"
- "Customize the homepage with a hero section and sidebar"
- "Create a new theme based on the default one"
The skill provides the agent with the exact commands, configuration fields, frontmatter syntax, and template variables needed to complete each task correctly.
Please consider giving a ☆ on Marmite Github repository, that helps a lot!