cms0 is a type-first content system for JavaScript and TypeScript apps.
You define content in code, publish that shape into cms0, edit content in the admin UI, and read the result from your app through @cms0/cms0.
If you are setting up cms0 for the first time, use Start here. It connects the workspace, schema, editor, and app in one pass.
How cms0 fits together
cms0 has four main parts:
@cms0/cms0: the package you install in your app. It provides the typed client and thecms0CLI.@cms0/admin: the admin app for self-hosted teams.- The hosted workspace: the cms0 app for organizations, projects, environments, billing, and limits.
- Your database and storage: Postgres plus filesystem or S3-compatible storage for saved content, snapshots, and assets.
Hosted and self-hosted setups use the same core loop:
Create or open a runtime
Use a hosted project environment or a running @cms0/admin runtime.
Create an API key
Use the endpoint and key from that runtime in your app and CLI config.
Define content with TypeScript
Call cms0<T>() from your app schema file and keep the shape stable once content is live.
Publish and edit
Run cms0 dev locally or cms0 build in CI, then edit the published schema in cms0.
Read content from your app
Use the typed accessors returned by cms0<T>().
Pick a path
- Use Start here if you want the shortest working path.
- Use Hosted workspace if you already have an account and need to find projects, environments, API keys, or endpoint URLs.
- Use Self-hosting if you run
@cms0/adminyourself. - Use App integration if you are wiring cms0 into an existing app.
- Use License if you need to understand which parts are Apache-2.0 and which parts are AGPL-3.0-or-later.