finds.dev← search

// the find

uwdata/mosaic

★ 1,339 · TypeScript · NOASSERTION · updated Jul 2026

An extensible framework for linking databases and interactive views.

Mosaic is a coordination layer that sits between a DuckDB instance and your visualization components, letting each chart or widget declare its data needs as SQL queries that the coordinator batches, optimizes, and cross-filters. It runs DuckDB either server-side or in-browser via WASM, so the same architecture works in a static web page or a Jupyter notebook. The target audience is data engineers and visualization researchers who need interactive exploration over datasets too large for D3-on-arrays to handle.

The query push-down is the real win here — binning, regression, hex-binning, and M4 line simplification all happen in DuckDB rather than the browser, which is why 10M-row cross-filter demos stay interactive. The declarative spec format (JSON/YAML) that compiles to live visualizations is a thoughtful addition for dashboard-as-code workflows. The WASM path means you can ship a fully interactive data app as a static site with no backend at all. The research paper (IEEE TVCG) backing the architecture gives it more design rigour than most charting libraries.

Still at 0.x versions after years of development — the schema changelog shows 29+ breaking-version bumps, and adopters building on top of this have clearly been bitten repeatedly. The server story is a mess: four server implementations (Python, Rust, Go, Node.js) with the README explicitly warning against the Node.js one and noting the Rust one lags DuckDB releases. Mosaic's own vgplot is tightly coupled to Observable Plot, so if you need a different rendering target you are largely on your own writing new clients from scratch. Error messages and debugging when a query goes wrong in the coordinator are poor — the abstraction hides SQL in a way that makes it hard to know what actually ran.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →