Skip to main content

Markata

A fast, plugin-driven static site generator with a powerful feed system.

CI Go Version License

Overview

Markata (formerly markata-go) is a static site generator written in Go that processes Markdown files with YAML frontmatter and generates a complete static website. It features a flexible plugin architecture, a powerful feed system for creating archives and syndication feeds, and Jinja2-like templating.

Status: Markata remains a 0.x Go project; the rename is not a 1.0 release decision. The markata executable is preferred and markata-go remains supported. The original Python project is at WaylonWalker/markata-py; this repository is the Go implementation.

Key Features

  • Plugin-driven architecture - Extensible system with 30+ built-in plugins
  • Powerful feed system - Define feeds with filtering, sorting, and pagination; generate multiple output formats (HTML, RSS, Atom, JSON) from a single definition
  • Jinja2-like templates - Familiar template syntax via pongo2 with custom filters
  • 9-stage lifecycle - Configure, Validate, Glob, Load, Transform, Render, Collect, Write, Cleanup
  • Concurrent processing - Parallel processing with configurable worker count
  • Markdown with extensions - GFM tables, strikethrough, task lists, admonitions, syntax highlighting, wikilinks, and table of contents generation
  • Live reload development server - Built-in server with file watching and automatic rebuilds

Installation

# One-liner install script (Linux/macOS)
curl -sSL https://raw.githubusercontent.com/WaylonWalker/markata/main/install.sh | bash

# Using jpillora/installer (Linux/macOS)
curl -sL https://i.jpillora.com/WaylonWalker/markata | bash

# Using eget
eget WaylonWalker/markata

# Using mise (installs from GitHub releases)
mise use -g github:WaylonWalker/markata

Go Install

Until a tagged release contains the new entry point, install the canonical binary from main:

go install github.com/WaylonWalker/markata/cmd/markata@main

Existing historical tagged versions remain available under the former github.com/WaylonWalker/markata-go module path when pinned explicitly. For current source, use go install github.com/WaylonWalker/markata/cmd/markata-go@main to install the legacy-named executable.

Manual Download

Download pre-built binaries from GitHub Releases.

Available platforms: Linux (amd64, arm64, armv7), macOS (Intel, Apple Silicon), Windows (amd64), FreeBSD (amd64), Android (arm64/Termux).

See docs/installation.md for detailed installation instructions.

Quick Start

# Create a new post
markata new "Hello World"

# Build the site
markata build

# Serve with live reload
markata serve

Configuration

The existing markata-go.toml, [markata-go], and MARKATA_GO_* configuration contracts remain supported. Do not rename these to markata yet: that namespace is also used by the historical Python product. See the name migration guide.

markata-go uses TOML configuration (also supports YAML and JSON). Create a markata-go.toml in your project root:

[markata-go]
# Site metadata
title = "My Site"
description = "A site built with markata-go"
url = "https://example.com"
author = "Your Name"

# Build settings
output_dir = "output"
templates_dir = "templates"
assets_dir = "static"

# Reading time calculation
words_per_minute = 200

# Concurrency (0 = auto based on CPU cores)
concurrency = 0

# Plugin configuration
hooks = ["default"]
disabled_hooks = []

# Content discovery
[markata-go.glob]
patterns = ["posts/**/*.md", "pages/**/*.md"]
use_gitignore = true

# Markdown extensions
[markata-go.markdown]
extensions = ["tables", "strikethrough", "autolinks", "tasklist"]

# Auto-generated descriptions
[markata-go.description]
max_length = 160

# Table of contents
[markata-go.toc]
min_level = 2
max_level = 4

# Wikilinks
[markata-go.wikilinks]
warn_broken = true

Environment Variable Overrides

All configuration options can be overridden via environment variables using the MARKATA_GO_ prefix:

MARKATA_GO_OUTPUT_DIR=dist markata-go build
MARKATA_GO_URL=https://staging.example.com markata-go build
MARKATA_GO_CONCURRENCY=4 markata-go build

Content

Frontmatter Format

Posts use YAML frontmatter to define metadata:

---
title: "My First Post"
slug: "my-first-post"
date: 2024-01-15
published: true
draft: false
tags: ["go", "static-site"]
description: "An introduction to markata-go"
template: "post.html"
---

Supported Fields

Field Type Default Description
title string - Post title
slug string auto URL-safe identifier (auto-generated from title if not set)
date date - Publication date
published bool false Whether the post is published
draft bool false Whether the post is a draft
tags []string [] List of tags
description string auto Post description (auto-generated if not set)
template string post.html Template file to use

Any additional fields in frontmatter are stored in Extra and accessible in templates.

Feed System

The feed system is markata-go's most powerful feature. Define feeds to create filtered, sorted, paginated collections of posts with multiple output formats.

Feed Configuration

