Content, media, schema, users — all in a single .pod file.
Copy it anywhere. No database server. No cloud account.
Built for Astro.
A full CMS admin — standalone server on port 4322, glassmorphism UI, three themes.
A block-based editor built for real content — rich text, inline images, and layout controls without leaving the page.
Pick from your media library or upload directly — the native file picker gives you access to iCloud Drive, Dropbox, Google Drive, and any connected cloud folder, no integration needed.
Float images left or right so text wraps around them naturally — or center them, or stretch full-width. One click, instant preview in split view. Serialized as standard markdown.
Recent updates and improvements to Orbiter.
getPreviewEntry() in orbiter:collections reads any draft directly from the pod, bypassing the published-only snapshot.orbiter-env.d.ts is auto-generated at build time with per-collection interfaces and typed overloads for all query functions.getCollection() output./note in the block picker to insert a tinted info/warning box inline with prose./tbl for an editable 2×2 table. Tab to navigate cells, toolbar to add/remove rows and columns.{slug} in Schema; an ↗ Preview button appears in the editor topbar..mp4 URL. The editor auto-embeds in a responsive 16:9 player./img and /vid shortcuts to insert media blocks from the keyboard.orbiter-core, orbiter-integration, orbiter-admin, orbiter-cli.getLocaleCollection(), locale fallback.Your entire CMS lives next to your source code — in one file.
npm install @a83/orbiter-admin
ORBITER_POD=$(pwd)/content.pod npm start import orbiter from '@a83/orbiter-integration';
export default defineConfig({
output: 'server',
integrations: [orbiter({ pod: './content.pod' })],
}); import { getCollection } from 'orbiter:collections';
const posts = await getCollection('posts'); A full CMS admin — standalone on port 4322. The Astro integration handles content at build time via orbiter:collections.
.pod file. Copy it anywhere. Back it up with cp.astro.config.mjs gives you orbiter:collections — a Vite virtual module that snapshots your published content at build time. Zero runtime fetch.getCollection and getEntry — same shape as Astro's built-in content collections.GET /orbiter/api/[collection] — optional Bearer token, ready to use from any frontend or mobile app.orbiter unpack extracts media BLOBs to files, orbiter pack restores them. Commit your pod + media to Git — a GitHub Actions template is included for automatic rebuilds.slug--locale convention. getLocaleCollection() and locale fallback support built in.⌘K fuzzy search across all content and navigation. Installable as a PWA on mobile and desktop.
Every other CMS gives your content to a cloud. Orbiter gives it to you.
A single .pod file — on your disk, in your repo, on your server.
Copy it, encrypt it, email it. No account required. No monthly invoice.
No vendor who can change pricing, shut down, or hold your data hostage.
cp content.pod backup.pod — that's your entire CMS. A 500-entry blog with images typically weighs under 50 MB.npm run dev on your laptop with no internet. Edit content on a plane. No API calls, no auth endpoints, no CDN.Other CMS options for Astro — and where Orbiter fits in.
| 🪐 Orbiter | Decap CMS | Keystatic | Tina CMS | Payload CMS | |
|---|---|---|---|---|---|
| Storage | SQLite file | Git | Git / files | Git + cloud | Postgres / MongoDB |
| External service | ✓ None | GitHub OAuth required | GitHub / local | Tina Cloud (free tier) | ✓ None |
| Setup | npm install + 3 lines | YAML config file | Config file | Config + dashboard | Full backend setup |
| Astro support | ✓ Native | ~ Plugin | ✓ Native | ~ Plugin | Manual |
| Media storage | In pod (BLOBs) | External CDN | External CDN | External CDN | DB / S3 |
| Version history | ✓ Built-in | Git history | Git history | Git history | Custom / code |
| Schema editor UI | ✓ Yes | YAML only | Config only | Config only | Code only |
| Offline admin | ✓ Yes | No | ~ Local only | No | ✓ Yes |
| Backup | cp content.pod | git push | git push | Tina Cloud + git | DB dump |
| Serverless deploy | ✓ Git sync mode | ✓ Git-native | ✓ Git-native | ✓ Git-native | DB required |
| License | MIT free | MIT free | MIT free | MIT + paid tiers | MIT free |
Orbiter is open source under the MIT License — free for personal and commercial use, forever. If it saves you time, consider supporting its development.
Orbiter is free and stays free. If it saves you time or earns you money, consider supporting ongoing development — new features, bug fixes, and long-term maintenance.
Everything you need to know before getting started.
.pod file is a standard SQLite database — just with a custom extension. You can open it with any SQLite GUI (TablePlus, DB Browser for SQLite, DBeaver) and inspect or query your content directly. The extension makes it easy to identify in your project.cp content.pod backup.pod. That's it. Every entry, every media file, every schema definition, every user account — in one file. Schedule a cron job, sync to S3, commit it to git. Standard file tooling works.GET /orbiter/api/[collection] returns all published entries as JSON. Supports optional Bearer token authentication. Works from any frontend, mobile app, or external service without extra setup.orbiter:collections at build time. The admin runs as a separate server (@a83/orbiter-admin) independently of your Astro output mode.content.pod with any SQLite GUI — TablePlus, DB Browser for SQLite, DBeaver, or the sqlite3 CLI. Tables are _collections, _entries, _media, _users, _sessions, and _versions.Orbiter is the right tool for small teams and content sites. Here's where it isn't.
One prompt. A complete Astro blog with Orbiter CMS — collections, example content, all pages, and a working admin — built by your AI assistant from scratch.
BaseLayout, Header, PostCard components. Blog listing, post detail, and About page — all wired to Orbiter content.
Posts, Authors, and Pages collections. Three seeded blog posts, an author, and an About page — ready to edit.
Login with admin / admin and start creating content immediately. Change schema, upload media, switch themes.
Clone the repo, seed the demo pod, start the admin — login at localhost:4322 with admin / admin.
git clone https://github.com/aeon022/orbiter.git
cd orbiter && npm install && npm run seed
ORBITER_POD=$(pwd)/apps/demo/demo.pod npm run dev --workspace=packages/admin npm install -g @a83/orbiter-cli → orbiter init my-site aeon022/orbiter. Config is included.Advanced Web Architecture & Digital Systems Engineering — Less Noise. Nice Data. No Bloat.
abteilung83.at →