Framework Comparison
A technical comparison of Ardo with other popular documentation frameworks.
Overview
|
| UI Framework | React 19 | Vue 3 | React 18 | Astro |
| Build Tool | Vite + Rolldown | Vite + Rollup | Webpack | Vite + Rollup |
| Router | React Router 7 | Vue Router | React Router | Astro Router |
| Rendering | SSG + Hydration | SSG + SPA | SSG + SPA | Islands |
| Backed By | Sebastian Software | Vue Team | Meta | Astro |
Technology Stack
Build System
|
| 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
|
| Parser | unified/remark | markdown-it | MDX | unified/remark |
| Syntax Highlighting | Shiki (build-time) | Shiki (build-time) | Prism (runtime) | Shiki (build-time) |
| Frontmatter | gray-matter | gray-matter | gray-matter | gray-matter |
| Custom Containers | ✅ :::tip | ✅ :::tip | ✅ Admonitions | ✅ :::note |
| Components in MD | ✅ React/MDX | ✅ Vue SFC | ✅ MDX | ✅ MDX |
Routing
|
| Type-safe Routes | ✅ Full | ❌ | ❌ | ❌ |
| File-based Routing | ✅ | ✅ | ✅ | ✅ |
| Catch-all Routes | ✅ $.tsx | ✅ [...path].md | ✅ | ✅ [...slug].astro |
| Route Preloading | ✅ | ✅ | ✅ | ❌ |
| SPA Navigation | ✅ | ✅ | ✅ | ⚠️ Partial |
Feature Details
Search Implementation
|
| Engine | MiniSearch | MiniSearch / Algolia | Algolia / Local | Pagefind |
| Index Generation | Build-time | Build-time | Build-time | Build-time |
| Index Location | Client bundle | Client bundle | External / Bundle | Static files |
| Offline Support | ✅ | ✅ | ⚠️ Depends | ✅ |
Theming & Customization
|
| CSS System | CSS Variables | CSS Variables | Infima (CSS-in-JS) | CSS Variables |
| Dark Mode | CSS Variables + Class | CSS Variables + Class | Data attribute | CSS Variables + Class |
| Theme Override | Component replacement | Component slots | Swizzling | Component override |
| Tailwind | ✅ Direct use | ✅ Direct use | ⚠️ Complex setup | ✅ Direct use |
Component Architecture
|
| 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
|
| TypeDoc Integration | ✅ Built-in | ❌ Manual | ✅ Plugin | ❌ Manual |
| Auto-generation | ✅ From source | ❌ | ✅ | ❌ |
| Type Linking | ✅ | ❌ | ✅ | ❌ |
Internationalization
|
| i18n Support | ⚠️ Planned | ✅ | ✅ | ✅ |
| RTL Support | ⚠️ Planned | ✅ | ✅ | ✅ |
| Locale Routing | ⚠️ Planned | ✅ /de/ | ✅ /de/ | ✅ /de/ |
Versioning
|
| 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
|
| Hydration | Full React | Full Vue | Full React | Partial (Islands) |
| JS Required | Yes | Yes | Yes | Minimal |
| Client State | React Router | Vue Router | React Router | Minimal |
| Bundle Impact | ~50-80KB | ~50-70KB | ~150-200KB | ~10-30KB |
Ecosystem
|
| npm Package | ardo | vitepress | @docusaurus/core | @astrojs/starlight |
| GitHub | Sebastian-Software | vuejs/vitepress | facebook/docusaurus | withastro/starlight |
| License | MIT | MIT | MIT | MIT |