Convex is the most interesting backend platform of the last few years, and the reactivity is not a marketing word — a query is a live subscription, and that changes how you write the front end. Pithy has no equivalent and will not pretend to. What it has instead is that nothing about it is Convex-shaped: the database is SQLite, the runtime is a Worker, and both are yours.
Choose Convex
When your app is a live document everyone is looking at.
Collaborative editors, dashboards that update themselves, multiplayer cursors, anything where a stale screen is a bug. Convex makes reactivity the default rather than something you bolt on with websockets, and the end-to-end TypeScript story is genuinely excellent.
Choose Pithy
When you would rather own the primitives than live inside a platform.
D1, R2, Vectorize, Workers and Durable Objects, provisioned into your Cloudflare account and addressable without us. The database is SQLite and the functions are Hono routes, so nothing you learn is specific to a vendor and nothing you build needs their runtime to run.
Where they overlap
If a feature is standard for a modern backend, assume both have it. We are not going to dress one up as a differentiator.
Both are TypeScript-first with real types across the boundary, and neither should claim that as a differentiator in 2026.
Convex has scheduled functions and crons; the kit has Cloudflare Workflows and cron triggers.
Store and serve files, with metadata. Table stakes both sides.
Both embed content and search it by meaning, both built in.
Convex has built-in auth plus Clerk, Auth0 and WorkOS integrations; the kit has passwordless auth as a capability.
Convex runs a local backend; Pithy runs the whole stack on Miniflare.
The difference underneath
Convex's bet is that the database should push. Queries are reactive by construction, the client subscribes rather than polls, and mutations are transactions the platform serializes for you. That is a genuinely better programming model for a whole class of app, and it is the reason to choose it.
The bet costs you the primitive. Your functions run in Convex's runtime against Convex's document store, and the reactivity is a property of that pairing rather than something you could reassemble elsewhere. The open-source backend under an FSL Apache-2.0 license makes self-hosting a real option — and that same license is why the kit's own audit package is FSL, so this is not a criticism so much as a shared position.
Pithy composes onto primitives that already existed and that Cloudflare sells to everyone: SQLite in D1, objects in R2, a Worker per request. Nothing about them is ours, which is exactly why removing us leaves a working application rather than an export job.
Feature by feature
| Feature | Convex | Pithy |
|---|---|---|
Runtime & data | ||
| Reactive queries pushed to the client Convex: the core of the product, and very good Pithy: not offered; a Durable Object is the closest thing and it is a different tool | Yes | No |
| Transactional mutations Convex: serialized by the platform Pithy: D1 batches are transactions; correctness is enforced by constraints rather than by a runtime | Yes | Partial |
| Relational SQL Convex: a document store with a relational data model on top Pithy: D1 is SQLite, queried with SQL | No | Yes |
| Full-text search Convex: built in Pithy: not offered | Yes | No |
| Vector search Pithy: Workers AI embeds, Vectorize indexes, D1 keeps the text | Yes | Yes |
| Scheduled and recurring functions Pithy: cron triggers and Cloudflare Workflows for durable multi-step work | Yes | Yes |
| Authoritative server-held session state Convex: the database is the shared state Pithy: a Durable Object per session, which is what turn-based games need | Partial | Yes |
Identity | ||
| Auth included Convex: built in, plus Clerk, Auth0 and WorkOS integrations Pithy: passwordless: magic link, email OTP, Google and Apple | Yes | Yes |
| Mobile-first bearer tokens Pithy: a short-lived JWT verified locally against published JWKS | Yes | Yes |
| Users in a database you query directly Convex: in the Convex document store Pithy: in the D1 your Worker already queries | Partial | Yes |
Money | ||
| Payments in the platform Convex: components and integrations; the rails are yours to wire Pithy: Apple, Google, Stripe, Paddle and Lemon Squeezy on one entitlement | No | Yes |
| One entitlement across every rail Pithy: gating code names the key, never the SKU | No | Yes |
| Per-user balance ledger Pithy: atomic, idempotent, overdraft-safe by CHECK constraint | No | Yes |
hyi187 | ||
| Authoritative turn-based sessions Convex: you could build it on the reactive store Pithy: a Durable Object with hidden per-player state and an alarm-driven deadline | Partial | Yes |
| Matchmaking Pithy: room codes, invites, a friend graph and a skill-bucketed queue | No | Yes |
| Skill rating Pithy: MMR per pool, which the open queue buckets on | No | Yes |
| Leaderboards with closing windows Pithy: daily through all-time, joinable against your own tables | No | Yes |
| Play closed-test roster and its clock Pithy: the fourteen-day Google Play requirement, tracked | No | Yes |
Trust & ownership | ||
| Runs in an account you already own Convex: Convex Cloud, or self-hosted if you operate it Pithy: provisioned into your Cloudflare account | No | Yes |
| Self-hostable Convex: the open-source backend, FSL Apache-2.0, converting to Apache-2.0 after two years Pithy: MIT, and there is nothing of ours to host | Yes | Yes |
| Audit trail across the backend Pithy: a queryable trail attributed to the actor, including the dashboard | No | Yes |
| Encrypted secret storage with rotation Convex: environment variables Pithy: a registry with two backends, per environment, with at-rest rotation | Partial | Yes |
| Humanity check as middleware Pithy: Turnstile, stacked on any route's real strategy | No | Yes |
| No per-seat pricing Convex: seats on Professional and above, plus usage Pithy: no seat dimension; Cloudflare bills what runs | No | Yes |
| No charges for egress Convex: bandwidth is a billed dimension Pithy: R2 does not charge egress | No | Yes |
Operations & DX | ||
| Schema migrations Convex: schema validation, with data changes as your own migration functions Pithy: one ordered registry per database, run per environment, with tested rollbacks | Partial | Yes |
| A preview environment per branch Convex: preview deployments Pithy: a worktree, a port block and ephemeral Cloudflare resources, torn down afterwards | Yes | Yes |
| Front end scaffolded into the backend Convex: you bring your own Pithy: `pithy ui add react` — one origin, one build, one deploy | No | Yes |
| A polished platform console Convex: polished, and the data browser is excellent Pithy: Cloudflare's own, and it is very good — the console the account already uses for Workers, D1, R2 and the logs | Yes | Yes |
| Panes for users, money and the trail Convex: a data browser over whatever you modeled; no pane knows what a subscription is Pithy: users, entitlements, purchases, subscriptions, support and the trail — and a user can be comped, revoked or signed out everywhere | Partial | Yes |
| Everything drivable by an agent Pithy: every command takes flags, requires no prompt and speaks `--json` | Partial | Yes |
The saffron tick marks where Pithy leads — not that the other column is absent. Every claim about Convex was checked against their own documentation on 2026-08-25; both products change, and this page is a snapshot rather than a maintained contract.
Where Pithy pulls ahead
D1 is SQLite, R2 is object storage, a Worker is a request handler. Cloudflare sells all three to everyone, and none of them needs Pithy to work. Removing the kit leaves a running application; leaving a platform whose reactivity is the product means rewriting the part that made it worth choosing.
Apple, Google, Stripe, Paddle and Lemon Squeezy resolving to one cross-rail entitlement, with every purchase row in your own database. On Convex that is an integration you build, and the buy-on-iOS-be-entitled-on-web case is entirely yours.
Authoritative sessions with hidden per-player state, matchmaking, skill rating, leaderboards, a correct ledger — and the Play closed-test clock nobody warns you about. Convex could host all of it; none of it is written for you.
Convex bills per developer on its paid tiers. Cloudflare bills what your Worker runs. For a team that grows faster than its traffic, those two curves diverge quickly.
Bandwidth is a Convex billing dimension; R2 does not charge egress. For anything serving media or user uploads, that single line dominates the comparison at scale.
Per-environment encrypted secrets with at-rest rotation, a queryable audit trail attributed to the actor, and Turnstile as stackable middleware. On Convex the first is environment variables and the other two are yours to build.
A relational data model over a document store is not the same as a relational database. D1 is SQLite: the queries, the constraints and the people who can write them all already exist.
Where Convex wins
A query that stays live is not sugar over polling — it removes a whole category of state-synchronisation bug. If your product is collaborative, this is the strongest argument on the page and it is theirs.
End-to-end types, a data browser that is genuinely pleasant, and a local backend that behaves like the real one. The kit is good here; Convex is better.
Mutations are serialized by the platform. Pithy gets correctness from database constraints, which works — but it asks you to know why the constraint is there.
Convex has it; the kit does not, and semantic search is not a substitute for typo-tolerant keyword search.
Convex is a single coherent product. A kit of capabilities composing onto five Cloudflare primitives is more surface, and more to hold in your head on day one.
The open-source backend is the same code as the cloud, under a license that converts to Apache-2.0 after two years. That is a better ownership story than most of this category offers.
Cost
Convex prices per developer seat on its paid tiers and then bills usage on top — compute, storage, database I/O, search and bandwidth. Cloudflare has no seat dimension at all: it bills requests, CPU time, rows read and written, and storage, and R2 does not charge egress. Which is cheaper depends entirely on whether your team or your traffic grows faster.
| Convex | Pithy | |
|---|---|---|
| Model | Per-developer seats plus usage | Usage only, on your own Cloudflare account |
| Team growth | Each developer adds cost | No per-seat dimension |
| Compute | Function calls and action compute hours | Requests and CPU time |
| Storage | Database, file and search index storage | D1 storage and R2 storage |
| Bandwidth | Egress is billed | R2 does not charge egress |
| Who bills you | Convex | Cloudflare, directly — there is no bill from us |
Both vendors set and change their own prices, and these dimensions were read on 2026-08-25. Convex's pricing page and Cloudflare's Model your own shape before believing either of us.
The data is the easy half. A Convex document store with a relational model maps onto SQLite tables more cleanly than most document stores do, and the schema you already declared is most of the work already done.
The hard half is reactivity. Every place a component subscribed to a live query becomes something you fetch, and something that decides when to fetch it again. If your app leaned on that, you are not migrating a backend — you are rewriting the front end's relationship with it, and you should price that honestly before starting.
If you were using Convex mostly as a typed database with scheduled functions, the move is small. If you were using it as a reactive platform, it is not.
Convex is a better product than this page can talk you out of, for the apps it is built for. If a stale screen is a bug in your product, choose it. The case for the kit is for everything else: an app that needs payments, games infrastructure, secrets and an audit trail more than it needs live queries — and a team that would rather own Cloudflare primitives than the best version of somebody else's platform.