postgres-native, not postgres-backed
your content lives in real Postgres tables you can query, index, and back up. no proprietary store, no lock-in — point psql at it and read.
put the model in git, store entries in real Postgres tables, and keep the Studio generated from code instead of clicks.
pepper migrate --from strapi
reading strapi content types
mapping fields to chili.config.ts
flagging plugin-specific fields for review
generated an import plan for review
done. your content is ready for Postgres.
we print our losses in the same table as our wins. if a row matters to you and we lose it, you should know before you switch.
| capability | ChiliCMS | Strapi |
|---|---|---|
| schema lives in version controlschema-as-code in chili.config.ts; the GUI is generated from it | ||
| real Postgres tables you can querypoint psql at your content; no abstracted content store | ||
| delivery APIs from one modelREST today, GraphQL for built-ins, and a generic SDK helper while generated clients mature | ||
| tenant isolation enforced in the databaseFORCE ROW LEVEL SECURITY per table, not app-code you have to trust | ||
| draft-vs-published as a first-class stateevery save is a draft; published gets a dedicated green + label | ||
| one-command migration off the incumbentpepper migrate --from hygraph today; --from strapi in beta | ||
| plugin marketplace and ecosystem maturityStrapi has a 5-year plugin ecosystem; ours is new and small | ||
| self-managed cloud product you can buyStrapi Cloud is GA; ChiliCMS Cloud is in private beta | ||
| self-host free forever, no feature paywallApache-2.0 core; enterprise add-ons are BSL, free under 10 seats | ||
| direct SQL access | ||
| starting price (managed) | $29/mo | $15/mo |
your model lives in chili.config.ts and your content lives in tables you can query. the Studio is generated from the schema, not the other way around.
your content lives in real Postgres tables you can query, index, and back up. no proprietary store, no lock-in — point psql at it and read.
REST is the stable delivery path today. GraphQL covers the built-in content graph, and the SDK gives a typed helper while generated per-model clients mature.
Apache-2.0 core, no feature paywall. one container plus your Postgres. deploy it on a $40 box and keep your data.
tenant isolation is enforced in Postgres with FORCE ROW LEVEL SECURITY, not in app code you have to trust.
a real rich-text editor on Tiptap. every save is a draft; nothing goes live until you publish it.
the Studio keeps gradients out of data surfaces so repeated editing stays calm. your content path is one app container plus Postgres.
rest ships from the same model today, graphql covers the built-in content types, and the sdk gives a generic typed helper while generated per-model clients mature.
curl https://api.chilicms.dev/v1/posts \
-H "Authorization: Bearer $CHILI_TOKEN"query Posts {
posts(status: PUBLISHED) {
id
title
publishedAt
}
}import { createClient } from "@chilicms/sdk"
const chili = createClient({ baseUrl: "https://api.chilicms.dev" })
const posts = await chili.list<{ title: string }>("posts")we are months old and Strapi is five years in. here is what they do better right now, in plain words.
True. Strapi has shipped since 2021 and has hundreds of community plugins, providers, and integrations. ChiliCMS is months old; our plugin surface is small and our marketplace does not exist yet. If your build depends on an existing Strapi plugin, check our list before you switch.
Mostly true. Strapi Cloud is generally available and you can swipe a card right now. ChiliCMS Cloud is in private beta. Today the honest answer is self-host: one container plus your Postgres. If you need a vendor-run plane this quarter, Strapi Cloud ships and ours does not.
Also true. Five years of adoption means more tutorials, more hires who already know it, and more answered questions. We are early. Our bet is that schema-as-code and a calmer Studio earn the switch; we will not pretend the community gap is closed.
we charge for workspace shape — members, environments, locales, entries. no per-call metering, no surprise bills. self-host the Apache-2.0 core free, always.
self-host or evaluate, no card
solo devs and small product teams
funded startups and mid-market teams
regulated and 50+ seat orgs
enterprise features (SSO, audit log, SAML) are BSL-licensed — free to self-host under 10 seats, paid above. the core stays Apache 2.0.
The usual reasons we hear: the v3 to v4 to v5 migrations broke plugins and ate weekends, the admin UI feels a decade old, and the content store is hard to query directly. ChiliCMS keeps the schema in version control and puts your content in real Postgres tables you own. If Strapi works for you, stay; we only win the people it burned.
A --from strapi importer is in beta now. It reads your content types, maps them into chili.config.ts, and writes the migrations plus row-level-security policies. The Hygraph path is further along; the Strapi path should be tested against your own export before you commit.
Yes. ChiliCMS runs on your Postgres 16+ with row-level security on every tenant table. No separate datastore, no Redis. The bill stays one app container plus the database you already know how to operate.
Yes. Your content model is canonical in chili.config.ts and the Studio generates the editing UI from it. You review a schema change as a pull request, not as a GUI you have to undo. Strapi can describe types in code too, but its content-type builder writes back into the database, so the GUI stays the source of truth.
Self-host is free forever under Apache-2.0, with no feature paywall and no seat caps. Managed Pro starts at $29 per project per month; Team is $199 and adds RBAC, audit log, and scheduled publishing. The Enterprise floor is printed publicly, so there is no contact-us wall under $5k.
self-host the Apache-2.0 core free, or start managed in 60 seconds. the strapi importer is in beta now.