MkDocs vs Livemark

Updated May 16, 2026

MkDocs is a Python-based docs generator. Content is plain Markdown, layouts are Jinja2 templates, and themes are pip-installable Python packages. The de-facto theme is Material for MkDocs, which is what most consumers actually use.

At a glance

AxisLivemarkMkDocs
Language / runtimeTypeScript / Node 24+Python 3.8+
UI frameworkReact 19Jinja2 templates (HTML + CSS)
Build toolVite + TanStack StartMkDocs CLI
Content formatMarkdown + MDXMarkdown (CommonMark + Python-Markdown extensions)
LicenseMIT, self-hostedBSD-2-Clause, self-hosted
Output modelPrerendered static (SSR-capable)Prerendered static

Architecture

Livemark builds on Vite, TanStack Start, and React. Authoring uses JS/TS conventions (livemark.config.ts, npm-installable plugins, MDX components written in React).

MkDocs is a Python CLI. The site is configured through mkdocs.yml. Themes are pip-installable; the build pipeline runs Markdown content through Python-Markdown (or pymdown-extensions) and through Jinja2 templates. There's no JavaScript build step — interactivity in the rendered site is whatever the theme's templates emit.

Material for MkDocs adds a curated theme, a search index based on lunr.js, instant navigation, and a wide plugin ecosystem (mkdocs-material extras, plus the broader mkdocs-* plugin namespace on PyPI).

Content layout is unconstrained on the Livemark side: it scans by glob (include/exclude in livemark.config.ts), and each article's URL is set by a path: frontmatter field rather than its file location. There's no required docs/ folder — a project can pull articles from README.md, docs/, blog/, package READMEs, or anywhere else. MkDocs reads from docs/ (configurable via docs_dir in mkdocs.yml), with routes derived from file paths under that directory.

Content surface

Both tools accept Markdown with frontmatter. The big asymmetry is component embedding: Livemark accepts MDX (React components in .md/.mdx); MkDocs accepts only Markdown.

MkDocs extends Markdown through Python-Markdown extensions (admonitions, tabs, footnotes, definition lists) and pymdown-extensions (which adds the full Material syntax: === "Tab 1" tabs, :::note admonitions, ++ctrl++ keyboard shortcuts, etc.). Customization beyond what extensions offer requires writing a Python plugin or overriding a Jinja template.

Frontmatter shape differs: MkDocs reads title, summary, tags (with a plugin), template, and uses mkdocs.yml for navigation. Livemark uses path, order, icon, sidebar, date, tags.

Feature matrix

CapabilityLivemarkMkDocs (Material)
VersioningNoYes (via mike plugin)
Internationalization (i18n)NoYes (Material's i18n plugin)
SearchYes (Orama, client-side)Yes (built-in, client-side)
BlogYes (built-in section type)Yes (Material's blog plugin)
ChangelogYes (section type)No (manual)
SitemapYesYes
RSSYes (per blog section)Via plugin
ThemesComponent overrides via .livemark/Theme packages + Jinja overrides
PluginsVite plugins + remark/rehypePython plugins (mkdocs-* on PyPI)
Custom routes.livemark/routes/ (TanStack Router)No (content-only)
Standalone toolchainNode + npmPython + pip

Output & deployment

Both tools produce static HTML + assets ready for any static host. MkDocs emits to site/ by default; Livemark emits to .livemark/build/client/. The hosting story is the same — see Livemark's Deployment for host guides.

See also

Created with and Livemark