# Feed defaults - inherited by all feeds
[markata-go.feed_defaults]
items_per_page = 10
orphan_threshold = 3

[markata-go.feed_defaults.formats]
html = true
rss = true
atom = false
json = false

[markata-go.feed_defaults.templates]
html = "feed.html"
card = "card.html"

[markata-go.feed_defaults.syndication]
max_items = 20
include_content = true

Defining Feeds

# Main blog feed
[[markata-go.feeds]]
slug = "blog"
title = "Blog"
description = "All blog posts"
filter = "published == True"
sort = "date"
reverse = true
items_per_page = 10

[markata-go.feeds.formats]
html = true
rss = true
atom = true
json = true

# Home page (empty slug = root index.html)
[[markata-go.feeds]]
slug = ""
title = "Latest Posts"
filter = "published == True"
sort = "date"
reverse = true
items_per_page = 5

[markata-go.feeds.formats]
html = true

# Featured posts
[[markata-go.feeds]]
slug = "featured"
title = "Featured"
description = "Featured posts"
filter = "published == True and featured == True"
sort = "date"
reverse = true

Multiple Output Formats

Each feed can generate multiple formats from a single definition:

Format Output Description
html /{slug}/index.html Paginated HTML pages
rss /{slug}/rss.xml RSS 2.0 feed
atom /{slug}/atom.xml Atom 1.0 feed
json /{slug}/feed.json JSON Feed
markdown /{slug}/index.md Markdown output
text /{slug}/index.txt Plain text output

CLI Commands

markata-go build

Build the static site.

markata-go build              # Standard build
markata-go build --clean      # Clean output directory and build cache first
markata-go build --dry-run    # Show what would be built
markata-go build -v           # Verbose output
markata-go build -o dist      # Custom output directory

markata-go serve

Development server with live reload.

markata-go serve              # Serve on localhost:8000
markata-go serve -p 3000      # Custom port
markata-go serve --host 0.0.0.0  # Bind to all interfaces
markata-go serve --no-watch   # Disable file watching
markata-go serve -v           # Verbose logging

markata-go new <title>

Create a new post.

markata-go new "My First Post"         # Creates pages/post/my-first-post.md
markata-go new "Hello World" --dir blog  # Creates blog/hello-world.md
markata-go new "Draft" --draft          # Create as draft
markata-go new "Published" --draft=false # Create as published (default)

markata-go config

Configuration management commands.

markata-go config show           # Show resolved config (YAML)
markata-go config show --json    # Show as JSON
markata-go config show --toml    # Show as TOML

markata-go config get output_dir          # Get specific value
markata-go config get glob.patterns       # Nested values with dot notation

markata-go config validate       # Validate configuration

markata-go config init           # Create markata-go.toml
markata-go config init site.yaml # Create YAML config
markata-go config init --force   # Overwrite existing

markata-go version

Show version information.

markata-go version           # Full version info
markata-go version --short   # Just the version number
markata-go --version         # Short version flag

Global Flags

-c, --config string   Config file path (default: auto-discover)
-o, --output string   Output directory (overrides config)
-v, --verbose         Verbose output

Documentation

Development

Building from Source

# Clone the repository
git clone https://github.com/WaylonWalker/markata.git
cd markata-go

# Build
just build

# Run tests
just test

# Run all quality checks
just check

Using just

The project uses just for development commands:

just build          # Build with version info
just test           # Run tests
just test-race      # Run tests with race detector
just lint           # Run linters
just check          # Run all quality checks (fmt, vet, lint, test)
just snapshot       # Test goreleaser locally
just ci             # Run what CI runs

See the justfile for all available commands.

Contributing

This project is open source but not open contribution. See CONTRIBUTING.md for details.

If you want to build your own static site generator, feel free to fork this project or use the spec as a starting point for your own implementation.

Inspiration

  • markata - The Python SSG this project is based on
  • Hugo - Fast builds, good CLI
  • Eleventy - Plugin flexibility
  • Zola - Single binary simplicity

License

MIT License - see LICENSE for details.

Copyright (c) 2024 Waylon Walker

Metadata

Release files for markata 0.14.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for markata 0.14.0
File Actions
markata-0.14.0-py3-none-win_arm64.whl Python 3 none Windows ARM64 Details for markata-0.14.0-py3-none-win_arm64.whl
markata-0.14.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details for markata-0.14.0-py3-none-win_amd64.whl
markata-0.14.0-py3-none-musllinux_1_2_x86_64.whl Python 3 none Linux musl 1.2+ x86-64 Details for markata-0.14.0-py3-none-musllinux_1_2_x86_64.whl
markata-0.14.0-py3-none-musllinux_1_2_aarch64.whl Python 3 none Linux musl 1.2+ ARM64 Details for markata-0.14.0-py3-none-musllinux_1_2_aarch64.whl
markata-0.14.0-py3-none-manylinux_2_17_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details for markata-0.14.0-py3-none-manylinux_2_17_x86_64.whl
markata-0.14.0-py3-none-manylinux_2_17_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details for markata-0.14.0-py3-none-manylinux_2_17_aarch64.whl
markata-0.14.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details for markata-0.14.0-py3-none-macosx_11_0_arm64.whl
markata-0.14.0-py3-none-macosx_10_9_x86_64.whl Python 3 none macOS 10.9+ x86-64 Details for markata-0.14.0-py3-none-macosx_10_9_x86_64.whl

