Comparison

This table is a hand-maintained snapshot, last checked on 2026-08-03, not a benchmark. Every project here moves faster than a table written by hand, so treat a cell as a claim about that date and check the source before relying on it. Check the project docs directly: VitePress, Docusaurus, Astro Starlight, and Material for MkDocs. Corrections are welcome in an issue.

CapabilityCarvePressVitePressDocusaurusAstro StarlightMkDocs Material
Markup languageCarve .crv.Markdown compiled as Vue components.Markdown and MDX.Markdown and MDX by default; Markdoc can be added.Markdown.
Client framework in outputNo client framework; small scripts for search, nav, copy, outline, and playground when used.Vue-powered site; VitePress documents static HTML first visit and SPA navigation after hydration.React-based site.Astro output; UI islands are available through Astro integrations.Static MkDocs output with theme JavaScript for features.
Dev serverYes, carve-press dev.Yes, Vite dev server.Yes.Yes, Astro dev server.Yes, mkdocs serve.
Built-in searchYes, MiniSearch index.Local MiniSearch or Algolia DocSearch.Commonly Algolia through theme config; local search requires plugin choices.Pagefind is the default search provider.Built-in client-side search enabled by default.
i18nPrefix locales and switcher; no translation extraction tooling.Built-in locale config.Built-in localization workflow.Built-in i18n configuration.Theme translations and a language selector; separate builds per language.
BlogBuilt-in generated listing, tags, and feed.Possible with custom theme/data loading, not a default docs feature.Built-in blog.Through Astro content collections or a community plugin.Built-in blog plugin.
Doc versioningNot built in.Not a primary built-in feature.Built-in docs versioning CLI and routes.Not a primary built-in feature.Through the separate mike tool, not the theme itself.
Code-block affordancesShiki, titles, copy, line numbers, hl, notation diff/focus/error/highlight, code groups.Strong Markdown code-block support with Shiki and VitePress extensions.Strong code-block support in MDX/Prism ecosystem.Expressive Code enabled by default.Strong code annotations, copy, highlighting, and content tabs.
Build-time link validationInternal links, nav, sidebar, page nav, and Carve crossrefs are fatal by default.ignoreDeadLinks defaults to false, so dead links fail by default.onBrokenLinks defaults to throw in production builds; Markdown link handling is configurable.Not documented as a built-in equivalent.Not documented as a built-in; available through plugins.
Live source/render compareBuilt-in ::: compare.Not a documented default capability.Not a documented default capability.Not a documented default capability.Not a documented default capability.
llms.txtBuilt-in extension.Their own docs publish one; generating it for your site is not a documented default.Not documented as a default.Not documented as a default.Not documented as a default.
Redirects for a renamed pageBuilt in: redirects map plus redirectFrom on the page, emitting a meta-refresh stub with a canonical link and a _redirects file.Not built in; an open feature request. Hand-written stubs or host rules.Official plugin-client-redirects writes redirecting pages at build time.Astro’s redirects config emits meta-refresh pages in a static build; adapters write host config instead.Not in the theme itself; a community plugin covers it.
Redirect validationTargets must resolve to a real route, a source may not collide with a page, and a source may not escape the output directory.n/aNot documented as validated against the route table.Not documented as validated against the route table.n/a
Rename detectionBuilt in: a committed routes.json, and a route that disappears without a redirect fails the build.Not documented.Not documented.Not documented.Not documented.
Route rewrites (publish a page at a different URL)rewrites, exact paths or a directory pattern.rewrites, object or function, with pattern support.slug frontmatter and plugin routing.slug frontmatter.Plugin-based URL handling.
Ecosystem sizeEarly and small.Larger Vite and Vue ecosystem.Larger React and plugin ecosystem.Larger Astro integration ecosystem.Larger Python and MkDocs plugin ecosystem.
Component islandsMount points hydrated by modules the site supplies, with a static fallback; no framework is bundled.Vue components in Markdown.React components in MDX.Astro islands and integrations.Markdown plus theme/plugin extensions; not an islands-first model.

Where CarvePress is ahead

  • Nothing to lose a URL silently. A page that disappears fails the build unless something redirects the old route, and every redirect target is checked against the real route table. The other generators here can emit redirects; none of them documents a check that notices a URL went missing in the first place. This is the one capability with no equivalent in the table.
  • Redirects declared on the page that replaced the old one. redirectFrom travels with the page and is deleted with it. A central map is fine for a handful of legacy URLs and nobody ever prunes it. The idea is borrowed from Jekyll’s jekyll-redirect-from.
  • Validation as the default, not a lint step. Internal links, nav and sidebar entries, prev and next overrides, cross-references, and redirect targets all fail the build, and every failure of a kind is reported at once rather than one build cycle at a time.
  • Source and rendered output in the same block. ::: compare renders a Carve fence beside the HTML it produces, so a syntax page cannot drift from the engine.
  • Static output with no client framework. HTML, CSS, and four small scripts. The Carve engine reaches the browser only on pages that embed a live playground.

Where CarvePress is behind

  • No doc versioning, where Docusaurus has it in core.
  • No plugin ecosystem worth the name yet, and islands are mount points rather than components written inline in the page, which is what Vue-in-Markdown or MDX give you.
  • No translation workflow beyond prefix locales and a label map.
Edit this page

Last updated