Skip to content HtmlpressStatic site generator HtmlpressStatic site generator

Change theme

Keyboard shortcuts

Starlight vs Htmlpress

Updated

Starlight is the official Astro docs theme, maintained by the Astro team. It uses Astro's islands architecture (zero JavaScript by default, opt-in interactive components) and supports MDX content.

At a glance

Axis Htmlpress Starlight
Language / runtime Rust (single binary, no runtime) TypeScript / Node 18+
UI framework None (plain HTML + CSS, htmlpress-* web components) Astro components (HTML-first), optional React/Vue/Svelte/Solid islands
Build tool htmlpress binary Astro (Vite under the hood)
Content format HTML and Markdown pages Markdown + MDX + MDoc
License MIT, self-hosted MIT, self-hosted
Output model Prerendered static Prerendered static (SSR-capable via adapters)

Architecture

htmlpress is one Rust binary, installed from npm (gethtmlpress), PyPI or crates.io. It wraps each HTML page in one layout with a navigation and a theme; there is no bundler, no UI framework and no plugin API. Every built-in file — the layout, the styles, the scripts and each component — can be escaped: a file at the same path under .htmlpress/ replaces it.

htmlpress pages render to HTML at build time and hydrate nothing: interactive htmlpress-* components are custom elements with a small vanilla script each, linked only on pages that use them.

Starlight uses Astro's islands model: pages are rendered to HTML at build time with zero JavaScript by default. Interactive components are explicit "islands" that hydrate on demand. The default Starlight theme is mostly Astro components (no client JS); reaching for React/Vue/Svelte is opt-in. Astro's component model is Astro's own .astro syntax (HTML + JS frontmatter, statically analyzed).

Content layout is unconstrained on the htmlpress side: it scans by glob (include/exclude in htmlpress.yaml, every .html file by default), and a page's URL follows its file path below the glob's base, so docs/**/*.html serves docs/guide.html at /guide/. There's no required docs/ folder. The navigation is built from the folders and each page's <meta name="order">; a folder's index.html names its group. Starlight requires content in src/content/docs/ (Astro's content-collections directory), with routes derived from file paths under that root.

Content surface

Starlight accepts Markdown + MDX with frontmatter, and additionally MDoc (Markdoc) for structured, validated content with custom tags. Components in .mdx files are Astro components by default; framework components (React, etc.) need explicit client:* directives to hydrate.

htmlpress pages are plain semantic HTML, styled by the theme from the elements themselves. Richer blocks are htmlpress-* custom elements (htmlpress-callout, htmlpress-tabs, htmlpress-filetree, htmlpress-cards, …), whose CSS and JS are linked only on pages that use the tag. A project adds its own tag with .htmlpress/components/<name>/<name>.html, which replaces the tag at build time.

htmlpress has no frontmatter: a page's metadata is its own <head> — <title>, <meta name="description">, <meta name="order">, <meta name="layout"> and <meta name="image">; other <head> tags are kept. Starlight uses frontmatter: title, description, sidebar, tableOfContents, editUrl, lastUpdated.

Feature matrix

Capability Htmlpress Starlight
Versioning Partial (a section or a deploy per version) No (community plugins)
Internationalization (i18n) Yes (translations, language picker, 7 bundled UI languages) Yes (built-in)
Search Yes (built-in, client-side) Yes (Pagefind, built-in)
Zero-JS by default No (small vanilla scripts, no framework) Yes (islands architecture)
Blog No No (use Astro's content collections)
Changelog No No
Sitemap Yes (with site set) Yes
RSS No Via @astrojs/rss integration
Themes Escapes in .htmlpress/ + --htmlpress-* tokens Component overrides via Starlight slots
Plugins No (project components in .htmlpress/components/) Astro integrations + Starlight plugins
Custom routes Any .html file; extra layouts in .htmlpress/layouts/ Astro pages alongside Starlight content

Output & deployment

Both produce a directory of static HTML + assets. Starlight emits to dist/ by default; htmlpress emits to .htmlpress/build/.

htmlpress writes every page to static HTML in .htmlpress/build/, along with robots.txt, a sitemap.xml when site is set, a Markdown copy of each page, llms.txt and the agent skills under .well-known/agent-skills/. The base key serves the site under a sub-path. See Deployment for host guides.

Starlight inherits Astro's adapter system, which supports SSR on Cloudflare, Netlify, Vercel, Node, and Deno. htmlpress has no server mode: the build is static only.

See also

Created with ❤ and Htmlpress

Actions

Edit on GitHubView as Markdown

Contents