Skip to main content

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

  1. 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"}
  2. 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…
  3. 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…
  4. 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

maatlog-0.0.0.tar.gz (50.5 kB view details)

Uploaded Source

Built Distribution

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

maatlog-0.0.0-py3-none-any.whl (66.4 kB view details)

Uploaded Python 3

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

Hashes for maatlog-0.0.0.tar.gz
Algorithm Hash digest
SHA256 e7e8ae9fddb8959399ec5762defd5409c51f962cfd895fe7d019271c8ef8d3d7
MD5 d992f5cb0750e52947fb725cabfc2450
BLAKE2b-256 8c0172c8500dbdacbdb2245b33b88d0aacd50d4ea02bb7beb7125b5b1855dfa3

See more details on using hashes here.

Provenance

The following attestation bundles were made for maatlog-0.0.0.tar.gz:

Publisher: publish-to-pypi.yml on usaturn/maatlog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for maatlog-0.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e2c4e40771459175b0e6f562091e19494e9425191dd1f0dce52f093feab10dcb
MD5 93467470819474ca54f35e119383252e
BLAKE2b-256 6d9fe4fc3ee15d26d9ecc8f0ba116eee65b81f061fef017c98b809cabe85f7bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for maatlog-0.0.0-py3-none-any.whl:

Publisher: publish-to-pypi.yml on usaturn/maatlog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.4.1

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

0.0.1

2 files

This release

0.0.0 This release

2 files

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