17 min read

Choosing a Documentation Platform

Table of Contents

Purpose

Several projects I am running will need their own dedicated documentation sites. The first is the Digital Solution Lifecycle Model β€” a structured framework for designing and operating digital solutions. The second is its companion tooling. Others will follow.

Rather than make this decision separately for each project, I wanted to establish a platform approach I could reuse: fast, accessible, versioned, and maintainable over the long term. The choice of platform is more than a hosting decision. It determines how content is written, how readers navigate it, whether historical versions stay accessible, and how much time I spend maintaining infrastructure rather than writing.

Requirements

One constraint applies before any of the others: I am looking for a ready-made platform, not a framework to build upon. The time should go into writing documentation, not engineering the site it runs on.

Area Requirements
Hosting, performance, and authoring Deployable as a fully static site on Cloudflare Pages Β· Fast page loads and reasonable build times Β· Strong Markdown support with a good local authoring experience Β· Responsive design and accessible output
Documentation and versioning Documentation and blog support within the same site Β· Proper content versioning with permanent historical URLs Β· Unversioned URLs that always point to the latest version Β· Clear warnings when viewing an older version Β· Good navigation for structured documentation
Search, content features, and SEO Client-side fuzzy search without an external search service Β· RSS support for blog content Β· Mermaid and PlantUML support Β· Strong SEO support including canonical URLs and sitemaps Β· Automated checks for broken links and invalid content
Ecosystem and long-term viability Active maintenance and regular releases Β· A healthy and active community Β· A stable ecosystem of plugins and integrations Β· Low dependency risk and a clear upgrade path Β· Good documentation and support resources Β· Content portability without excessive framework lock-in

The Contenders

Before comparing features, I mapped the landscape by the framework or language each option is built on. That grouping shapes what comes for free, what the surrounding ecosystem looks like, and how well each option fits with tools I already work with. This is not an exhaustive survey β€” platforms like Jekyll, Eleventy, and Hexo are not covered here. I am familiar with them but did not find them offering meaningful advantages over the options below for my specific requirements.

React

React is the most widely adopted JavaScript framework and the foundation for several mature documentation platforms.

Solution Type Summary
Docusaurus Ready-made docs platform The most complete option in the React space. Built by Meta, it would give me versioning, blogging, Markdown and MDX, navigation, and formal version management out of the box β€” everything I need from day one. The React client-side footprint is heavier than I would prefer, and I would need to add a plugin for local search.
Nextra Docs theme for Next.js A documentation theme for Next.js with clean defaults, MDX support, and built-in search. Less opinionated than Docusaurus, but I would need to implement versioning and blogging myself. Relies on Next.js static export for Cloudflare Pages.

Vue

Vue’s documentation ecosystem is anchored by VitePress, which is the official documentation tool for the Vue framework itself and many other major open-source projects.

Solution Type Summary
VitePress Ready-made docs platform A fast, Markdown-first documentation generator built on Vue and Vite, with clean defaults and built-in local search. Blogging and documentation versioning are not first-class features β€” gaps I would need to fill.
Nuxt Content Composable content layer for Nuxt A content module for Nuxt that enables Markdown-driven pages. Navigation, versioning, and search are not provided β€” I would need to assemble them from separate components.

Astro

Astro’s documentation ecosystem is anchored by Starlight, which is built specifically on top of the framework. I already work with Astro, which lowers the starting cost considerably.

Solution Type Summary
Starlight Ready-made docs platform The documentation-first solution built on Astro, the framework I already work with. It gives me navigation, built-in local search, accessible defaults, and strong performance out of the box. Blogging and versioning both require community plugins.

Svelte

The Svelte documentation ecosystem is thinner than the JavaScript-first alternatives. Kit-docs is the most established ready-made option, positioned as a VitePress equivalent for Svelte.

Solution Type Summary
Kit-docs Documentation integration for SvelteKit A documentation integration for SvelteKit, described as a VitePress alternative for Svelte. Provides Markdown processing, navigation, and search. Less actively maintained than the JavaScript-first alternatives, with a notably smaller community.

Hugo

Hugo is a Go-based static site generator rather than a JavaScript framework. It is one of the fastest build tools available and has a mature ecosystem of documentation themes.

Solution Type Summary
Doks Documentation theme for Hugo A modern documentation theme for Hugo with navigation, Pagefind-based search, and structured content support. Maintained by HugoMods.
Hugo Book Documentation theme for Hugo A clean, minimal documentation theme inspired by GitBook. Well-suited to structured technical documentation with straightforward navigation. Smaller community and less active development than Doks.

Python

MkDocs is a Python-based static site generator with a large ecosystem of documentation-focused plugins. Material for MkDocs is its most widely used theme and has grown into a comprehensive documentation platform in its own right.

Solution Type Summary
Material for MkDocs Ready-made docs platform A comprehensive documentation platform built on MkDocs, with excellent navigation, Markdown extensions, search, and a broad plugin ecosystem. Versioning is available through Mike. In November 2025, the author announced Zensical as its successor and moved Material for MkDocs into maintenance mode β€” no new features, critical fixes only.

Antora

Antora is a dedicated documentation site generator built in Node.js, designed from the ground up for versioned, multi-repository documentation. It is the most opinionated option in this comparison β€” its native content format is AsciiDoc rather than Markdown, which means adopting a different authoring toolchain entirely.

Solution Type Summary
Antora Ready-made docs platform A purpose-built platform for versioned, multi-component documentation stored across one or more Git repositories. AsciiDoc is the native content format, which would mean committing to a different authoring toolchain than I currently use. Versioning and navigation are core features. Blog support is not part of its design β€” a hard gap for me.

Working Through the Contenders

With the landscape mapped, I scored each contender against the four requirement areas. The goal was not to pick a winner but to make the trade-offs visible before the analysis begins.

Legend: βœ… Strong built-in support or straightforward configuration Β· ⚠️ Requires an extension, theme, or custom implementation Β· ❌ Unsupported or impractical

Hosting, Performance, and Authoring

Option Static on Cloudflare Pages Fast loads and builds Markdown and local authoring Responsive and accessible Low dependency risk
Docusaurus βœ… ⚠️ βœ… βœ… ⚠️
Nextra βœ… ⚠️ βœ… βœ… ⚠️
VitePress βœ… βœ… βœ… βœ… βœ…
Nuxt Content βœ… βœ… βœ… ⚠️ ⚠️
Starlight βœ… βœ… βœ… βœ… ⚠️
Kit-docs βœ… βœ… βœ… βœ… βœ…
Doks βœ… βœ… βœ… βœ… βœ…
Hugo Book βœ… βœ… βœ… βœ… βœ…
Material for MkDocs βœ… βœ… βœ… βœ… ⚠️
Antora βœ… βœ… ⚠️ βœ… βœ…

Documentation and Versioning

Option Docs and blog together Proper versioning Latest at unversioned URL Old-version warning Structured docs navigation
Docusaurus βœ… βœ… βœ… βœ… βœ…
Nextra ⚠️ ⚠️ ⚠️ ⚠️ βœ…
VitePress ⚠️ ⚠️ ⚠️ ⚠️ βœ…
Nuxt Content βœ… ⚠️ ⚠️ ⚠️ ⚠️
Starlight ⚠️ ⚠️ ⚠️ ⚠️ βœ…
Kit-docs ⚠️ ⚠️ ⚠️ ⚠️ βœ…
Doks ⚠️ ⚠️ ⚠️ ⚠️ βœ…
Hugo Book ⚠️ ⚠️ ⚠️ ⚠️ βœ…
Material for MkDocs ⚠️ ⚠️ ⚠️ ⚠️ βœ…
Antora ❌ βœ… βœ… βœ… βœ…

Search, Content Features, and SEO

Option Local fuzzy search RSS Mermaid and PlantUML SEO and sitemaps Automated validation
Docusaurus ⚠️ βœ… ⚠️ βœ… βœ…
Nextra βœ… ⚠️ ⚠️ βœ… ⚠️
VitePress βœ… ⚠️ ⚠️ βœ… ⚠️
Nuxt Content ⚠️ ⚠️ ⚠️ ⚠️ ⚠️
Starlight βœ… ⚠️ ⚠️ βœ… ⚠️
Kit-docs βœ… ⚠️ ⚠️ βœ… ⚠️
Doks βœ… βœ… ⚠️ βœ… ⚠️
Hugo Book ⚠️ βœ… ⚠️ βœ… ⚠️
Material for MkDocs βœ… ⚠️ ⚠️ ⚠️ ⚠️
Antora ⚠️ ⚠️ ⚠️ ⚠️ βœ…

Ecosystem and Long-Term Viability

Option Active maintenance Healthy community Stable ecosystem Good documentation Content portability
Docusaurus βœ… βœ… βœ… βœ… ⚠️
Nextra βœ… βœ… ⚠️ βœ… ⚠️
VitePress βœ… βœ… ⚠️ βœ… ⚠️
Nuxt Content βœ… βœ… βœ… βœ… ⚠️
Starlight βœ… βœ… βœ… βœ… βœ…
Kit-docs ⚠️ ⚠️ ⚠️ ⚠️ βœ…
Doks βœ… ⚠️ βœ… βœ… βœ…
Hugo Book ⚠️ ⚠️ βœ… βœ… βœ…
Material for MkDocs ❌ βœ… βœ… βœ… ⚠️
Antora βœ… ⚠️ βœ… βœ… βœ…

First cut β€” options that do not stand on their own

Running the requirements across the four tables quickly separated the field. Some gaps are not missing features that can be added β€” they are structural mismatches with what I need.

Nuxt Content is a content layer for Nuxt, not a documentation platform. It scores ⚠️ on nearly every documentation-specific criterion. I would need to assemble navigation, versioning, search, and RSS independently β€” more work than a custom build, without the payoff.

Nextra sits in an awkward middle position. It is less opinionated than Docusaurus but does not bring built-in versioning, blogging, or a strong ecosystem. It would add Next.js overhead without giving me what Docusaurus gives me.

Kit-docs is the main ready-made option in the Svelte ecosystem. Its ecosystem scores tell the story: ⚠️ on maintenance, community, and stability across the board. For a long-running documentation platform, ecosystem health is not a nice-to-have β€” it determines whether the platform is still viable in two years. Kit-docs does not clear that bar.

Material for MkDocs is a capable platform, but it entered maintenance mode in November 2025 β€” no new features, critical fixes only for at least twelve months β€” as its author shifted focus to a successor project called Zensical. Long-term viability is now an open question, and the Python dependency chain would add complexity I would rather avoid in any case.

Hugo Book is the weaker of the two ready-made Hugo options. It has a smaller community and less active development than Doks, without offering anything that compensates for those gaps. It does not survive this stage.

Doks is technically strong and its Hugo foundation produces extremely fast builds. However, the community is smaller than the JavaScript-based alternatives, there is no ready-made versioning solution for Hugo documentation sites, and I would need to build or maintain that myself.

Antora has arguably the strongest built-in versioning of any option on the list, and its multi-repository content aggregation is genuinely powerful for large documentation projects. However, it is a documentation-only platform β€” I cannot add a blog to it in any practical way. One of my hard requirements is to host both documentation and editorial content on the same site, and that eliminates Antora here regardless of how strong its versioning is.

That leaves three options: Docusaurus, VitePress, and Starlight.

Second cut β€” versioning as the deciding factor

Documentation versioning with permanent historical URLs and automatic old-version warnings is my hardest requirement. This is where the field narrows sharply.

Of the remaining options, only Docusaurus provides formal versioning out of the box. For VitePress and Starlight I would need a plugin or a custom content structure to achieve the same.

VitePress is excellent as a lightweight documentation site but was designed for single-version technical documentation. Blogging is not a first-class feature either, which conflicts with my requirement to host documentation and editorial content on the same site. The table scores for VitePress and Starlight look similar on these two points β€” both show ⚠️ for versioning and blogging β€” but what ⚠️ means differs. For Starlight, both gaps are covered by actively maintained plugins from the same author (starlight-versions and starlight-blog). For VitePress, a blog requires a fully custom implementation and versioning is an unsupported custom content structure with no equivalent plugin. The toolchain also differs: Starlight runs on Astro, which I already work with; VitePress is Vue.

The finalists

Two options survived both cuts. They approach the core trade-off differently: one with versioning built into the platform itself, one that asks me to rely on a community plugin for the hardest requirement but offers everything else I need without ceremony.

Docusaurus makes sense if I want versioning to be a core platform feature backed by a major organisation β€” handled entirely out of the box, with no community plugin dependencies for the requirement that matters most. The trade-offs are a larger React client-side footprint, local search requiring a plugin, and tighter coupling to MDX conventions.

Starlight makes sense if the priority is getting productive quickly on familiar ground. The toolchain is one I already work with, the defaults cover the most important features, and versioning β€” while not built-in β€” is an achievable extension through an actively maintained community plugin.

With two options left, the decision comes down to specifics.

Aspect Docusaurus Starlight
Versioning βœ… Built-in, core feature since v1 ⚠️ Community plugin (starlight-versions)
Local search ⚠️ Plugin required βœ… Built-in (Pagefind)
Blog βœ… Built-in ⚠️ Plugin required (starlight-blog)
RSS βœ… Built-in ⚠️ Plugin required (@astrojs/rss)
Mermaid ⚠️ Plugin required (theme-mermaid) ⚠️ Plugin required (rehype-mermaid)
PlantUML ⚠️ Plugin required ⚠️ Plugin required
Sitemap and SEO βœ… Built-in βœ… Built-in
Content validation βœ… Built-in ⚠️ Internal links only
Client-side JS footprint ⚠️ React hydration βœ… Minimal (Astro default)
Content portability ⚠️ MDX and React conventions βœ… Standard Markdown
Familiar toolchain ❌ New React ecosystem βœ… Astro already in use
Extra packages needed 3 5–6
Community backing βœ… Meta ⚠️ Astro/community

Docusaurus’s extra plugin count is lower but that does not reflect the full picture: its three extra packages cover search and diagrams β€” well-understood, stable add-ons. Starlight’s five to six extra plugins include starlight-versions, which covers the single most important requirement as a community dependency rather than a core platform feature. That is the key trade-off.

Verdict

Starlight. The toolchain is already familiar, so there is no new ecosystem to learn before the first page goes live. The defaults are strong: search, navigation, SEO, and broken link checking are all built in. The two community dependencies on the critical path are starlight-versions and starlight-blog β€” both actively maintained and well-documented by the same author. Less to configure, less to maintain, more time to write.

Docusaurus was the runner-up, and not an easy one to set aside. Built-in versioning with no community plugin on the critical path, backed by Meta, battle-tested across thousands of projects. But the trade-offs β€” a heavier React footprint, a new ecosystem to learn, tighter coupling to MDX conventions β€” outweigh the single advantage of platform-level versioning certainty. The goal is to publish and grow these projects, not to maintain the platforms they run on.


The Plan

Day one

Core: @astrojs/starlight on a new Astro project

Each documentation site β€” the Model, the tooling, future projects β€” will be a separate Cloudflare Pages project, but they all share the same toolchain, conventions, and deployment patterns.

Built into Starlight β€” no extra installation:

  • Sidebar navigation, breadcrumbs, and previous/next page links
  • Local search powered by Pagefind β€” fully static, no external service, generated at build time
  • Accessible defaults, dark mode, and responsive layout
  • SEO, canonical URLs, and OpenGraph metadata
  • Broken link detection at build time

Additional packages:

  • Mermaid and PlantUML diagrams β€” rendered externally and embedded as static images; no build-time browser or server dependency needed
  • @astrojs/sitemap β€” XML sitemap; official Astro integration

Deployment: New Cloudflare Pages project. Most _headers and _redirects patterns used on this site carry over, with some trimming for things specific to this site.

Later

Blog and versioning are requirements, but not day-one requirements. The first version of any new documentation site does not need them to be useful β€” it needs to be written, structured, and published. Both can be added incrementally once the content is stable enough to warrant them.

Blog β€” add when editorial content is ready:

  • starlight-blog β€” blog section with RSS feed integrated into the Starlight layout; community plugin maintained by HiDeoo
  • @astrojs/rss β€” RSS feed generation; official Astro integration

Versioning β€” add when the project has its first stable release:

  • starlight-versions β€” documentation versioning with a version selector, old-version banner, and permanent versioned URLs; community plugin maintained by the same author

Deferring the versioning plugin has a practical benefit: by the time versioning becomes necessary, the plugin will have had more time to mature and the content structure of the site will be stable enough to introduce it cleanly.


πŸ“ž

Building something similar and landed somewhere different? Get in touch β€” always interested to hear how others have approached it.

πŸ“‘

I’ll be writing more as the Digital Solution Lifecycle Model and its tooling take shape.
Follow my RSS feed to follow along.