Total release size: 529.2 MB

Release files / markata-0.14.0-py3-none-win_arm64.whl

Download URL markata-0.14.0-py3-none-win_arm64.whl
Size 64.3 MB
Tags Python 3 Windows ARM64
SHA-256 checksum
How to use checksums
e3cd1aa6567b0f88b1e4fab1555058d4a56ef31990bcb448d9a8ac497aec2b26
BLAKE2b-256 checksum
How to use checksums
1083f0461df6b2f5bcf4da4e9ca6278462f651f92d303b7312ef6cfa7d5438e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Release files / markata-0.14.0-py3-none-win_amd64.whl

Download URL markata-0.14.0-py3-none-win_amd64.whl
Size 68.4 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
5900c3683ee0646b1873d656f5d49c9edff5eae4bfb80a4913410534b7e7df39
BLAKE2b-256 checksum
How to use checksums
15b5755a279f4f66571c32eb59189f00f7d0601c24b131d734fb61bb03dc4b63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Release files / markata-0.14.0-py3-none-musllinux_1_2_x86_64.whl

Download URL markata-0.14.0-py3-none-musllinux_1_2_x86_64.whl
Size 67.5 MB
Tags Linux musl 1.2+ x86-64 Python 3
SHA-256 checksum
How to use checksums
174f80199c0aeb1daff78c99e99e62c5c855abf25831c9035424fbc82e03274f
BLAKE2b-256 checksum
How to use checksums
c6be18fc1d3be5bb06ea90d0cd069ffc505945e00526273a2d1c410f569bfa0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Release files / markata-0.14.0-py3-none-musllinux_1_2_aarch64.whl

Download URL markata-0.14.0-py3-none-musllinux_1_2_aarch64.whl
Size 63.8 MB
Tags Linux musl 1.2+ ARM64 Python 3
SHA-256 checksum
How to use checksums
32971f7239a5cbc1ce4a2f8c7b4e2c55c15ae029727c23b0191092bde3e8e001
BLAKE2b-256 checksum
How to use checksums
9b8a01eac09a7259e99599ab6db6beac1b933d0f0d721b1b726d419d507ee85a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Release files / markata-0.14.0-py3-none-manylinux_2_17_x86_64.whl

Download URL markata-0.14.0-py3-none-manylinux_2_17_x86_64.whl
Size 67.5 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
4fcb0b40df49a741ba1542ca4e4b69488d6d5d3bc4c4e33402f0319852f69486
BLAKE2b-256 checksum
How to use checksums
5d73d140b126172d135bb04f1e197175cceb6d2ea7e5a08a175b4105c6a2d943
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Release files / markata-0.14.0-py3-none-manylinux_2_17_aarch64.whl

Download URL markata-0.14.0-py3-none-manylinux_2_17_aarch64.whl
Size 63.8 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
c3dff66e8eece45a5128407ba670977a377c6599cbeac01ff4a5395d6e23527d
BLAKE2b-256 checksum
How to use checksums
0efc79963c6d02c9d25ffb8bd31abff41e32039a88e464b173c5fa22f94b0a74
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Release files / markata-0.14.0-py3-none-macosx_11_0_arm64.whl

Download URL markata-0.14.0-py3-none-macosx_11_0_arm64.whl
Size 65.4 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
9331b7f3b21b17d7d0a7ac36505c7a37c38784e5edd0c37c4746455044f199a6
BLAKE2b-256 checksum
How to use checksums
4ae03e8f997ecb5afc8f8c920589a376af2179371bbecff8d1647877cbbd9357
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Release files / markata-0.14.0-py3-none-macosx_10_9_x86_64.whl

Download URL markata-0.14.0-py3-none-macosx_10_9_x86_64.whl
Size 68.6 MB
Tags Python 3 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
9716406523d343d2a37b271c9ca5d8be3667c8032ed11ff27d1c6767f9ac30ca
BLAKE2b-256 checksum
How to use checksums
d4939e164cb52183b208c927fc2e3fa28b28a4ff4ba8dc4ba52fa50301f2d176
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Security for markata 0.14.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 8 files in this release have been uploaded with provenance metadata.

Select from 8 files

Attestation for markata-0.14.0-py3-none-win_arm64.whl

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.14.0 This release

8 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page