finds.dev← search

// the find

StructuredLabs/preswald

★ 4,284 · Python · Apache-2.0 · updated Jun 2026

Preswald is a WASM packager for Python-based interactive data apps: bundle full complex data workflows, particularly visualizations, into single files, runnable completely in-browser, using Pyodide, DuckDB, Pandas, and Plotly, Matplotlib, etc. Build dashboards, reports, and notebooks that run offline, load fast, and share like a document.

Preswald is a static-site generator that packages Python data apps into self-contained HTML files using Pyodide and DuckDB compiled to WASM. The whole app — code, data, DuckDB queries, UI — runs in the browser with no server. It's aimed at analysts who need to ship interactive dashboards or reports to stakeholders without requiring them to install anything.

The core idea is genuinely useful: `preswald export` produces a folder you can email, post to S3, or drop on a USB drive, and it just works offline. DuckDB-in-browser is a real differentiator — you can run SQL over bundled CSV/Parquet without a backend. The reactive DAG engine means only the parts of your app that depend on changed inputs re-run, which matters for Pyodide where cold execution is slow. The component library (table, slider, selectbox, Plotly, Matplotlib) covers the 80% use case for analyst tooling without forcing you to write any JS.

Pyodide's startup time is brutal — first load can be 5–10 seconds even on fast connections, and bundling large datasets into a single HTML file will produce unwieldy files that defeat the 'shareable like a document' pitch. The examples directory only has iris, earthquakes, and a couple of toy CSVs; there's nothing demonstrating DuckDB queries against real-scale data, so it's unclear how performance degrades at 50MB+. The linked example URLs in the README are all empty placeholders (`[Example 1]()`), which is a bad signal for project maturity. Secrets handling via `secrets.toml` bundled into a static export is a footgun — any API key you put there ships in plaintext to whoever receives the file.

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 →