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.