SQLRooms: Local-First Analytics with DuckDB, Collaborative Canvas, and Loro CRDT Sync
- Track: Local-First, sync engines, CRDTs
- Room: K.3.201
- Day: Sunday
- Start: 15:00
- End: 15:25
- Video only: k3201
- Chat: Join the conversation!
SQLRooms (GitHub) is an open-source React framework for building local-first data analytics applications powered by DuckDB. SQLRooms can run entirely in the browser using DuckDB-WASM, or connect to a shared session-backend running native DuckDB for larger datasets—in both cases, enabling privacy-preserving analytics where data stays under user control.
In this talk, I'll present SQLRooms' local-first architecture and our ongoing work on real-time collaboration using Loro CRDT. We're building a Canvas module with SQL query cells and Vega-Lite visualization cells, a Notebooks module, and an underlying DAG (directed acyclic graph) engine that tracks dependencies between cells—automatically re-executing downstream cells when data changes. These modules will support collaborative editing via @sqlrooms/crdt, with sync enabled through WebSockets using sqlrooms-duckdb-server.
A key insight for analytics apps: DuckDB serves as a read-only query engine—the underlying data doesn't need to be synced. Only the UI state requires CRDT synchronization: queries, notebooks, canvas layouts, annotations, and comments. This CRDT state can be persisted both in a shared session-backend DuckDB and on local machines for offline access.
For session-backend deployments, sqlrooms-duckdb-server provides a shared DuckDB instance where all connected clients query the same data—useful for large datasets or when consistent results matter. This can be deployed with e.g. Cloudflare Containers for on-demand, per-session instances.
I'll discuss our choice of Loro over Yjs and how separating data (read-only DuckDB) from collaborative state (CRDT) simplifies the sync architecture while enabling privacy-preserving collaborative analytics.
Speakers
| Ilya Boyandin |