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.

the receipts

  • 1 wkschema + content migrated
  • SQLquery your content directly
  • $0self-host, free forever
  • RESTstable public delivery path

leave hygraph in a week, keep your graphql

pepper reads your hygraph schema, writes it to chili.config.ts as schema-as-code, generates the migrations and RLS policies, and copies your entries. you review the diff in a pull request, then ship.

migrate --from hygraph

bash
# point pepper at your hygraph project, get a chili.config.ts back
pepper migrate --from hygraph \
  --project $HYGRAPH_PROJECT \
  --token $HYGRAPH_MGMT_TOKEN

# review the generated schema-as-code, then apply it
pepper push --apply

what you get when your content runs on your postgres

schema-as-code, REST-first delivery, and a bill that tracks your workspace, not your traffic.

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 hygraph, honestly

we mark where we lose. content federation, a mature managed CDN, and SOC 2 today are real Hygraph wins.

chilicms vs hygraph, honestly — we mark where we lose. content federation, a mature managed CDN, and SOC 2 today are real Hygraph wins.
capabilityChiliCMSHygraph
you own the databasereal Postgres tables you can psql, index, and back up yourself
open source, self-host freeApache-2.0 core, no feature paywall, no seat caps
graphql content APIquery content as a graph
rest + sdk from one schemaREST ships today; the SDK is generic while generated clients mature
schema-as-code in version controlchili.config.ts is canonical; the GUI is a generator
pricing keyed to workspace shapemembers, environments, locales, entries — never API calls
predictable bill at scalethe renewal that sent you here
one-command migration inpepper migrate --from hygraph
content federation / remote sourcesstitch external APIs into the content graph — Hygraph's core bet
mature managed global CDNedge cache tuned over years; ours is your CDN in front of your Postgres
SOC 2 / enterprise compliance todayHygraph ships it now; ours is on the Enterprise roadmap
years of production hardeningHygraph has run at scale longer than we have

where hygraph still wins

content federation. stitching external APIs into one content graph is Hygraph's core bet, and we do not match it today. if your graph federates several remote sources, that is a reason to stay.

a mature managed CDN. Hygraph runs an edge cache tuned over years. ours is your CDN in front of your Postgres, which is simpler and yours, but it is not a managed global edge product.

compliance and tenure. Hygraph ships SOC 2 now and has run at scale longer than we have. our SOC 2 report is on the Enterprise roadmap, not in your hands yet. self-host the Apache-2.0 core and test us against your workload before you commit.

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.

hygraph migration questions

Will my Hygraph GraphQL queries keep working?

Partly. GraphQL covers the built-in content types today, while custom migrated models use REST and the SDK helper. The enums and filter arguments differ, and `pepper migrate` prints the exact diffs it could not map one-to-one so you can fix them before you cut over.

What does pepper migrate --from hygraph actually move?

It reads your Hygraph models and fields with a management token, writes them to chili.config.ts as schema-as-code, generates the Postgres migrations and row-level-security policies, and copies your entries. You review the generated schema in a pull request, then run pepper push --apply. A typical project lands in about a week.

Does ChiliCMS do content federation like Hygraph?

Not yet, and this is a real reason to stay on Hygraph. Remote sources and content stitching are Hygraph's core bet, and we do not match them today. If your content graph federates several external APIs, Hygraph still wins that job.

Where does my content live after I migrate?

In your own Postgres 16+, in plain tables you can query with psql and back up yourself. There is no proprietary store and no hosted lock-in for the self-hosted edition. If you stop paying us, the Apache-2.0 core and your data stay yours.

Why is the bill predictable?

We charge for workspace shape, not API traffic. Members, environments, locales, and entries set your tier; reads and writes are never metered. The renewal quote that 3x'd on you does not happen here.

Is it production-ready?

The core is usable, but you should test it against your workload before you commit. Be honest with yourself about the gaps: we are younger than Hygraph, our managed CDN story is thinner, and SOC 2 is on the Enterprise roadmap rather than shipped.

run your content on your own postgres

Migrate off Hygraph in a week, keep GraphQL, and own your data. Apache-2.0, self-host free forever.