What is Airdraft?
An introduction to Airdraft — the open-source headless CMS for developers who want full control over their content.
Airdraft is an open-source headless CMS designed for developers who want structured content management without giving up control of where their data lives. You define the schema, pick where content is stored, and choose how to serve it — Airdraft handles the rest.
Two ways to use Airdraft
Airdraft runs in two fundamentally different modes:
Cloud-managed (hosted)
Airdraft Cloud is the fully managed version. Create a team, create a project, and get a hosted CMS endpoint immediately — no servers to provision or maintain.
- Content is stored in Airdraft's cloud infrastructure
- GitHub integration syncs content directly to a repository as MDX/JSON files
- Dashboard at
app.airdraft.spacewith a full editor UI - Authentication, media storage, and billing all managed for you
Best for: teams who want a turnkey solution and are comfortable with a hosted service.
Self-hosted
Install Airdraft in your own Next.js app (or any Node.js server) and run it wherever you like. You own all the data.
- Single command setup:
npx airdraft init - Content stored in your own database (SQLite, PostgreSQL, or MongoDB) or flat files on disk
- Bring your own media storage (local disk, S3, R2, Cloudinary, and more)
- Zero vendor lock-in — export your content at any time
Best for: developers who need full data sovereignty or complex custom integrations.
Core concepts
| Concept | What it means |
|---|---|
| Collection | A content type, like posts, authors, or products. Defined in airdraft.schema.json. |
| Entry | A single piece of content belonging to a collection — a blog post, a team member, a FAQ item. |
| Field | A typed property on an entry: string, rich-text, media, relation, number, etc. |
| Schema | The full definition of all collections and their fields — the source of truth for your content model. |
| Slug | The unique identifier for an entry within a collection. Used in URLs and API calls. |
| SHA | A content fingerprint used for optimistic concurrency — prevents two authors overwriting each other's changes. |
| Draft / Published | Every entry has a status. Drafts are hidden from public queries unless you explicitly request them. |
| Plugin | Middleware that adds capabilities: authentication, media handling, SEO fields, audit logging, schema editing. |
| Adapter | The storage layer that backs a collection: local file system, GitHub, SQLite, Postgres, MongoDB. |
What Airdraft is NOT
- Not a page builder — Airdraft serves structured data via an API. You build the pages however you like (Next.js, Astro, SvelteKit, etc.).
- Not a database — Airdraft is a CMS layer on top of your storage. It adds schema, validation, a publish workflow, and an editor UI.
- Not opinionated about your frontend — Use any framework. The
@airdraft/reactpackage provides React hooks, but the REST API works with anything.
The content lifecycle
Schema definition (airdraft.schema.json)
↓
Author creates entry in editor UI
↓
Entry saved as draft → reviewed → published
↓
Frontend queries published entries via API or hooks
↓
Page renders structured content
Package overview
| Package | Purpose | npm |
|---|---|---|
@airdraft/next |
Route handler factory + server client (createCmsClient) + Next.js config wrapper |
npm |
@airdraft/core |
Core engine — defineConfig, LocalAdapter, GitHubAdapter, all shared types |
npm |
@airdraft/react |
React hooks: useEntries, useEntry, useMedia, useAuth, useTeam |
npm |
@airdraft/react-ui |
Drop-in admin UI: CMSAdmin, EntryEditor, MediaManager, SchemaEditor |
npm |
@airdraft/client |
TypeScript HTTP client — client.entries.list(), client.media.upload() |
npm |
@airdraft/cli |
npx airdraft init and management commands |
npm |
@airdraft/content |
Pure helpers: resolveMediaUrl, parseMarkdown, resolveRelation |
npm |
@airdraft/react-content |
RSC display components: EntryCard, BodyField, MediaField, DateField |
npm |
@airdraft/plugin-auth |
withAutoAuth — login, sessions, OAuth, invite flow |
npm |
@airdraft/plugin-media |
withAutoMedia — file upload + URL injection |
npm |
@airdraft/plugin-seo |
withSeo — injects SEO fields into collections |
npm |
@airdraft/plugin-audit-log |
withAuditLog — structured audit events |
npm |
Next steps
Resources
- GitHub — aevrHQ/airdraft — source code, issues, changelogs
- airdraft.space — schema validation endpoint + cloud platform
@airdrafton npm — all published packages