Build and ship websites your whole team can edit
A modern web framework paired with a headless CMS. Developers build with components; editors compose pages with them.
Root.js
One workspace for everyone who touches the website
Marketers, designers, translators and developers work on the same pages, without stepping on each other.
Visual editing
Build pages from your own components
Stack modules, fill in fields and watch the preview update as you type.
Releases
Ship launches on schedule
Group edits across pages into a release and publish them together at a set time.
Localization
40+ locales
Translate every field and preview each market.
Permissions
Roles per collection
Editors edit. Publishers publish.
Insights
See what every change did
Track publishes, page performance and who changed what, in one dashboard.
Version history
Undo anything
Every save is a restorable version.
Developers
Any component can become a module
Describe fields in a schema file. Root.js generates the editor UI and TypeScript types.
-
Plain TSX. Modules are regular Preact components with typed props.
-
Presets included. Ship prefilled variants so editors never start from blank.
-
Static or SSR. Render at build time or per request, route by route.
import {schema} from '@blinkk/root-cms'; // Fields editors fill in for this module.export default schema.define({ name: 'Quote', fields: [ schema.string({id: 'quote', translate: true}), schema.string({id: 'author'}), schema.image({id: 'avatar'}), ],});
How it works
From repo to published page in an afternoon
No plugins to wire together and no separate CMS to host. Root.js ships the framework and the editor in one package.
-
01
Build components
Write Preact components and describe their props with a schema. Types are generated for you.
-
02
Compose pages
Editors stack templates into pages, fill in fields and preview every change on the real site.
-
03
Publish instantly
Hit publish and the page is live. Schedule releases, roll back or localize without a deploy.
Performance
Fast by default, everywhere
Pages render on the server and ship zero JavaScript unless a module asks for it.
-
Zero JS by default. Interactivity is opt-in, one island at a time.
-
Edge cached. Static pages are served from a global CDN.
-
Core Web Vitals. Green scores out of the box, without tuning.
Developers
A framework that stays out of your way
Write components in TSX. Root handles routing, rendering and i18n.
-
Static or SSR
Prerender at build time or render on request. Per route.
-
Custom modules
Any component can become a module with a schema file.
-
Typed content
Generate TypeScript types straight from your schemas.
-
AI-assisted editing
Draft, rewrite and translate copy without leaving the editor.
Watch a page go from draft to live
Start building your next site today
Free for small teams. Upgrade when you are ready to scale.