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

Node.js 24 is required only for contributor-side JavaScript and CSS quality tooling. Installing and using the MaatLog Python package does not require Node.js.

Official HTML and CSS support follows the browserslist query in package.json. Long-tail browsers that still appear in defaults (Opera Mini, KaiOS 2.x, UC Browser, and QQ Browser) are out of scope.

Install both locked development environments and run the frontend checks:

uv sync --locked --all-groups
npm ci
npm run check

The individual frontend commands are:

npm run lint:js
npm run format:check
npm run typecheck:js
npm run lint:css
npm run format

The full verification profile runs browser-based accessibility tests, so install the Playwright browser once before running it. On a system that also needs the browser’s OS packages, run the same command with --with-deps (it uses sudo):

uv run playwright install chromium

The authoritative full repository verification remains:

./scripts/ci/verify.sh full

License and status

MaatLog MVP targets Sphinx-based static blogs. Development is still active and the published package has no known users. Until the project stabilizes, Theme API updates are breaking and do not keep older Theme API versions working. Public metadata keys, config names, roles, generated docname rules, and diagnostic codes remain 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.1.tar.gz (61.2 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.1-py3-none-any.whl (79.9 kB view details)

Uploaded Python 3

File details

Details for the file maatlog-0.0.1.tar.gz.

File metadata

  • Download URL: maatlog-0.0.1.tar.gz
  • Upload date:
  • Size: 61.2 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.1.tar.gz
Algorithm Hash digest
SHA256 b5197341af66548f416e49f31bc741ba57ec1ca16ee5ff66b6e4a34104fac613
MD5 20e05d4aded0c4e830bc150aa144a0f4
BLAKE2b-256 0236e59452e5c3da6a8d515021e66ab86780d96264b8cfd479f891301d7b987b

See more details on using hashes here.

Provenance

The following attestation bundles were made for maatlog-0.0.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: maatlog-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 79.9 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a52b26ab1f66d6bab2088398e0a6d67db1ea0dc081011ae5b31ebfe31144ad67
MD5 875f4b7a039c462b1dbcae53e3d14a7b
BLAKE2b-256 7bbfc71a3b319e546bf441f4426aa241e905dd995578eb78e4b335ad6519cbdd

See more details on using hashes here.

Provenance

The following attestation bundles were made for maatlog-0.0.1-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

This release

0.0.1 This release

2 files

0.0.0

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