MaatLog is a Sphinx extension that turns a documentation project into a static blog. Posts are ordinary reStructuredText or MyST Markdown documents with a small metadata schema. MaatLog adds archives, taxonomy navigation, Atom feeds, and an HTML Theme API on top of Sphinx’s public extension surface.
Requirements
Python 3.14+
Sphinx 9.1+
myst-parser 5.1+
Install
From a built distribution (wheel or sdist):
pip install maatlog
Or from a checkout with uv:
uv sync uv pip install -e .
Quick start
Enable the extension and (optionally) the bundled theme in conf.py:
extensions = ["maatlog"] html_theme = "maatlog-default" html_baseurl = "https://example.com/" # required when Atom feeds are enabled maatlog_timezone = "UTC" maatlog_tags = {"sphinx": "Sphinx", "python": "Python"} maatlog_categories = {"engineering": "Engineering"} maatlog_authors = {"alice": "Alice"}Write a reStructuredText post (field list before the title):
:maatlog-post: true :maatlog-published-at: 2026-08-01T09:00:00+09:00 :maatlog-slug: hello-maatlog :maatlog-tags: sphinx, python :maatlog-categories: engineering :maatlog-authors: alice :maatlog-excerpt: First post with MaatLog. Hello MaatLog ============= Body of the post…
Or an equivalent MyST Markdown post (YAML front matter):
--- maatlog-post: true maatlog-published-at: 2026-08-01T09:00:00+09:00 maatlog-slug: hello-maatlog maatlog-tags: [sphinx, python] maatlog-categories: [engineering] maatlog-authors: [alice] maatlog-excerpt: First post with MaatLog. --- # Hello MaatLog Body of the post…
Build HTML:
sphinx-build -b html sourcedir builddir
With the defaults above, MaatLog generates:
Post pages using the selected MaatLog theme
Archives under blog/ (configurable via maatlog_archive_docname)
Atom feeds under the archive root (when maatlog_generate_feeds is true)
Cross-reference roles such as :maatlog:post:, :maatlog:tag:, and friends
Rebuild notes
Most maatlog_* settings rebuild the Sphinx environment (env). Feed-related settings rebuild HTML outputs only (html). After changing taxonomy dictionaries, archive root, page size, timezone, or feed options, run a clean or full rebuild so archives and feeds stay consistent.
SOURCE_DATE_EPOCH (Unix seconds, UTC) freezes the build clock used for draft / scheduled / expired publication status. Prefer it for reproducible CI builds.
What MaatLog does not replace
MaatLog does not replace Sphinx document titles, toctree, search, autodoc, Pygments, or intersphinx. Ordinary documentation pages coexist with posts in the same project. Full HTML features (archives, Theme API validation, feeds, MaatLog HTML metadata) are guaranteed for the html and dirhtml builders only; other builders keep post body and role resolution where applicable.
Documentation
docs/authoring.rst — post metadata schema and examples
docs/configuration.rst — conf.py settings and defaults
docs/theme-api.rst — Theme API 1.0 contract and official themes
docs/builders.rst — builder matrix and static-site constraints
Development
Clone the repository, install the locked development environment, and run the shared verification entrypoint:
uv sync --locked --all-groups ./scripts/ci/verify.sh full
License and status
MaatLog MVP targets Sphinx-based static blogs. Public metadata keys, config names, roles, the Theme API major version, generated docname rules, and diagnostic codes are compatibility-managed surfaces.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file maatlog-0.0.0.tar.gz.
File metadata
- Download URL: maatlog-0.0.0.tar.gz
- Upload date:
- Size: 50.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e7e8ae9fddb8959399ec5762defd5409c51f962cfd895fe7d019271c8ef8d3d7
|
|
| MD5 |
d992f5cb0750e52947fb725cabfc2450
|
|
| BLAKE2b-256 |
8c0172c8500dbdacbdb2245b33b88d0aacd50d4ea02bb7beb7125b5b1855dfa3
|
Provenance
The following attestation bundles were made for maatlog-0.0.0.tar.gz:
Publisher:
publish-to-pypi.yml on usaturn/maatlog
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
maatlog-0.0.0.tar.gz -
Subject digest:
e7e8ae9fddb8959399ec5762defd5409c51f962cfd895fe7d019271c8ef8d3d7 - Sigstore transparency entry: 2449372562
- Sigstore integration time:
-
Permalink:
usaturn/maatlog@d0d8f9a7221133b28962da1c06bc9066f479969f -
Branch / Tag:
refs/tags/v0.0.0 - Owner: https://github.com/usaturn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@d0d8f9a7221133b28962da1c06bc9066f479969f -
Trigger Event:
push
-
Statement type:
File details
Details for the file maatlog-0.0.0-py3-none-any.whl.
File metadata
- Download URL: maatlog-0.0.0-py3-none-any.whl
- Upload date:
- Size: 66.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e2c4e40771459175b0e6f562091e19494e9425191dd1f0dce52f093feab10dcb
|
|
| MD5 |
93467470819474ca54f35e119383252e
|
|
| BLAKE2b-256 |
6d9fe4fc3ee15d26d9ecc8f0ba116eee65b81f061fef017c98b809cabe85f7bd
|
Provenance
The following attestation bundles were made for maatlog-0.0.0-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on usaturn/maatlog
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
maatlog-0.0.0-py3-none-any.whl -
Subject digest:
e2c4e40771459175b0e6f562091e19494e9425191dd1f0dce52f093feab10dcb - Sigstore transparency entry: 2449372606
- Sigstore integration time:
-
Permalink:
usaturn/maatlog@d0d8f9a7221133b28962da1c06bc9066f479969f -
Branch / Tag:
refs/tags/v0.0.0 - Owner: https://github.com/usaturn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@d0d8f9a7221133b28962da1c06bc9066f479969f -
Trigger Event:
push
-
Statement type: