There are more documentation site generators than anyone needs. If you're starting a new project and need a website, the paradox of choice is real.
This post compares five tools I've evaluated — and in WitDocs' case, built — for creating documentation sites, blogs, and product pages. The goal isn't to declare a winner. Each tool makes different tradeoffs, and the right choice depends on your team, your stack, and what you're building.
The Contenders
Astro — A JavaScript framework with an "islands" architecture that ships zero JS by default. Framework-agnostic: use React, Vue, Svelte, or none. Huge ecosystem. Starlight theme for docs.
DocFX — Microsoft's .NET documentation generator. The only tool here that generates API reference from C# source code via Roslyn. Powers (or powered) docs.microsoft.com. Now community-maintained under the .NET Foundation.
VitePress — Vue-powered SSG built on Vite. Spiritual successor to VuePress. Lightning-fast dev server, clean default theme. Powers the Vue.js, Vite, and Pinia documentation.
Docusaurus — Meta's React-based documentation framework. Versioning, i18n, plugin ecosystem, Algolia DocSearch integration. Used by thousands of open-source projects.
WitDocs — A Blazor WebAssembly framework for .NET developers. Three NuGet packages (OutWit.Web.Framework, Generator, Templates). Markdown content, auto-generated SEO, client-side search, OG images. Stay in C# from content to deployment. After the initial load, the site becomes a SPA with instant client-side navigation — similar to how VitePress works.
Setup and First Run
How quickly can you go from zero to a running site?
| Tool | Command | Runtime | Time to First Page |
|---|---|---|---|
| Astro | npm create astro@latest |
Node.js | ~2 min |
| DocFX | dotnet tool install -g docfx && docfx init |
.NET SDK | ~3 min |
| VitePress | npx vitepress init |
Node.js | ~1 min |
| Docusaurus | npx create-docusaurus@latest |
Node.js | ~2 min |
| WitDocs | dotnet new install OutWit.Web.Templates && dotnet new outwit-web |
.NET SDK | ~2 min |
All five are fast to scaffold. VitePress is the most minimal — you get a working site with almost no boilerplate. Astro and Docusaurus generate more files but also more structure. DocFX and WitDocs use the .NET SDK, so if you already have it installed (and if you're a .NET developer, you do), there's nothing extra to add.
The real difference is what you need installed. Astro, VitePress, and Docusaurus require Node.js, npm, and the node_modules ecosystem. DocFX and WitDocs require only the .NET SDK. If your CI/CD pipeline already has .NET and doesn't have Node.js, that's a meaningful difference.
WitDocs' template is also more configurable at scaffold time. The dotnet new outwit-web command accepts parameters for the hosting provider (--hostingProvider cloudflare), which content sections to include (--includeBlogSection, --includeDocsSection, --includeProjectsSection), accent color, social links, and more. You get a tailored starting point instead of deleting boilerplate after the fact.
Content Authoring
All five use markdown with YAML frontmatter. The differences are in what you can embed inside markdown.
Astro uses .astro components (HTML-like with a JS frontmatter fence) or MDX for embedding React/Vue/Svelte components in markdown. The content collections API provides typed schemas for frontmatter validation.
DocFX uses DocFX Flavored Markdown (DFM) — CommonMark plus extensions for cross-references (@uid), file inclusion, code snippets from source files, and tab groups. Tightly coupled with API documentation.
VitePress treats every markdown page as a Vue single-file component. You can use Vue syntax and components directly in markdown — {{ expressions }}, <script setup>, imported components. This is powerful if you know Vue, confusing if you don't.
Docusaurus uses MDX — markdown with JSX. Embed React components directly in your docs. Live code editors, interactive examples, tabbed content — all inline. The MDX ecosystem is large and well-documented.
WitDocs uses standard markdown with a double-bracket syntax for embedding Blazor components. Three built-in components (YouTube, Svg, FloatingImage) plus a registry for custom ones. Components have full access to DI and the .NET runtime. No JSX or Vue knowledge needed — just register a Blazor component and reference it.
| Capability | Astro | DocFX | VitePress | Docusaurus | WitDocs |
|---|---|---|---|---|---|
| Markdown | ✅ | ✅ | ✅ | ✅ (MDX) | ✅ |
| Frontmatter | ✅ typed schemas | ✅ | ✅ | ✅ | ✅ |
| Embed components | Astro/MDX | DFM extensions | Vue components | React/JSX | Blazor components |
| Code from source files | Plugin | ✅ built-in | Plugin | Plugin | ❌ |
| Cross-references | Plugin | ✅ @uid |
Manual | Plugin | Manual |
| Tab groups | Plugin | ✅ built-in | Plugin | ✅ built-in | ❌ |
DocFX stands out for code snippets pulled directly from source files — you reference a method by name and the docs update when the code changes. This is genuinely useful for API documentation and something no other tool here matches natively.
Content Types
Not every project is pure documentation. Some need a blog, a landing page, project showcases.
| Content Type | Astro | DocFX | VitePress | Docusaurus | WitDocs |
|---|---|---|---|---|---|
| Documentation | ✅ (Starlight) | ✅ | ✅ | ✅ | ✅ |
| Blog | ✅ | ❌ | Community theme | ✅ | ✅ |
| Project/product pages | ✅ | ❌ | ❌ | ❌ | ✅ |
| Landing pages | ✅ | Limited | Limited | Limited | ✅ |
| API reference from code | Plugin | ✅ Roslyn | ❌ | Plugin (TypeDoc) | ❌ |
| Custom sections | ✅ | ❌ | ❌ | Plugin | ✅ configurable |
Astro is the most flexible — it's a general-purpose web framework, not just a docs tool. You can build anything.
DocFX is the most specialized — it's built for .NET API documentation and does that job better than any other tool here. But it's not designed for blogs or landing pages.
VitePress and Docusaurus are documentation-first with blog support (Docusaurus built-in, VitePress via community themes).
WitDocs sits in the middle — it handles multiple content types (blog, docs, articles, projects, custom sections) with built-in routing and list pages, plus composable page components for landing pages. It's not as flexible as Astro for arbitrary page types, but it covers the common use cases for a product or library website.
API Documentation from Source Code
This deserves its own section because it's often the deciding factor for .NET library authors.
DocFX is the clear winner. It uses Roslyn to parse your .csproj or .sln, extracts XML documentation comments (///), and generates full API reference with namespaces, types, members, inheritance hierarchies, and cross-references. This is its core purpose.
WitDocs does not generate API docs from source code. You write documentation manually in markdown. For conceptual docs, tutorials, and blog posts this is fine. For comprehensive API reference of a large library, you'll want DocFX or a separate tool.
The hybrid approach: Several .NET projects use DocFX for API reference and a separate tool (Docusaurus, VitePress, or even WitDocs) for the "marketing" site — landing page, blog, guides. The API docs live at /api/ and the rest of the site is built with the more flexible tool.
Search
| Tool | Search Type | Setup Required |
|---|---|---|
| Astro (Starlight) | Pagefind (built-in) | None |
| DocFX | Lunr.js (built-in) | None |
| VitePress | MiniSearch (built-in) | None |
| Docusaurus | Algolia DocSearch (free for OSS) or community plugins | External service or plugin |
| WitDocs | Pre-built JSON index (built-in) | None |
All tools provide search. Docusaurus is the outlier — its recommended search is Algolia DocSearch, an external service that's free for open-source but requires an application and approval. As of v3.9, Docusaurus supports DocSearch v4 with an AskAI conversational assistant, which is impressive but still requires the external Algolia service. There are community plugins for local search, but they're third-party.
VitePress and Astro/Starlight use lightweight, no-config local search that works well. DocFX uses Lunr.js. WitDocs pre-generates a search index at build time and loads it on demand — no external dependencies.
SEO
| Feature | Astro | DocFX | VitePress | Docusaurus | WitDocs |
|---|---|---|---|---|---|
| Static HTML output | ✅ | ✅ | ✅ | ✅ | ✅ |
| Open Graph tags | Manual/plugin | Manual | Manual | ✅ auto | ✅ auto |
| Twitter Cards | Manual/plugin | Manual | Manual | ✅ auto | ✅ auto |
| JSON-LD structured data | Manual | ❌ | ❌ | Plugin | ✅ auto |
| Sitemap | Plugin | ✅ | ✅ | ✅ | ✅ auto |
| robots.txt | Manual | ✅ | Manual | Plugin | ✅ auto |
| Auto OG images | Plugin | ❌ | ❌ | ❌ | ✅ Playwright |
| Canonical URLs | Manual | ✅ | ✅ | ✅ | ✅ auto |
| Hosting-specific config | Adapter-based | ❌ | Manual | Manual | ✅ auto per provider |
WitDocs generates everything SEO-related automatically — Open Graph, Twitter Cards, JSON-LD, sitemap, robots.txt, canonical URLs, and even OG images via Playwright. No plugins, no configuration. The generator also creates hosting-specific files (_headers for Cloudflare, _redirects for Netlify, vercel.json for Vercel, .nojekyll for GitHub Pages) based on a single MSBuild property.
Docusaurus handles meta tags and sitemaps well. Astro requires plugins or manual setup for most SEO features — but the plugins exist and work. DocFX and VitePress leave most SEO work to you.
Theming and Design
| Tool | Theming Approach | Dark Mode | Custom CSS |
|---|---|---|---|
| Astro | Full control (or Starlight theme) | ✅ | Full Astro/CSS |
| DocFX | Template system | ✅ | Template overrides |
| VitePress | CSS variables + Vue components | ✅ | CSS variables |
| Docusaurus | CSS modules + swizzling | ✅ | CSS modules |
| WitDocs | CSS variables + Blazor components | ✅ | CSS variables |
Astro gives you the most design freedom — it's essentially a web framework, so you can build any design you want. The Starlight theme provides a polished default for documentation.
VitePress and WitDocs both use CSS variables for theming, which is the simplest approach — define your colors, and the entire site adapts. VitePress has a beautiful default theme that powers Vue.js docs.
Docusaurus uses CSS modules with a "swizzling" system to override components. Powerful but the learning curve is steeper.
DocFX's template system is the most opaque — customization requires understanding Mustache templates and the build pipeline.
Internationalization (i18n)
| Tool | i18n Support |
|---|---|
| Astro | ✅ built-in routing + content collections |
| DocFX | ❌ not built-in |
| VitePress | ✅ built-in |
| Docusaurus | ✅ built-in, most mature |
| WitDocs | ❌ not built-in |
Docusaurus has the most mature i18n story — locale-specific URLs, hreflang tags, translation extraction CLI, per-locale config overrides. If you need multi-language documentation, Docusaurus is the strongest choice.
Astro and VitePress both support i18n well. DocFX and WitDocs don't provide built-in i18n — you'd need to manage translations manually or build the routing yourself.
Documentation Versioning
| Tool | Versioning |
|---|---|
| Astro | Manual or Starlight plugin |
| DocFX | Manual |
| VitePress | Manual (version dropdown with separate builds) |
| Docusaurus | ✅ built-in, first-class |
| WitDocs | ❌ not built-in |
Docusaurus is the only tool with built-in documentation versioning. You run a command, it snapshots the current docs, and users can switch between versions in the sidebar. This matters if you maintain a library with multiple supported releases.
The other tools either don't support versioning or require manual workarounds (separate builds per version, custom routing).
Extensibility
| Tool | Extension Model | Component Language |
|---|---|---|
| Astro | Integrations + any JS framework | Astro/React/Vue/Svelte |
| DocFX | Templates + plugins | Mustache/JS |
| VitePress | Vite plugins + Vue components | Vue |
| Docusaurus | Plugins + themes + swizzling | React |
| WitDocs | Blazor components + RenderFragment slots | C# / Razor |
The JavaScript tools (Astro, VitePress, Docusaurus) have massive ecosystems. Need a diagram renderer? There's a plugin. Need a comment system? Plugin. Need a custom search? Plugin.
WitDocs has no plugin ecosystem. What it does have is standard Blazor extensibility — if you can build it as a Blazor component, you can use it. For .NET developers, this means your extension code is in C#, your IDE understands it, and your existing skills transfer directly.
DocFX's extensibility is limited to template customization and build plugins. It's sufficient for API documentation but doesn't compare to the flexibility of the others.
Build and Runtime Performance
| Tool | Build Speed | Dev Server | Initial Load | Post-load Navigation |
|---|---|---|---|---|
| Astro | Fast (Vite-based) | Instant HMR | Fast (static HTML, minimal JS) | View Transitions (opt-in SPA) |
| DocFX | Moderate | docfx serve (no HMR) |
Fast (static HTML) | Full page reload |
| VitePress | Very fast (Vite-based) | Instant HMR (<100ms) | Fast (static HTML) | SPA (client-side routing) |
| Docusaurus | Moderate (webpack/Rspack) | HMR | Fast (static HTML + React hydration) | SPA (client-side routing) |
| WitDocs | Fast (.NET build) | Blazor hot reload | Slower (WASM runtime ~2–3 MB) | SPA (client-side routing) |
VitePress and Astro, both built on Vite, have the fastest development experience — changes appear in under 100ms. Docusaurus has improved with Rspack but is still heavier. DocFX requires a rebuild to see changes.
WitDocs in development mode loads content directly without any build step. You edit markdown, refresh the browser, and see changes. On Release builds, the generator runs automatically — it's integrated into MSBuild, so dotnet publish does everything.
The Blazor WASM tradeoff. This is the elephant in the room. Blazor WebAssembly requires downloading the .NET runtime on first visit — roughly 2–3 MB of compressed WASM files. Subsequent visits are cached, and once loaded, navigation is instant (full SPA). But that first load is meaningfully slower than a pure static HTML site. The pre-rendered static HTML pages (generated by the build) ensure search engines and social crawlers see full content immediately. Real users see content fast too — the static HTML loads first, then Blazor hydrates in the background. But on a slow connection, there's a noticeable delay before interactivity kicks in. This is a real tradeoff. If your audience is on fast connections (developers reading docs, typically), it's barely noticeable. If you're building a marketing site for a general audience on mobile, Astro's zero-JS approach is objectively better for initial load.
Deployment
All five produce static files that deploy to any CDN. The differences are in how much help the tool provides.
| Tool | Deploy Output | Hosting Configs |
|---|---|---|
| Astro | dist/ |
Adapter per provider |
| DocFX | _site/ |
None |
| VitePress | .vitepress/dist/ |
Manual |
| Docusaurus | build/ |
Manual |
| WitDocs | wwwroot/ |
Auto-generated per provider |
WitDocs generates hosting-specific configuration files automatically based on a single MSBuild property (<OutWitHostingProvider>). Set it to cloudflare, netlify, vercel, or github, and the generator creates the right _headers, _redirects, _routes.json, or .nojekyll files. No manual configuration.
Astro has a similar concept with adapters, though they're more focused on SSR hosting than static file optimization.
Community and Ecosystem
This is where honesty matters.
| Tool | GitHub Stars (approx.) | Downloads | Ecosystem |
|---|---|---|---|
| Astro | 50k+ | Millions/month (npm) | Massive (themes, integrations, plugins) |
| DocFX | 4k+ | Moderate (NuGet) | Small (.NET Foundation community) |
| VitePress | 14k+ | Growing (npm) | Growing (Vue ecosystem) |
| Docusaurus | 58k+ | Millions/month (npm) | Large (plugins, themes, presets) |
| WitDocs | New | Early (NuGet) | Minimal (just launched) |
WitDocs is a new project. It doesn't have a plugin ecosystem, a theme marketplace, or thousands of Stack Overflow answers. If you hit a problem, you're reading source code, not searching forums.
Docusaurus and Astro have the largest communities. VitePress benefits from the Vue ecosystem. DocFX has a dedicated but smaller community since Microsoft moved docs.microsoft.com to a different system.
Real-World Scenarios
Abstract feature tables are useful, but concrete scenarios are better. Here's how the five tools map to specific project types.
"I'm documenting a .NET library with 200+ public types." Use DocFX. It's the only tool that generates API reference from your C# code automatically. Pair it with WitDocs or Docusaurus for the marketing site if you need one.
"I need docs for a React component library with versioned releases." Use Docusaurus. Built-in versioning, MDX for live component demos, and the React ecosystem alignment make it the natural fit.
"I'm building a product site with docs, blog, and landing page — and my team writes C#." Use WitDocs. Multiple content types, auto-generated SEO, composable Blazor pages, no JavaScript toolchain. The trade-off is a newer ecosystem with fewer community resources.
"I want the fastest, simplest docs site with a great default look." Use VitePress. Minimal config, instant dev server, beautiful default theme. If you already know Vue, even better — but it's not required.
"I need a content-heavy marketing site with docs as one section." Use Astro. It's a general-purpose web framework, not just a docs tool. The Starlight theme handles the docs section, and you have full freedom for everything else.
"I'm an open-source maintainer and need docs in multiple languages." Use Docusaurus. Its i18n system is the most mature — locale-specific URLs, hreflang, translation extraction CLI, per-locale overrides. VitePress and Astro also support i18n, but Docusaurus handles the most edge cases.
"My CI/CD has the .NET SDK but not Node.js, and I want a blog." Use WitDocs. dotnet build -c Release generates everything. No npm, no node_modules, no webpack.
When to Use What
Choose Astro if you want maximum flexibility, don't mind JavaScript, and need to build more than just docs — marketing sites, blogs, e-commerce. The Starlight theme is excellent for documentation specifically.
Choose DocFX if you need API reference documentation generated from C# source code. Nothing else here does this. If your primary goal is to document a .NET library's public API with type hierarchies, parameter descriptions, and cross-references, DocFX is purpose-built for it.
Choose VitePress if you want the lightest, fastest docs site with a clean default theme. Ideal for Vue ecosystem projects or anyone who values simplicity. The Vue-in-markdown authoring model is elegant if you already know Vue.
Choose Docusaurus if you need versioning, i18n, or a battle-tested framework with a huge plugin ecosystem. It's the safest choice for large open-source projects with multiple contributors and supported versions.
Choose WitDocs if you're a .NET developer who wants to stay in the .NET ecosystem. You don't want to install Node.js, learn JSX, or maintain a JavaScript toolchain alongside your C# project. You need a product website — not just docs, but a blog, landing page, and project showcases — with SEO handled automatically. You value composition over configuration and are comfortable extending with Blazor components rather than npm plugins.
Feature Matrix
| Feature | Astro | DocFX | VitePress | Docusaurus | WitDocs |
|---|---|---|---|---|---|
| Language | JavaScript | .NET | JavaScript | JavaScript | .NET / C# |
| Content | Markdown/MDX | Markdown (DFM) | Markdown + Vue | MDX | Markdown |
| Embeddable components | Any JS framework | DFM extensions | Vue | React | Blazor |
| API docs from code | Plugin | ✅ Roslyn | ❌ | Plugin | ❌ |
| Blog | ✅ | ❌ | Community | ✅ | ✅ |
| Search | Built-in (Pagefind) | Built-in (Lunr) | Built-in (MiniSearch) | Algolia / plugin | Built-in (pre-built index) |
| SEO auto-generation | Plugin-based | Partial | Partial | Mostly auto | Fully auto |
| OG image generation | Plugin | ❌ | ❌ | ❌ | ✅ built-in |
| Dark mode | ✅ | ✅ | ✅ | ✅ | ✅ |
| i18n | ✅ | ❌ | ✅ | ✅ (best) | ❌ |
| Doc versioning | Manual | Manual | Manual | ✅ built-in | ❌ |
| RSS feed | Plugin | ❌ | Plugin | ✅ | ✅ built-in |
| SPA navigation | Opt-in | ❌ | ✅ | ✅ | ✅ |
| Initial load weight | Minimal JS | Static HTML | Static + Vue | Static + React | Static + WASM runtime |
| Hosting configs | Adapters | ❌ | Manual | Manual | Auto-generated |
| Project templates | create astro |
docfx init |
vitepress init |
create-docusaurus |
dotnet new outwit-web |
| Runtime needed | Node.js | .NET SDK | Node.js | Node.js | .NET SDK |
| Ecosystem size | Massive | Small | Growing | Large | Minimal |
Final Thoughts
There's no universally best tool. Docusaurus and Astro are the most capable in absolute terms — they have the most features, the largest ecosystems, and the most battle-testing. If you're choosing purely on feature count, they win.
But feature count isn't everything. If your team works in .NET and your CI/CD pipeline already has the .NET SDK, introducing Node.js and npm just for a docs site creates friction. DocFX and WitDocs eliminate that friction — but for different reasons.
DocFX is the right choice when API reference from source code is the primary goal. It's a specialized tool that does one thing exceptionally well.
WitDocs occupies a different niche. It's for .NET developers who need more than API docs — a product website with a blog, documentation section, project showcases, and a landing page — but don't want to leave the C# ecosystem to build it. You write content in markdown, customize the look with CSS variables and a theme.css file, extend functionality with standard Blazor components, and deploy with dotnet publish. The generator handles SEO automatically: Open Graph, Twitter Cards, JSON-LD, sitemap, RSS, OG images, hosting configs — all without plugins or manual setup. For a solo developer or a small .NET team maintaining an open-source library, that's a significant reduction in moving parts. No package.json, no node_modules, no framework-specific templating language to learn. The tradeoff is real: Blazor WASM adds ~2–3 MB to the initial load, the ecosystem is young, and features like i18n and versioning aren't built in yet. But if your audience is developers (who typically have fast connections and modern browsers), and your priority is staying productive in the stack you already know — WitDocs gives you a complete website with fewer dependencies than any JavaScript alternative.
The best documentation tool is the one your team will actually maintain. A perfect Docusaurus site that nobody updates is worse than a simple VitePress site that stays current. Pick the tool that fits your stack, your skills, and your project's needs — then focus on the content.