Skip to content
Blume
Esc
navigateopen⌘Jpreview

Everything included,right in your terminal.

No separate install, no extra setup — every Blume project comes with a command line that scaffolds, previews, builds, validates, and audits your documentation. Fast by default, scriptable in CI, and built to work with your favorite coding agents.

npx blume init
Scaffolded my-docs
 
blume dev
Local http://localhost:3000/
 
blume build --budget-js 120
Built to dist — 40.3 kB JS, under budget
 
blume audit
No issues found.

The whole workflow, built in.

Everything between a blank folder and a deployed docs site — scaffolding, a dev server, production builds, and verification — lives in a single command.

Zero to docs site in one command

blume init asks a few questions and scaffolds a complete project — content folder, config, and scripts. No starter repo to clone, nothing to keep in sync with upstream.

  • Interactive by default, --yes in CI
  • Four templates: docs, api, sdk, and changelog
  • Next steps tailored to your package manager
npx blume init
Where should we create your project? ./my-docs
What's your docs site called? Comet
Which template? docs Markdown docs site
Where does your content live? filesystem Local .mdx files
 
Scaffolded my-docs
 
Next steps:
cd my-docs
npm install
npx blume dev

A dev server that keeps up

The dev server regenerates the runtime on every change and hot-reloads before you've switched windows. Search, theming, and OG images all work in dev, exactly as they will in production.

  • Hot reload for content, config, and components
  • Include drafts and unpublished content with --preview
  • Verbose --debug logging when something's off
blume dev
Generated runtime — 24 pages
Indexed 24 page(s) for search
 
Local http://localhost:3000/
Network use --host to expose
 
content/docs/quickstart.mdx changed
Reloaded in 38 ms
 
blume.config.ts changed
Reloaded in 74 ms

Builds that hold the line

One command renders the whole site — static or server — and wires up the sitemap, robots.txt, redirects, and search index. Performance isn't a hope, it's a flag.

  • Deploy to Vercel, Node, Netlify, or Cloudflare
  • --analyze prints client bundles, largest first
  • --budget-js fails the build when it's over budget
blume build --analyze --budget-js 120
Built 24 page(s) — static output
Generated sitemap.xml and robots.txt
Generated agent-readability.json
Indexed 24 page(s) for search
 
Client bundles, largest first
search.js 38.2 kB
theme.js 2.1 kB
Total 40.3 kB — under budget (120 kB)
 
Built to dist

A linter for your docs

Three commands keep a site honest: check type-checks your pages, validate chases every link and anchor, and doctor diagnoses config and content problems before they ship.

  • Broken links, anchors, and assets caught in CI
  • TypeScript errors in custom pages and config
  • --json output for CI and editor integrations
blume validate
content/docs/guides/intro.mdx:12
Broken link: /guides/setup resolves to nothing
content/docs/faq.mdx:31
Anchor #pricing not found on /overview
 
1 error(s), 1 warning(s)
 
blume check
No type errors.
 
blume doctor
No problems found.

No lock-in, ever

The registry and the escape hatch cut both ways: add pulls a component's source into your project to make it yours, and eject promotes the entire runtime into a standalone Astro app you own outright.

  • blume add installs source components
  • blume sync re-fetches remote content sources
  • blume eject hands you a plain Astro project
blume add accordion
Added components/accordion.astro
 
blume eject
This promotes .blume/ into a standalone Astro app you own. Continue? yes
Ejected 42 file(s)
Ejected to a standalone Astro project.
 
Next steps:
npm install
npm run dev

Audit everything you ship.

blume audit crawls your built site the way a search engine would — titles, descriptions, canonicals, Open Graph, structured data, sitemaps — and turns what it finds into a to-do list your favorite agent can clear. No third-party SEO tools required.

blume audit --codex
 
blume audit 128 pages · dist · offline
3,712 audits · 32 errors · 56 warnings · 3 notes
 
Handing 91 findings to Codex…
>_ OpenAI Codex (v0.144.3)
model: gpt-5.6-sol xhigh
directory: ~/GitHub/blume/apps/docs

Fix the issues found by `blume audit` in this project.

The full audit report is at report.json. It is JSON: each entry in `diagnostics` is one finding, with the check `code`, a `message` explaining what is wrong, the affected page `url`, the source `file` to edit (relative to the current directory, with a `line` when the finding points at a specific front matter key), and a `suggestion` describing the fix.

