CoreBunch / Instatic
- среда, 1 июля 2026 г. в 00:00:06
Instatic is a modern self-hosted visual CMS - get it running in 1 minute
Own your site. Love building it.
A self-hosted CMS where the visual editor, content engine, and publisher all live in one Bun server — and the pages it ships are clean enough to read in view-source.
One-Click Deploy · Quick Start · Docs · Plugins · Roadmap
Watch the introductory video about Instatic on YouTube.
A modern website usually means assembling a stack: a headless CMS, a framework, a host, a form service, an analytics vendor, an image CDN — each with its own bill, dashboard, and 2 a.m. outage. Instatic is the opposite bet. One Bun server holds the whole thing — the canvas editor, the content engine, media, auth, forms, plugins, and the publisher — and you run it wherever you like, backed by SQLite or Postgres.
What comes out the other end is the part most builders quietly compromise on: plain semantic HTML and compact CSS, with none of the editor's machinery left behind in the page. No framework runtime, no builder attributes, no div soup. The site loads like a static file because, most of the time, it is one.
MIT. Self-hosted. Yours.
Railway is the fastest way to get Instatic live. Pick a template, hit the button, wait about two minutes. That's it. It generates the secret keys, attaches the storage volume, and sets up the health checks on its own. You never open a terminal.
| Provider | Database | Best for | Deploy |
|---|---|---|---|
| Railway · Recommended | SQLite | A single site — blog, portfolio, small business | Deploy → |
| Railway | Postgres | Multiple authors, managed backups, room to grow | Deploy → |
| Render | — | — | Coming soon |
| Fly.io | — | — | Coming soon |
| DigitalOcean | — | — | Coming soon |
SQLite is the right default for most sites. Reach for Postgres when you've got a team of authors or want managed database backups.
When a new Instatic version is available, update by redeploying the latest image. Your database and uploads stay on the attached storage, so the app container can be replaced without rebuilding the site from scratch.
Prefer your own hardware? Instatic is a single Docker image:
INSTATIC_IMAGE=ghcr.io/corebunch/instatic:latest docker compose -f compose.prod.yml -f compose.sqlite.yml up -dFull guides for VPS, Postgres, HTTPS with Caddy, Render, and backups are in docs/deployment.
Most tools do one job and hand you off for the rest. You design in one place, build in another, keep content somewhere else, then bolt analytics on from a fourth. Instatic does all of it. Here's what's actually in the box.
The editor is a real canvas, not a form with a preview pane stapled to it. You put several breakpoint frames side by side and edit them together. Change the desktop and the mobile frame reacts in the same view. When you'd rather work on the real thing, flip to live mode and edit a single full-size page in place.
The part nobody else has: Core Framework is built in. It's the design-token engine thousands of WordPress pros already use every day, and here it's a core system, not a plugin you install and pray over.
framework.css. No bloat, no duplicate rules, nothing you didn't ask for.Your whole design system lives as data. Change one token and every page that uses it updates.
data_tables and data_rows. There's no special-cased "pages" table hiding in a corner. Schemas, raw rows, imports, exports, and form submissions all sit in one consistent place./admin/data you create custom post types and custom data tables with their own fields, then work the rows in a spreadsheet-style grid: search, sort, filter, bulk publish, bulk export. Custom post types come with a real editorial workflow — draft, scheduled, published — and version history on the published copy. Plain data tables are simple grids you can point at anything: the submissions from a form, a product catalog, a lightweight CRM, a list of testimonials. And every table you build is a content source a loop can render. Define a "Team" table once, loop it onto your about page, done.This is the youngest pillar, and the one we're pushing hardest right now. First-party, privacy-respecting analytics are next. See the roadmap.
Every CMS has plugins. The difference here is where they run.
An Instatic plugin is a zip package with a manifest, and it runs inside a QuickJS-WASM sandbox. No filesystem. No environment variables. No network at all, unless the site owner grants it, one host at a time. A plugin can't read your secrets or phone home, because the sandbox never hands it the door. The classic "a plugin took down my site and emailed the database to a stranger" story doesn't run here.
Inside that sandbox the SDK is genuinely capable. A plugin can add:
Start with the plugin system docs and the template plugin.
A published Instatic page is mostly just a file sitting on disk. No framework to boot, no hydration step, no database round-trip on the common path. The browser pulls down semantic HTML and a compact stylesheet, and it's done. There's barely anything between the visitor and the content, so the pages feel instant.
That speed isn't a setting you tune. It falls out of how publishing works, in three layers you never have to think about:
What comes out the other end is plain HTML and compact CSS, all the way down. Nothing from the editor rides along: no React on your public pages, no editor runtime, no framework in the markup. And because it's just HTML and CSS, nothing holds your site hostage — you can read it, host it anywhere, or take it and leave. Full design: the publisher.
You need Bun. Nothing else. The default dev setup runs on SQLite, so there are no extra services to stand up.
git clone https://github.com/corebunch/instatic.git
cd instatic
bun install
bun run devOpen http://localhost:5173. The first visit walks you through creating your site and your owner account.
Want to see it the way it actually ships? bun run start builds the admin and serves it from the Bun server at http://localhost:3001/admin.
Backups, in one sentence: back up the database (a Postgres dump or the SQLite file) and the uploads folder, and you've backed up the whole site — details.
We're the team behind Motion.page and Core Framework — tools that thousands of people use to build websites for a living, mostly in the WordPress world.
We spent years making other platforms more bearable. At some point the obvious question wouldn't go away: what if the thing underneath was just right to begin with? No legacy to work around, no markup we're not allowed to touch, no business model that depends on keeping your site where we can see it.
So we built Instatic. And we brought Core Framework along, wired in as a core system, so the color shades, type scales, spacing, and utility classes our users already rely on are part of the product — not an add-on you install and hope for the best.
Here's the honest part: this is version 0.0.x.
Everything above — the canvas, Core Framework, the universal content model, the sandboxed plugins, the AI agent, forms, loops, templates, media, MFA, the audit log, one-click deploy, the clean publisher — is the starting line, not the finish. What's coming:
APIs and workflows can still shift before 1.0. If that makes you nervous, wait for 1.0 — no hard feelings. If you'd rather help shape what site ownership looks like for the next twenty years, now's the good seat.
One Bun server. A React admin built with Vite. A publisher that emits pages you'd be happy to have written yourself.
| Runtime | Bun, for both server and tooling |
| Language | TypeScript everywhere |
| Admin app | React 19 (React Compiler on), Vite, Zustand + Mutative, CodeMirror, dnd-kit |
| Server | Bun.serve with a hand-written router |
| Database | SQLite or Postgres — one DbClient interface, picked by DATABASE_URL |
| Validation | TypeBox at every untyped boundary; schemas are the source of truth |
| Plugins | QuickJS-WASM sandbox, owner-granted permissions |
| AI | Provider-agnostic drivers over raw HTTP/SSE, no vendor SDKs |
| Output | Semantic HTML, compact CSS, baked static files plus auto-detected dynamic holes |
The codebase is opinionated, and the opinions are enforced in code. Architectural rules live in src/__tests__/architecture/ as actual tests, so the structure that keeps the output clean can't quietly rot.
bun run build # tsc -b && vite build
bun test
bun run lintDig in: docs index · architecture · editor · server · publisher · plugin system
Instatic's interface uses Pixelarticons by Gerrit Halfmann. Thanks to Gerrit for a genuinely distinctive icon set, and for kindly letting us use it in an open-source project.
MIT. See LICENSE. No tiers, no open-core asterisks, no "contact sales."