Markata
A fast, plugin-driven static site generator with a powerful feed system.
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
markataexecutable is preferred andmarkata-goremains 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
Quick Install (Recommended)
# 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
- Installation Guide - Detailed installation instructions
- Configuration Guide - Full configuration reference
- CLI Reference - All CLI commands and options
- Plugin Reference - Built-in plugins 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)
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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logSecurity 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.
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 logA 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.