the headless CMS that runs on your Postgres

schema-as-code, draft-vs-published clarity, and content in plain Postgres tables. open source, Apache-2.0, self-host free forever.

pepper — migration

pepper migrate --from hygraph

reading hygraph schema and fields

mapping to chili.config.ts (schema-as-code)

writing migrations + RLS policies

generated an import plan for review

done. your content runs on your Postgres now.

a CMS that is just your Postgres

schema-as-code, REST-first delivery, and a Studio that stays out of your way.

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.

rest today, graphql where it fits

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.

self-host, free forever

Apache-2.0 core, no feature paywall. one container plus your Postgres. deploy it on a $40 box and keep your data.

multi-tenant on row-level security

tenant isolation is enforced in Postgres with FORCE ROW LEVEL SECURITY, not in app code you have to trust.

tiptap editing, draft until you publish

a real rich-text editor on Tiptap. every save is a draft; nothing goes live until you publish it.

flat studio, fast editing

the Studio keeps gradients out of data surfaces so repeated editing stays calm. your content path is one app container plus Postgres.

read your content three ways

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.

bash
curl https://api.chilicms.dev/v1/posts \
  -H "Authorization: Bearer $CHILI_TOKEN"

the receipts

  • SQLquery your content directly
  • 1app container plus Postgres
  • $0self-host, free forever
  • 100%your data, in your Postgres

how we compare

a teaser, not the whole story. the full vs-* pages mark every place we lose, not just where we win.

how we compare — a teaser, not the whole story. the full vs-* pages mark every place we lose, not just where we win.
capabilityChiliCMSContentfulHygraph
self-host, free foreverApache-2.0 core, no feature paywall
your content in real Postgresquery it with psql, no proprietary store
schema-as-code in version controlchili.config.ts is canonical; the GUI is generated
starting priceper project, per month$0$300$299
visual page builderwe are structured-content only, on purpose

frequently asked questions

Is ChiliCMS really free to self-host?

Yes. The core is Apache-2.0 and self-host is free forever, with no feature paywall, no seat caps, and no CLA. Enterprise add-ons live under a separate BSL licence that auto-converts to open source after four years.

Does it run on my existing Postgres?

It runs on your Postgres 16+ with row-level security forced on every tenant table. No separate datastore, no Redis; the content path is one app container plus your database.

Can I migrate off Hygraph or Strapi?

Run pepper migrate --from hygraph. It reads your models and fields, writes chili.config.ts plus the Postgres migrations and RLS policies, then generates an import plan you review before cutover.

How does draft-vs-published work?

Every save is a draft until you publish it. Published content carries a dedicated green state with a label, so editors always know what is live without reading colour alone.

Can I define my schema in code?

Yes. Your schema is canonical in chili.config.ts and the Studio generates the editing UI from it. The GUI never owns the schema, so your content model stays in version control and ships in pull requests.

run your content on your own postgres

schema-as-code, draft-vs-published clarity, self-host free forever. Apache-2.0, no CLA, no feature paywall.