put your sanity dataset in your postgres

keep the editor calm, move content into tables you own, and use SQL alongside the delivery API. Apache-2.0 core, self-host free forever.

pepper — migration

pepper migrate --from sanity

reading sanity schemas and dataset shape

mapping portable text fields for review

writing chili.config.ts + migrations

generated an import plan for review

done. your content is ready for Postgres.

the difference is who owns the database

Sanity stores your content in their Content Lake. ChiliCMS stores it in your Postgres, so you can query, index, and back it up yourself.

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.

chilicms vs sanity, line by line

green check = we have it, habanero x = we lose this one, dash = limited or behind a tier. we kept our losses in the table.

chilicms vs sanity, line by line — green check = we have it, habanero x = we lose this one, dash = limited or behind a tier. we kept our losses in the table.
capabilityChiliCMSSanity
where your content livesreal Postgres tables you own vs Sanity's hosted Content Lake
self-host the full product, freeApache-2.0 core, no feature paywall vs Sanity's hosted-only backend
query content with SQLpoint psql at your tables vs GROQ against the hosted API
delivery APIs from one schemaREST today, GraphQL for built-ins, and a generic SDK while generated clients mature
row-level security per tenantFORCE ROW LEVEL SECURITY in Postgres, not app code you trust
price scales with workspace shape, not API callsmembers, environments, locales, entries vs metered API requests + bandwidth
published Pro priceper project, flat$29/mo$15/seat
real-time collaborative editing todaySanity ships live multiplayer now; our CRDT collab lands in v1.5
GROQ-style queriesSanity's query language is genuinely good; we bet on SQL + GraphQL instead
years of production hardeningSanity has shipped since 2017; we are younger and say so
structured portable-text editor maturityTiptap is solid; Sanity's Portable Text tooling is deeper today

the numbers we will stand behind

SQLquery your content directly$0self-host the full core, forever$1.5kenterprise floor, printed publicly2017sanity has shipped since; we are younger

move your dataset, then read it from your stack

one command migrates your Sanity dataset into your own Postgres. after that, your content is a table you can query with SQL, REST, or the generic SDK helper. GraphQL covers built-in content types today.

bash
# one command reads your Sanity dataset and writes
# chili.config.ts + Postgres migrations with RLS policies
pepper migrate --from sanity --dataset production

pricing that scales with your content, not your traffic

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.

  • Free

    self-host or evaluate, no card

    $0forever
    • 1 project
    • 2 members
    • 1 environment
    • 1 locale
    • 10k entries
    • community support
    Start free
  • Pro

    solo devs and small product teams

    $29/ project / mo
    • 3 environments
    • 5 members
    • 3 locales
    • 100k entries
    • custom Studio domain
    • email support
    Start self-hosted
  • Team

    most teams

    funded startups and mid-market teams

    $199/ project / mo
    • 5 environments
    • 15 members
    • 10 locales
    • 1M entries
    • RBAC, audit log, scheduled publishing
    • preview tokens, priority support
    Start self-hosted
  • Enterprise

    regulated and 50+ seat orgs

    $1.5k–$8k/ mo, annual
    • unlimited everything
    • SSO / SAML, SCIM
    • SOC 2 report, custom DPA
    • 99.95% SLA, multi-region
    • dedicated Slack, on-prem option
    Email sales

enterprise features (SSO, audit log, SAML) are BSL-licensed — free to self-host under 10 seats, paid above. the core stays Apache 2.0.

honest questions about leaving sanity

Is ChiliCMS just a Sanity clone?

No. Sanity is a hosted backend with GROQ and a great real-time editor. ChiliCMS is a Postgres-native CMS you run on your own infrastructure under Apache-2.0. The split is ownership: Sanity keeps your content in their Content Lake, we keep it in your database.

When would Sanity be the better pick?

If you want real-time multiplayer editing today, lean on GROQ, or prefer a managed backend with years of production scale behind it, Sanity is the safer call right now. Our collaborative editing lands in v1.5, and we are younger. We would rather you read that here than find it after migrating.

Can I move my Sanity dataset over?

Run pepper migrate --from sanity. It reads your dataset, writes a chili.config.ts schema, and generates Postgres migrations with row-level security. Portable Text maps to Tiptap content; we flag any field that needs a manual review instead of dropping it silently.

How does pricing compare?

Sanity meters API requests and bandwidth, so a traffic spike can move your bill. ChiliCMS charges for workspace shape: members, environments, locales, and entries. The Enterprise floor is printed publicly at $1.5k per month, with no contact-us wall under that.

What about real-time collaboration?

This is a place Sanity beats us today. Sanity ships live multiplayer editing now; our CRDT collaboration on Tiptap and Yjs is scheduled for v1.5. Until then, every save is a draft and publishing is explicit, so two editors will not silently overwrite each other.

run your content on your own postgres

Migrate your Sanity dataset with one command, keep your data in a database you own, and self-host the Apache-2.0 core free forever.