RadarTopicsBuildersWeeklyReads
Open Source Radar
StructuredLabs/

preswald

GitHubWebsite

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.

4.3kstars
647forks
330issues
Apache-2.0license
2024since
Star historydaily snapshots by VibeCrowd

Collecting history — the radar snapshots this repo daily. The trend line appears after 3 days of data (1 so far).

Alternatives & relatedmatched by topic overlap
Reviewgenerated from repository data · Aug 5, 2026

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.
SharePost on XLinkedIn
All trending reposRevenue-verified startups →