← All comparisons

Concile vs Convex

Two reactive TypeScript backends with the same function model. The differences are where they run, what they store, what they ship, and what you pay.

Checked against Convex's public docs and pricing on Mon Sep 21 2026. Spotted something out of date? Open an issue.

The short version

What is the same

We modeled the reactive system of Concile on the public architecture of Convex on purpose. A query records the index ranges it reads. A mutation records its writes. A subscription re-runs only when a committed write intersects its read ranges. This single mechanism provides serializable transactions and live results. There is no cache to invalidate. You know how to think about Concile if you know Convex.

Concile is a clean-room build. We built it from that public documentation. It is not a fork. It does not use Convex code.

Side by side

ConcileConvex
Live results from your own server codeYes, read-set preciseYes, cached, subscribable queries
Backend is plain TypeScript functionsYesYes
Self-host the whole productYes. One process, one command.Partly. Open-source backend. The cloud is the product.
Single binary with no database to runYes. Use concile build.No
Swap the database without touching app codeYes. SQLite or Postgres.No. Fixed store.
Durable workflows with rollbackYes. Saga compensation.Partly. Workflow component.
Offline writes that survive a reloadYes. Durable outbox, exactly once.Partly. Optimistic updates only.
Full-text and vector searchNot built yetYes, both built in
Hosted cloudNoneYes
PriceFree to self-hostFree tier. Pro $25 per developer per month. Enterprise from $2,500 per month.

Where Convex is ahead

Where Concile is ahead

Performance

We benchmarked both on the same host. Each ran in its own Docker container. They were driven by their native WebSocket clients. We used matched test code.

metricConcileConvex
reactive propagation p50, 50 subscribers8.6 ms13.4 ms
reactive propagation p9913.7 ms27.3 ms

They are in the same ballpark. The full scorecard contains every caveat. You can read it on the Performance page.

Moving from Convex

The concile migrate --from convex command rewrites imports. It renames the functions directory. It scaffolds concile.config.ts if you use crons. It writes a report of what it could not do. You will meet these API differences:

The full list is in Migrate from Convex. It includes a fix for each issue.

When to pick Convex

Pick Convex if you want a hosted product. It has built-in search and a component marketplace. You can buy compliance reports. You must be fine with usage fees and per-seat pricing. The cloud is the primary path.

When to pick Concile

Pick Concile if you want to run the whole backend yourself. You can run it on your own hardware or cloud. It runs as one process or one binary. You can choose SQLite or Postgres. Nothing is metered. The software does not phone home. Pick it if you want durable workflows and a real offline story today. You must be willing to wait for search.