Skip to content
selfdoc vs the Competition: Documentation Generators Compared

#selfdoc vs the Competition: Documentation Generators Compared

The documentation generator landscape shifted in 2026. Material for MkDocs entered maintenance mode after years of dominance, and its successor Zensical launched with a Rust-powered build engine. Meanwhile, the JavaScript ecosystem continues to fragment across React, Vue, and Astro-based options. This post compares selfdoc against six major tools across the features that matter most for technical documentation.

#Feature matrix

Feature matrix
FeatureselfdocSphinxZensicalDocusaurusStarlightVitePress
Code-aware directivesYes (10 languages)Python only (autodoc)NoNoNoNo
Multi-version docsYes (git-tag based)Via sphinx-multiversionNoYes (native)NoNo
Localization (i18n)Yes (built-in)Yes (gettext)Community pluginYes (native)Yes (native)Yes (native)
SearchBuilt-in facetedBasic / third-partyDisco (new)Algolia integrationPagefindMiniSearch
API reference genYes (from source)Yes (autodoc/autosummary)NoNoNoNo
Monorepo unified sitesYes (assembly system)NoNoNoNoNo
Root file generationYes (templates)NoNoNoNoNo
Release-gated buildsYes (via rlsbl)NoNoNoNoNo
Zero-JS outputYesYesYesNoYesNo
HMR / dev serverNoNoYes (fast)YesYes (fastest)Yes (sub-100ms)
WYSIWYG editingNoNoNoNoNoNo
Mature ecosystemNew15+ yearsNew (2026)Large (64k stars)Growing (8.4k stars)Growing (17.6k stars)

#Per-tool breakdown

#Sphinx (v9.1.0)

The Python ecosystem's gold standard for API documentation. Autodoc extracts docstrings directly from Python modules, and the extension ecosystem (MyST for Markdown, intersphinx for cross-project linking) is unmatched in depth. The trade-off is complexity: configuration is verbose, builds are slow on large projects, and the reStructuredText default is a barrier for contributors who think in Markdown. Best for: large Python libraries that need exhaustive API reference.

#Zensical (June 2026)

The spiritual successor to Material for MkDocs, built on a Rust engine claiming 4-5x faster builds. It reads existing mkdocs.yml files, easing migration from Material. The new Disco search replaces Lunr. MIT licensed. Too early to evaluate ecosystem maturity, but the build speed and backward compatibility with MkDocs config make it a strong contender for teams already in that ecosystem.

#Material for MkDocs (v9.7.0)

In maintenance mode since late 2025 with an estimated 90,000 GitHub projects using it. Still functional and widely documented, but new projects should evaluate Zensical instead. The plugin ecosystem remains the largest of any MkDocs-based tool.

#Docusaurus (v3.10.1)

Meta's React-based generator with the most mature built-in versioning system. Algolia DocSearch integration is best-in-class for large sites. The React dependency means heavier output bundles and a Node.js toolchain requirement. Best for: JavaScript/TypeScript projects that want versioned docs with minimal configuration.

#Starlight (v0.39)

The Astro team's documentation framework ships zero client-side JavaScript by default, producing the lightest pages in this comparison. Fastest HMR during development. No built-in versioning or API reference generation -- these require community integrations or manual solutions. Best for: projects that prioritize page performance and have simple versioning needs.

#VitePress (v1.x, 17.6k stars)

Vue-powered with sub-100ms HMR. Clean default theme and straightforward Markdown authoring. Like Starlight, it lacks built-in versioning and API reference generation. Best for: Vue ecosystem projects or teams that want fast iteration with minimal configuration.

#Where selfdoc fits

selfdoc occupies a different niche than the tools above. Rather than being a general-purpose static site generator with documentation features, it is a documentation generator that understands source code.

Code-aware directives. selfdoc's directive system extracts content directly from source files -- function signatures, docstrings, type definitions, struct schemas -- across Python, Go, TypeScript, JavaScript, Dart, Kotlin, Swift, Svelte, Zig, and SQL. Documentation stays synchronized with code because it is derived from code, not duplicated alongside it.

Root file generation. Templates in .stricttools/docs/ generate project root files like README.md and CLAUDE.md using the same directive system. One source of truth produces both the documentation site and the files developers encounter first.

Assembly system. The unified builder composes documentation from multiple projects into a single site with shared navigation, search, and theming. This is purpose-built for monorepos and multi-package ecosystems.

Release-gated builds. Integration with rlsbl means documentation is validated as part of the release pipeline. Stale directives, broken references, and missing coverage are caught before a version ships, not after.

#Honest limitations

selfdoc is newer and less battle-tested than Sphinx or Docusaurus. The community is small. The runtime is Python-only (no native Rust/Go build speed). There is no dev server with hot module replacement -- changes require a rebuild. There is no WYSIWYG editing experience. Teams choosing selfdoc are choosing a tool optimized for correctness over convenience: documentation that cannot drift from code, at the cost of a smaller plugin ecosystem and fewer community resources.

#Choosing

If your priority is build speed and you are migrating from MkDocs, look at Zensical. If you need exhaustive Python API docs with a mature ecosystem, Sphinx remains the standard. If you want polished versioned docs with minimal setup in a JavaScript project, Docusaurus is hard to beat. If page weight matters above all, Starlight.

If your priority is documentation that stays correct -- that extracts from source, validates during release, and assembles across projects -- selfdoc is built for that problem specifically.

More tools from this site

  • claudestream Drive Claude Code from Python: run it as a subprocess and read its output as typed events, with async and sync sessions, sandbox policies, and tools you define in Python
  • claudewheel A TUI Claude Code Launcher that lets you have more than one profile, manage sessions lifecycle, pick the exact CC version, model to use (even older unlisted ones), pick which GitHub account to use, etc.
  • dirstat Fast, single-binary directory statistics CLI: every file under a tree grouped by format, with counts, sizes, and lines of code, as a colored terminal table or as JSON
  • fastware A batteries-included ASGI framework: msgspec JSON, a managed Granian server, dependency injection, SSE, WebSockets, auth, and a test client
  • go-toml-edit Zero-dep TOML editing library for Go with comment preservation
  • howmuchleft The fastest Claude Code statusline: context window, 5-hour, and weekly limit usage as three customizable gradient bars, rendering in about 6 ms
  • orxtra
  • pgdesign
  • predraw Declarative rendering pipeline: describe a scene in JSON and get SVG, PNG and WebP out, with light and dark style tokens, reusable components and text converted to path outlines
  • reposummary Turn a git repository's history into a Markdown journal: pick a time window or revision range and get a readable digest of what changed, optionally narrated by an LLM
  • rlsbl Release orchestration and project scaffolding CLI that bumps versions, validates a structured JSONL changelog, tags only the commit CI verified, and publishes to npm, PyPI, Go and more
  • safegit git wrapper CLI that gives each commit its own temporary index and retries ref updates on conflict, so concurrent agents share one repository
  • saferm Command-line replacement for rm that archives every deletion with a mandatory reason and the context it ran in, so deleted files can be listed, inspected and restored
  • strictcli
  • stricttest An always-on test-isolation floor: a pytest plugin and a Go env-hygiene module that make a test suite structurally unable to reach real credentials, the real HOME, the network, or the development repository.
  • wesktop A Python framework that turns an ASGI web app into a desktop application, serving it from a local Granian server and displaying it in a native OS window via pywebview
Search