Skip to main content

doxite

preview

Doxite is a minimal static site generator written in Python.
It converts Markdown files into static HTML using a custom Markdown parser and provides a simple CLI workflow for bootstrapping a project and generating pages.

Current status: early-stage / in active development
The Markdown parser is implemented and working, and the CLI scaffold has started. The full static site generation pipeline is still being built.


Features

Implemented

  • Custom Markdown parser written from scratch in Python
  • HTML AST / node-based rendering pipeline
  • Support for common Markdown block types:
    • Headings
    • Paragraphs
    • Blockquotes
    • Fenced code blocks
    • Ordered lists
    • Unordered lists
  • Support for inline Markdown syntax:
    • Bold
    • Italic
    • Inline code
    • Links
    • Images
  • CLI-based project initialization with doxite init
  • Fixture-based parser tests comparing generated HTML against expected HTML

Planned

  • Built-in page template injection
  • Public asset copying
  • doxite serve
  • doxite watch
  • Frontmatter support
  • Better theming / template system
  • Improved CLI UX and project scaffolding

Why this project?

Doxite started as an experiment to understand how static site generators work internally rather than relying on an existing Markdown or SSG library.

The goal is to build a lightweight, hackable static site generator with:

  • a custom Markdown parser
  • a simple build pipeline
  • a clean Python CLI
  • minimal dependencies

Installation

pip install doxite

or with uv:

uv add doxite

Quick Start

Initialize a new Doxite project:

doxite init my-site

This creates a basic project structure:

my-site/
├── public/
└── src/
    └── index.md

Or initialize in the current directory:

doxite init .

Current CLI

doxite init

Bootstraps a new Doxite project in the given directory.

doxite init my-site

or:

doxite init .

At the moment, the CLI is intentionally minimal and mainly focused on project scaffolding while the rest of the SSG pipeline is being built.


Project Status

Doxite is currently in an early development stage.

Working today

  • Markdown parsing
  • HTML rendering from the parsed Markdown AST
  • Project initialization CLI
  • doxite init
  • doxite build

In progress

  • Internal template injection for rendered pages
  • Static asset handling

Markdown Support

Doxite currently supports the following Markdown constructs:

Block-level

  • # to ###### headings
  • Paragraphs
  • Blockquotes using >
  • Ordered lists using 1.
  • Unordered lists using -
  • Fenced code blocks using triple backticks

Inline

  • *bold*
  • _italic_
  • `code`
  • [link](url)
  • ![image](url)

Design Notes

A few implementation choices in the current parser are intentionally simplified:

  • The Markdown parser is a lightweight custom parser, not a full CommonMark implementation.
  • It is designed as a streaming / line-oriented parser with a focus on simplicity and performance.
  • The current block parsing behavior intentionally favors a straightforward single-pass design over strict CommonMark compliance.

The goal is not to perfectly replicate every edge case of existing Markdown parsers, but to build a practical and understandable SSG core.


Roadmap

✅Build custom Markdown parser

✅Add HTML node rendering

✅Add parser tests with fixtures

✅Add basic CLI with doxite init and doxite build

✅Implement page build pipeline (partially)

✅Inject rendered content into a base HTML template

⬜Copy public assets to output directory

⬜Add doxite serve

⬜ Add doxite watch

⬜ Add frontmatter support

⬜ Improve theme/template support


Contributing

Issues, ideas, and feedback are welcome.

Doxite is still early, so the architecture and feature set are evolving quickly.

Metadata

Release files for doxite 0.2.1

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

Source distribution (sdist)

Source distribution for doxite 0.2.1
File Size Uploaded Provenance Actions
doxite-0.2.1.tar.gz 91.0 kB Without provenance Details for doxite-0.2.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for doxite 0.2.1
File Interpreter ABI Platform Actions
doxite-0.2.1-py3-none-any.whl Python 3 none any Details for doxite-0.2.1-py3-none-any.whl

Total release size: 105.9 kB

Release files / doxite-0.2.1.tar.gz

Download URL doxite-0.2.1.tar.gz
Size 91.0 kB
Tags Source
SHA-256 checksum
How to use checksums
3b52cc0ad175af60482455e953858e71dac66e260bc1a131694bc1236b7459f5
BLAKE2b-256 checksum
How to use checksums
66a88daae69552969672a8f00470f27aebeb12b74d9678afcd60affc586449e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / doxite-0.2.1-py3-none-any.whl

Download URL doxite-0.2.1-py3-none-any.whl
Size 14.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f066979654e747c591578f47a8ae79bbbcc67cd7f9cb46304fde09337f6f17f1
BLAKE2b-256 checksum
How to use checksums
02825c6edae95eacdeb48609b37e32478b7ea540c9ab03d1e2a21c997224e2e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for doxite 0.2.1

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

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.

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