Why Chonk, not CiviCRM
Same job nonprofits have always needed done. Built thirty years later, with everything we've learned since.
CiviCRM got a generation of nonprofits off spreadsheets, and we respect it for that.
But it carries decades of accreted schema, a PHP/MySQL stack, and an admin that
feels its age. Chonk is a clean-slate rebuild for how nonprofits actually work
in 2026 โ API-first, AI-native, and self-hostable in a single docker compose up.
The honest comparison
| Dimension | CiviCRM | Chonk |
|---|---|---|
| Data model | Legacy schema, decades of accretion, custom fields in per-entity tables. | Clean-slate modern schema. Custom fields in one JSONB column, no table sprawl. |
| API | Bolt-on APIv4, uneven coverage. | API-first. Every feature is an OpenAPI endpoint before it's a screen. |
| AI | None. | Native: ask-your-CRM RAG, semantic search, donor scoring, MCP tools for agents. |
| Front end | Server-rendered, dated admin. | React 19 admin with builders for email, journeys, forms, and campaigns. |
| Payments | Processor plugins of varying quality. | Money is integer cents everywhere. Live Stripe subscriptions adopted, not recreated. |
| Hosting | LAMP stack, PHP, MySQL. | One docker-compose. Go + Postgres. Cloud-agnostic ports & adapters. |
| Migration | You're already here. | Idempotent importer with a red/green parity gate that blocks a bad cutover. |
We don’t copy CiviCRM’s data model
This is the core design decision. Chonk treats CiviCRM as a use-case reference and a migration source โ never a schema to replicate. Custom fields live in one JSONB column driven by definitions, not a sprawl of per-entity tables. Money is integer cents everywhere. The result is a database you can actually reason about.
Nothing is gated
There’s no “community edition” with the good parts removed. Self-hosting Chonk gives you every module โ fundraising, memberships, events, commerce, communications, AI, portal, volunteers, platform. The open-core line is about hosting and support, not features.
Switching is safe
The migration importer is idempotent and ends in a red/green parity gate โ if the migrated numbers don’t match your source, cutover is blocked. Live Stripe subscriptions are adopted, not recreated, so recurring donors keep charging without interruption. See how migration works โ
Ready to let the big cat eat your stack?
Spin up Chonk on your own box with docker-compose, or let us host it. Either way, you get the whole feature surface โ not a stripped-down "community edition."