Work through every finding:

1. Read the report and group the findings by `file`.

2. Apply each finding's `suggestion` by editing the named source file — most fixes are front matter edits at the cited line.

3. Never fix a finding by deleting a page, removing content, or hiding it from the audit; if a finding genuinely needs a human decision, leave it and say so in your summary.

When you are done, run `blume build` and then `blume audit` to verify, and repeat until the audit reports no issues.

Findings that name the fix

Because Blume built the site, every finding points at the source file and the front matter line that fixes it — not just the URL a crawler saw. The report reads as a to-do list, not a wall of pages.

A CI gate you control

The exit code is the contract: fail on errors by default, tighten to warnings when you're ready. Point --url at a live deployment to catch what only the real server can tell you — bad rewrites, missing compression, a stray X-Robots-Tag.

Automagically optimized

Hand the findings to Claude Code or Codex. The audit writes the full report and opens your agent with a prompt that fixes each finding at the source, rebuilds, and re-audits until the report is clean.

Docs that prove they can answer.

blume eval gives your docs a test suite — an AI agent answers your users' real questions using only the documentation, a judge grades every answer, and CI fails when the docs can't answer.

blume eval
 
blume eval 3 question(s) · Claude Code
 
install-node-version pass 1.00 14.2s $0.14
deploy-vercel fail 0.40 38.9s $0.31
missing: the adapter is auto-detected
search-providers skipped
 
fix: content/docs/deployment.mdx Docs could not answer: "How do I deploy to Vercel?"
 
2 passed · 1 failed · 1 skipped · 1m 42s · $0.45

Fresh eyes, enforced

The reader answers in an empty directory with its file, shell, and web tools disabled — it sees your docs through the same MCP search a real agent would. What isn't written doesn't exist, even when the model happens to know it.

Graded against your facts

Every question lists the facts a correct answer must state. A judge grades each answer against them — paraphrase passes, contradiction fails, and so does “the documentation doesn't say.” --threshold relaxes the gate while you dig out of a backlog.

Fix with your agent

Each failure is anchored to the page that should answer it. Run --fix to hand the report to Claude Code or Codex, which adds the missing facts in the page's own voice and reruns the eval until everything passes.

Docs in every language.

blume translate finds every page that's missing or outdated in each configured locale and translates it with the agent CLI you already have — headlessly, validated, and tracked in a ledger you commit. Blume holds no API keys and calls no model itself.

blume translate --check
 
content/docs/quickstart.mdx → fr stale
content/docs/quickstart.mdx → ja stale
 
2 stale · 130 up to date
 
blume translate --claude
 
blume translate 2 item(s) · 2 locale(s) · Claude Code
 
content/docs/quickstart.mdx → fr 24.2s $0.09
content/docs/quickstart.mdx → ja 26.8s $0.08
 
Translated 2 files into 2 locales · 130 already up to date · 51.3s · $0.17

Only what drifted

A committed ledger stamps every translation with the source revision it came from. Edit one page and a rerun retranslates one page per locale — and translations you wrote by hand are adopted as-is, never overwritten.

Structure survives

The agent only translates text. Blume rebuilds each file's frontmatter from the source, keeps code blocks and fence counts intact, and writes every file itself — a reply that fails validation writes nothing at all.

Drift fails CI

blume translate --check is a read-only gate: it exits non-zero the moment a source page outruns its translations, so a stale locale surfaces in the pull request instead of in production.

Every command.

14 commands cover the whole life of a docs site. Every flag is documented in the CLI reference.

blume init

Scaffold a project, interactive by default.

blume dev

Start the dev server with hot reload.

blume build

Build the static (or server) site.

blume preview

Preview the last build.

blume add

Install a source component from the registry.

blume sync

Re-fetch remote content sources.

blume eject

Promote the runtime into a standalone Astro app.

blume check

Type-check the site with astro check.

blume doctor

Diagnose config and content problems.

blume validate

Validate links across your content.

blume audit

Audit the built site for SEO and health issues.

blume eval

Test the docs: an agent answers your questions using only the documentation.

blume translate

Translate docs into the configured locales with a local agent CLI.

blume version

Freeze the current docs as an archived version.

Upgrade your docs with Blume

Install today and ship a production-grade docs site in minutes.

npx blume init