Instatic is a free, open source content management systems (cms) project written in TypeScript and released under MIT. It has 8,691 GitHub stars, 802 forks and 134 open issues, and was last pushed 4 days ago. On this registry it ranks #10 of 47 tracked projects in Content Management Systems (CMS), with 5 head-to-head comparisons available. It gained 45 stars over the last 3 tracked days.

What is Instatic?

Instatic is an MIT-licensed, TypeScript-built visual CMS that lets designers, developers, and small teams self-host their entire website stack — editor, content engine, and publisher — on a single Bun server and publish clean static pages.

What it is

Instatic is a self-hosted content management system in which the visual editor, content engine, media library, authentication, forms, plugins, and publisher all run inside one Bun server. It is written in TypeScript and released under the MIT licence, and its topic list — cms, page-builder, static, website, css — describes its shape accurately. The pages it produces are plain semantic HTML with compact CSS. No framework runtime, no builder attributes, and no div soup are left behind in the output; the site loads like a static file because, most of the time, it is one.

The concrete problem it addresses is stack assembly. A modern website usually means stitching together a headless CMS, a framework, a host, a form service, an analytics vendor, and an image CDN, each with its own bill, dashboard, and outage risk. Instatic replaces that arrangement, and the proprietary products it is pitched against, with a single self-hosted application backed by SQLite or Postgres. The visual editor is a real canvas rather than a form with a preview pane: several breakpoint frames can sit side by side and be edited together, so a change on the desktop frame is reflected in the mobile frame in the same view.

Key capabilities

  • Canvas-based visual editor with side-by-side breakpoint frames and a live mode for working on the running site.
  • Content engine with users and roles built in, covering content, media, and database in one system.
  • Plugin system documented in docs/features/plugin-system.md, extending functionality without leaving the server.
  • Publisher that emits clean semantic HTML and compact CSS with no framework runtime or builder attributes in the page.
  • Storage backed by SQLite or Postgres, selectable at deploy time.
  • Single Docker image published as ghcr.io/corebunch/instatic:latest, runnable with compose.prod.yml and compose.sqlite.yml.
  • One-click Railway templates for SQLite or Postgres, a Render deployment guide, and a VPS guide using Caddy for TLS.

Who uses it and how

  • A single blogger, portfolio owner, or small business runs it on Railway with SQLite, where the template generates secret keys, attaches a storage volume, and configures health checks without opening a terminal.
  • Teams with multiple authors choose the Postgres template for managed backups and room to grow.
  • Groups that prefer Render services deploy there with disks or managed Postgres, following the deployment guide.
  • Self-hosters run it on their own VPS or hardware with Caddy TLS and a custom backup policy, using the Docker image directly.
  • Updating is a redeploy of the latest image; the database and uploads stay on attached storage, so the container can be replaced without rebuilding the site.

Getting started

Railway is the fastest route: pick a SQLite or Postgres template, hit deploy, and the environment is provisioned on its own. To run it manually, use the published image with the production compose files: INSTATIC_IMAGE=ghcr.io/corebunch/instatic:latest docker compose -f compose.prod.yml -f compose.sqlite.yml up -d.

How it compares

Instatic positions itself directly against Webflow, Framer, and WordPress. Webflow and Framer are proprietary hosted products, while Instatic is MIT-licensed and self-hosted, so the site, its database, and its uploads stay on infrastructure the operator controls. Against WordPress it trades the older plugin and theme ecosystem for a Bun-based stack that outputs static pages rather than a dynamically rendered PHP site, and it collapses per-service bills for CMS, host, forms, analytics, and image handling into a single server.

When to use it — and when not to

A self-hoster must operate the Bun application itself, plus a database (SQLite or Postgres), a storage volume for uploads, and, on a VPS, TLS, typically through Caddy. The README describes the project as "early on purpose," which is the clearest signal of its limitation: the roadmap is still being filled in and the feature surface is young. Teams that need a mature theme and plugin marketplace, or that cannot run their own database and storage, should probably not pick it up yet.

project readme (upstream, from github) — read inline

Instatic

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.

CoreBunch/Instatic | Trendshift

Release GitHub stars License: MIT Runtime: Bun TypeScript

One-Click Deploy · Quick Start · Docs · Plugins · Roadmap


Watch the Instatic interface demo on YouTube

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.


Deploy in one click

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.

One minute to live. Unedited.


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 SQLite or Postgres Teams that prefer Render services, disks, and managed Postgres Guide →
Docker / VPS SQLite or Postgres Bring-your-own server, Caddy TLS, custom backup policy Guide →

SQLite is the right default for most sites. Reach for Postgres when you've got a team of authors or want managed database backups.

Updating is just a redeploy

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 -d

Full guides for VPS, Postgres, HTTPS with Caddy, Render, and backups are in docs/deployment.


One tool, the whole life of a site

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.

🎨 Design

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.

  • Color tokens that generate their own shade scale. Define one brand color, get the full set of tuned tints and shades automatically.
  • Type scales that are fluid and mathematical. One ramp that scales with the viewport, instead of forty hand-picked font sizes you have to keep in sync.
  • Spacing scales so every page and every breakpoint keeps the same rhythm.
  • A utility-class generator that emits locked, generated classes into one small 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.

🧱 Build

  • Modules are the building blocks: containers, text, images, buttons, video, lists, links, SVG, forms. Drag them onto the canvas and nest them however you want.
  • Visual Components are reusable pieces with typed parameters and named slots. A parameter can be a string, number, boolean, color, image, URL, rich text, an enum, or a whole slot of content. Edit the component once and every instance on the site updates. Components that would reference themselves are blocked before they happen, so nothing eats its own tail.
  • Templates handle the shared chrome. One layout for the whole site, separate layouts per post type, and a real 404 page you design yourself. Content flows into an outlet, so a header and footer get written once and wrap everything.
  • Loops repeat a layout over a collection: your posts, your pages, your media, or anything a plugin exposes as a source. Give a loop a couple of variants and it alternates between them as it goes. Good for post lists, product grids, galleries.
  • Forms that belong to your CMS. Build a form out of semantic fields and the submissions land in your own data tables. Instatic can read the fields you placed and create the matching table for you. No third-party form service, no embed, no monthly fee for a contact form.
  • An AI agent that actually edits the page. Describe what you want and it builds it on the canvas as real, editable nodes, not a screenshot or a wall of code. It writes semantic HTML for structure and CSS for style, through the same import pipeline you use when you paste markup. A 35-tool Site scope builds pages; a 15-tool Content scope edits entries. Bring your own model: Claude, OpenAI, OpenRouter, or local Ollama. Your key, your model, your bill.
  • Imports that hold up. Paste raw HTML and get editable nodes. Or drop a whole static site — HTML, CSS, images, fonts — and Super Import turns it into pages, style rules, design tokens, and media. Every conflict is shown to you before anything is written, and the entire import is a single undo.

🗂 Manage

  • One content model under everything. Pages, posts, components, custom collections, and any structured table you invent all live in the same store: 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.
  • A Data workspace where you design your own collections. At /admin/data you create custom post types and custom data tables with their own fields, then work the rows in a s

readme truncated — read the full docs on github

Frequently asked questions

Is Instatic free to use?

Instatic is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does Instatic do?

The open-source alternative to Webflow, Framer and WordPress. Agentic self-hosted visual CMS outputting clean static pages. Users, roles, plugins, content, data

What is Instatic written in?

Instatic is primarily written in TypeScript. Its source is publicly available at https://github.com/CoreBunch/Instatic, and it has 8,691 GitHub stars.