Liveblocks vs. Convex for collaborative apps
Liveblocks is a realtime collaboration platform that allows you to build multiplayer applications where users and agents can work together. It provides a sync engine that powers shared documents, text editing, presence, and more. Convex is a reactive database and back end: you write queries and mutations in TypeScript, and subscribed clients update automatically when the data they read changes.
Which should you choose?
Convex and Liveblocks solve different problems. Convex is where your records and business logic live, whereas Liveblocks is how people edit artifacts together.
Choose Liveblocks when several people work on the same document, canvas, or board at once, and their edits need to merge without overwriting each other, and when you want comments, notifications, and presence around that document. Choose Convex when you want reactive queries and transactional functions at the center of your back end, such as a task list that updates for everyone the moment a mutation commits. Convex also has a ProseMirror component for collaborative text, so if your app already runs on Convex and only needs a small Tiptap or BlockNote document, that may be enough. Convex has no built-in cursors or selections, no comments or notifications, and a 1 MiB cap per document, so a shared canvas or a long document usually needs more than Convex alone. Many products use both services together.
Compare the responsibilities
| Area | Liveblocks | Convex |
|---|---|---|
| Core model | Rooms and shared documents in Storage. | Database tables with queries and mutations. |
| Realtime updates | Document changes, presence, and broadcast events. | Reactive query results that rerun when the data they read changes. |
| Conflict resolution | CRDT-based. Concurrent edits to objects, lists, maps, and text merge automatically. | Serializable transactions. Conflicting mutations are retried, and the last one to commit wins. |
| Presence | Built in. Cursors, selections, and who is online, per room. | Online list only, through a presence component. No cursors or selections. |
| Text editing | Built in, with Tiptap, BlockNote, Lexical, and more. | ProseMirror sync component for Tiptap and BlockNote. |
| Document size | Per-room limit set by your plan for Storage. No size limit for Yjs. | 1 MiB per database document. |
| Comments | Comments and Notifications products with components and hooks. | Not included. Model threads and notification delivery yourself. |
| Ready-made UI | Cursors, avatar stacks, comments, and notifications. | A basic face pile in the presence component. Everything else is built on query results. |
| Authentication | Your server issues access tokens using your existing auth. | Convex Auth or a third-party provider, checked inside each function. |
| Self-hosting | Paid add-on on the Enterprise plan. | Open source. Run the back end on your own servers. |
| The main question | Which parts of your app should people edit together? | Which data and business logic belong in your back end? |
Can I use Convex with Liveblocks?
Yes. Keep project records and business rules in Convex and editable documents in Liveblocks. There is no built-in connector between the two, so this is an architecture decision rather than an integration: each piece of data gets one source of truth, and a change to one system is never part of a transaction in the other. Use Liveblocks server-side editing or webhooks when your back end needs to read or write a document.
| User action | Source of truth | What updates |
|---|---|---|
| Reassign a project | Convex mutation. | Every subscribed project query. |
| Edit a paragraph | Liveblocks editor integration. | Everyone's copy of the document. |
| Publish a document summary | Copy in Convex. | Search or reporting views. Expect a short delay. |
Store the Liveblocks room ID and the revision you copied on the Convex record so your server knows which room to authorize and which content the copy represents. Treat the copy in Convex as read-only.
When is Convex's editor component enough?
When your app already runs on Convex, the document is small, and collaborative
text is the only shared editing you need. The
ProseMirror sync component
ships useTiptapSync and useBlockNoteSync, so you don't have to build text
merging yourself for those editors.
Its own README lists what it does not do and is not planned to do: documents larger than 1 MB, presence such as other users' names and cursors, offline sync between tabs, and Yjs documents. Choose a Liveblocks integration when you need any of those, or when the text editor is one part of a larger collaborative surface. Storage holds the other shared data, and Comments, Notifications, and room permissions cover the review workflow around it.
Does Convex support presence?
Only as an online list. Convex's presence component keeps a live-updating list of who is in a room and when they were last seen, driven by heartbeat mutations from each client, and ships a basic face pile. It does not carry cursor positions, text selections, or any other state that changes many times a second, and the ProseMirror component does not sync presence either.
To show live cursors on Convex you would write each position to the database as a mutation. Every write is a function call, every subscribed client reruns its query, and the data is persisted even though it is obsolete a moment later. Liveblocks Presence is built for exactly this state: it is broadcast to the room, never stored, and comes with Cursors and AvatarStack components.
How large can Convex documents be?
Much smaller than Liveblocks documents. Convex caps every database document at 1 MiB, with 1,024 fields, 8,192 array elements, and 16 levels of nesting. The ProseMirror component stores the editor content as a snapshot document, so a long specification, a design canvas with many shapes, or a board with rich card content hits that limit. Past it, your code has to shard the content across documents and keep the pieces consistent yourself.
Liveblocks has two document models, and neither is capped at a megabyte. Storage treats the whole room as one document with a per-room size limit set by your plan; Pro rooms hold up to 10 MB, and higher tiers raise it. Yjs documents have no size limit at all, so a long-form document, a codebase, or a canvas with years of history can grow to multiple gigabytes in one room. In both models, edits sync as individual operations, so a large document does not mean re-sending a large document on every change.
Database transactions vs. text edits
Convex gives you serializable transactions and retries a mutation when it conflicts with another. That keeps your data consistent, but it does not merge two edits to the same field: the mutation that commits last wins. Merging two people's edits to the same paragraph is a different job, and it needs a CRDT. Convex's ProseMirror component supplies that for supported editors; Liveblocks supplies it for every data type in Storage and for text through its editor integrations, which includes ProseMirror, amongst others.
In a specification tool, a status change is a good fit for a Convex mutation, while the paragraphs people type in need a CRDT. Use Convex's component when it covers your editor. Use Liveblocks when the document itself, and the review features around it, are what you want the service to handle.
Pricing and deployment
Price the back end and the collaboration features separately. Convex is free for personal projects; Convex Professional costs $25 per developer per month and includes 25 million function calls, then $2 per additional million. Liveblocks is an additional cost when you keep Convex, and Liveblocks plans bill collaboration usage on top of that. Include the shared editing and review features your app needs in each estimate.
Convex can be self-hosted. Liveblocks offers self-hosting as a paid add-on on the Enterprise plan. Either way, your own servers, database, backups, and operations are part of the budget.
What usage should I budget for?
Two kinds of usage, measured separately. Convex usage counts function calls, database storage and bandwidth, and action compute. Subscription updates count as function calls, so a button click is not a complete proxy for what you are billed. Liveblocks adds its own usage for documents and the time people spend collaborating.
For a planning app, measure a task reassignment and a paragraph-editing session separately. Record the queries that rerun, the document updates, and the time people spend together in a room. That separates database activity from collaboration usage.
Get started
Explore the whiteboard example and the server-side editing guide. Use them to map a collaborative document to the business records in your back end.
Start building with Liveblocks for free. For self-hosting, contact sales.