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.
schema-as-code, draft-vs-published clarity, and content in plain Postgres tables. open source, Apache-2.0, self-host free forever.
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.
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.
# 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# familiar graph shape, backed by your Postgres
query Posts {
posts(where: { stage: 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")schema-as-code, REST-first delivery, and a bill that tracks your workspace, not your traffic.
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.
we mark where we lose. content federation, a mature managed CDN, and SOC 2 today are real Hygraph wins.
| capability | ChiliCMS | Hygraph |
|---|---|---|
| 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 |
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.
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.
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.
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.
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.
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.
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.
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.
Migrate off Hygraph in a week, keep GraphQL, and own your data. Apache-2.0, self-host free forever.