Skip to content
Blume
Esc
↑↓navigate↵open⌘Jpreview
Introducing Blume 2.1

The open-sourcedocs frameworkfor humans and agents

Fast, AI-ready, and zero-config. Drop Markdown into a folder and ship a production-grade docs site with no app boilerplate to write or maintain. Free and open source, forever.

Example site: An example docs site for Acme, a fictional email and SMS API, built with Blume.
Acme
Quickstart

Send your first transactional message in minutes. Acme's REST API works with any language — this guide uses the official TypeScript SDK.

Install the SDK

Add Acme to your project with your package manager of choice. The SDK ships with TypeScript types and runs on Node, Bun, and Deno.

npm install acme
Send a message

Create a client with your API key, then call messages.send. Every request returns an id you can use to track delivery.

import { Acme } from "acme";

const acme = new Acme(process.env.ACME_API_KEY);

const { id } = await acme.messages.send({
  to: "ada@example.com",
  template: "welcome",
});

console.log(`Queued ${id}`);
Use a template

Reference a template by slug and pass variables — Acme renders the subject and body server-side, so your app never ships copy.

Track delivery

Poll the message endpoint, or subscribe to webhooks for real-time delivery, open, click, and bounce events as they happen.

Handle webhooks

Verify the signature on each request, then react to the event — here we mark a message delivered in our own database.

app.post("/webhooks/acme", (req, res) => {
  const event = acme.webhooks.verify(req);

  if (event.type === "message.delivered") {
    markDelivered(event.data.id);
  }

  res.sendStatus(200);
});
Next steps
AuthenticationWebhooks referenceAPI reference

You're in good company.

Companies and open-source libraries are moving their docs to Blume.

Teams ship their docs with Blume.Here's what changed for them.

One page, two readers.Every page has a Markdown twin for agents to read.

llms.txt
An index and the full corpus in llms-full.txt, rebuilt on every build.
Markdown at every URL
A Markdown twin of every page at its .md URL, with Accept: text/markdown negotiation on Vercel and Cloudflare server builds.
An MCP server
Opt-in tools that let coding agents search and read your docs directly.
Agent skills
Point Blume at your skills and it publishes them where agents look.

The agent-native documentation framework.Scored by two independent scanners.

is-agentic.comby Vercel

View report
useblume.dev
100/100
Fumadocs
63/100
Docusaurus
50/100

isitagentready.comby Cloudflare

View report
useblume.dev
80/100
Fumadocs
20/100
Docusaurus
7/100

Scores are as reported by is-agentic.com and isitagentready.com on September 20, 2026, and may have changed since.

Batteries included.No plugins to install, no services to wire up.

A folder of Markdown is a complete project — there's no starter to clone and no template to keep in sync with upstream.

  • Navigation is inferred from your files
  • Search, theming, and OG images are on by default
  • Reach for configuration only when you need it

Drop in an OpenAPI, AsyncAPI, or GraphQL spec and Blume renders a full interactive reference — endpoints, schemas, and a live playground.

  • OpenAPI, AsyncAPI, and GraphQL
  • Interactive “Try it” playground
  • Native pages, or Scalar's UI with scalar()

Write each release as a Markdown entry — or point Blume at your GitHub Releases — and every one rolls up into a generated timeline at /changelog.

  • Timeline page and permalinks, newest-first
  • Source entries straight from GitHub Releases
  • RSS feed on by default

30+ accessible components and a curated set of Markdown extensions, usable in any .mdx page with nothing to import.

  • Callouts, cards, steps, tabs, and file trees
  • Package-install tabs and code groups
  • Mermaid diagrams and KaTeX math

Search, SEO, and internationalization that scale from a personal project to a site with thousands of pages.

  • Local search in dev and production
  • OG images, sitemaps, RSS, and JSON-LD
  • UI in 30+ languages, with right-to-left support
An example docs site for Acme, a fictional email and SMS API, built with Blume.

Markdown with superpowers.No imports, no JSX to manage.

Directives become callouts.
:::tip, :::warning, and friends render as styled callouts, with nothing to import.
Package names become install tabs.
A package-install fence renders npm, pnpm, yarn, bun, nub, and aube commands as tabs.
Code, highlighted.
Shiki highlights at build time, with titles, line numbers, highlighting, and TypeScript-to-JavaScript tabs.
Math and diagrams.
KaTeX math renders at build time with no client JavaScript, and Mermaid diagrams load only on the pages that draw them.

installation.mdx

---
title: Installation
---

Install **Blume** with your package manager:

```package-install
blume
```

:::tip
Search, theming, and navigation work out of the box.
:::

Installation

Install Blume with your package manager:

npmpnpmyarnbunnubaube

npm install blume

Content from anywhere.Mix local files, remote repos, and your CMS in one site.

A folder is a site.
Local Markdown and MDX need no configuration at all.
Remote repositories.
mdxRemote() pulls MDX from another GitHub repository at build time.
Headless CMSs.
Notion, Sanity, Contentful, Payload, and Strapi over their APIs, plus Obsidian vaults.
Anything else.
A custom() adapter brings any backend without its SDK touching core.

blume.config.ts

import { defineConfig } from "blume";
import {
  filesystem,
  notion,
  sanity,
} from "blume/sources";

export default defineConfig({
  content: {
    sources: [
      filesystem({ root: "docs" }),
      notion({ database: "8f2c1e0a" }),
      sanity({
        projectId: "p1",
        dataset: "production",
        query: "*[_type == 'doc']",
      }),
    ],
  },
});
  • Markdown
  • MDX
  • GitHub
  • Obsidian
  • Notion
  • Sanity
  • Contentful
  • Payload
  • Strapi
  • Custom

Every component you need.Accessible, themeable, and nothing to import.

A command line for the whole lifecycle.No separate install.

Explore the CLI
Migrate from
  1. 1

    Run one command in your docs project.

    Using Claude Code? Swap --codex for --claude.

  2. 2

    Review the agent's edits.

    It follows Blume's migration playbook for , rewriting your config and pages in place, so you review the whole move as one diff.

  3. 3

    Preview the result.

    Run npx blume dev, then read the agent's summary of anything it dropped or approximated.

Learn Blume one goal at a time.Step-by-step guides, from first page to production.

Upgrade your docs with Blume.

Install today and ship a production-grade docs site in minutes. Free and open source, forever.

npx blume init

Supported by our sponsors.

Blume is community-driven and free forever, thanks to these companies.

Become a sponsor