Framework Comparison

A technical comparison of Ardo with other popular documentation frameworks.

Overview

ArdoVitePressDocusaurusStarlight
UI FrameworkReact 19Vue 3React 18Astro
Build ToolVite + RolldownVite + RollupWebpackVite + Rollup
RouterReact Router 7Vue RouterReact RouterAstro Router
RenderingSSG + HydrationSSG + SPASSG + SPAIslands
Backed BySebastian SoftwareVue TeamMetaAstro

Technology Stack

Build System

ArdoVitePressDocusaurusStarlight
Vite✅ v8 (Rolldown)✅ v5❌ Webpack✅ v5
ES Modules✅ Native✅ Native⚠️ Transpiled✅ Native
Tree Shaking✅ Rolldown✅ Rollup✅ Terser✅ Rollup
Code Splitting✅ Auto✅ Auto✅ Auto✅ Auto

Markdown Processing

ArdoVitePressDocusaurusStarlight
Parserunified/remarkmarkdown-itMDXunified/remark
Syntax HighlightingShiki (build-time)Shiki (build-time)Prism (runtime)Shiki (build-time)
Frontmattergray-mattergray-mattergray-mattergray-matter
Custom Containers:::tip:::tip✅ Admonitions:::note
Components in MD✅ React/MDX✅ Vue SFC✅ MDX✅ MDX

Routing

ArdoVitePressDocusaurusStarlight
Type-safe Routes✅ Full
File-based Routing
Catch-all Routes$.tsx[...path].md[...slug].astro
Route Preloading
SPA Navigation⚠️ Partial

Feature Details

Search Implementation

ArdoVitePressDocusaurusStarlight
EngineMiniSearchMiniSearch / AlgoliaAlgolia / LocalPagefind
Index GenerationBuild-timeBuild-timeBuild-timeBuild-time
Index LocationClient bundleClient bundleExternal / BundleStatic files
Offline Support⚠️ Depends

Theming & Customization

ArdoVitePressDocusaurusStarlight
CSS SystemCSS VariablesCSS VariablesInfima (CSS-in-JS)CSS Variables
Dark ModeCSS Variables + ClassCSS Variables + ClassData attributeCSS Variables + Class
Theme OverrideComponent replacementComponent slotsSwizzlingComponent override
Tailwind✅ Direct use✅ Direct use⚠️ Complex setup✅ Direct use

Component Architecture

ArdoVitePressDocusaurusStarlight
Layout<Layout><Layout>@theme/Layout<StarlightPage>
Sidebar<Sidebar><VPSidebar>@theme/Sidebar<Sidebar>
TOC<TOC><VPDocOutline>@theme/TOCItems<TableOfContents>
Code Block<CodeBlock>Custom directive@theme/CodeBlock<Code>

API Documentation

ArdoVitePressDocusaurusStarlight
TypeDoc Integration✅ Built-in❌ Manual✅ Plugin❌ Manual
Auto-generation✅ From source
Type Linking

Internationalization

ArdoVitePressDocusaurusStarlight
i18n Support⚠️ Planned
RTL Support⚠️ Planned
Locale Routing⚠️ Planned/de//de//de/

Versioning

ArdoVitePressDocusaurusStarlight
Doc Versioning✅ Built-in⚠️ Manual
Version Dropdown
Version Archiving

Configuration Comparison

Ardo

// vite.config.ts
import { defineConfig } from "vite"
import { ardo } from "ardo/vite"

export default defineConfig({
  plugins: [
    ardo({
      title: "My Docs",
      description: "Documentation",
    }),
  ],
})

Philosophy: Minimal configuration, sensible defaults. Config passed directly to Vite plugin.

VitePress

// .vitepress/config.ts
import { defineConfig } from 'vitepress'

export default defineConfig({
  title: 'My Docs',
  description: 'Documentation',
  themeConfig: {
    sidebar: [...],
    nav: [...],
  },
})

Docusaurus

// docusaurus.config.js
module.exports = {
  title: 'My Docs',
  tagline: 'Documentation',
  url: 'https://example.com',
  baseUrl: '/',
  presets: [
    ['@docusaurus/preset-classic', {
      docs: { sidebarPath: require.resolve('./sidebars.js') },
    }],
  ],
  themeConfig: {
    navbar: { items: [...] },
  },
}

Starlight

// astro.config.mjs
import { defineConfig } from 'astro/config'
import starlight from '@astrojs/starlight'

export default defineConfig({
  integrations: [
    starlight({
      title: 'My Docs',
      sidebar: [...],
    }),
  ],
})

Runtime Characteristics

ArdoVitePressDocusaurusStarlight
HydrationFull ReactFull VueFull ReactPartial (Islands)
JS RequiredYesYesYesMinimal
Client StateReact RouterVue RouterReact RouterMinimal
Bundle Impact~50-80KB~50-70KB~150-200KB~10-30KB

Ecosystem

ArdoVitePressDocusaurusStarlight
npm Packageardovitepress@docusaurus/core@astrojs/starlight
GitHubSebastian-Softwarevuejs/vitepressfacebook/docusauruswithastro/starlight
LicenseMITMITMITMIT