Preswald packages Python-based data apps to run in-browser via WASM, Pyodide, and DuckDB, producing self-contained static files. It exports apps as HTML-like bundles that run offline and can be shared.
Collecting history — the radar snapshots this repo daily. The trend line appears after 3 days of data (1 so far).
What it is
Preswald is a static-site generator for building interactive data apps in Python. It packages compute, data access, and UI into self-contained data apps that run locally in the browser. Built on a WASM runtime with Pyodide and DuckDB, Preswald enables portable, file-based apps that are fast, reactive, and shareable.
How it works
- Code-based development in Python with a reactive DAG of dependencies.
- Bundles Python code, data, and DuckDB queries into a single, static app that runs in the browser via Pyodide.
- Outputs a static site ready for offline use and sharing.
Getting started
- Installation:
pip install preswald
- Quick Start:
pip install preswald
preswald init my_app
cd my_app
preswald run
-
The run command launches a development server; typical host is http://localhost:8501
-
Export a static app:
preswald export
This builds into a static site inside dist/ with all files needed to run locally or share.
- Configuration: Preswald uses a preswald.toml file for app metadata, runtime settings, UI branding, and data sources. An example section:
[project]
title = "Preswald Project"
version = "0.1.0"
port = 8501
slug = "preswald-project"
entrypoint = "hello.py"
- Quick example app structure when created:
my_app/
├── hello.py # Your app logic
├── preswald.toml # App metadata and config
├── secrets.toml # Secrets (e.g. API keys)
├── data/sample.csv # Input data files
├── images/logo.png # Custom branding
- Code example for building UI:
from preswald import text, table, get_df
text("# Hello Preswald")
df = get_df("sample.csv")
table(df)
- Documentation and further usage are available via the project homepage and documentation links in the README.






