Build personal apps in Python. Define records, get a full app.
Project description
zuzu
Build personal apps in Python. Define records, get a full app.
import zuzu
# Define your data
contacts = zuzu.record("Contacts",
name="",
email="",
company="",
status=zuzu.Choice(["Lead", "Active", "Churned"]),
)
# Build the UI
zuzu.app("My CRM", records=[contacts], accent="purple", theme="dark")
zuzu.page("People", record=contacts, layout="cards")
zuzu.page("Dashboard")
zuzu.metric("Total", contacts.count())
zuzu.metric("Active", contacts.where(status="Active").count())
zuzu.chart(contacts, x="status", y="name", kind="donut", aggregate="count")
pip install zuzu
python my_app.py
# → opens at http://localhost:8899
What you get
- Records — Define data models with types, choices, computed fields, and relations
- Views — List, cards, kanban, grid, tiles, calendar, checklist layouts
- Components — 37+ UI components: metrics, charts, forms, buttons, badges, progress bars, and more
- Theming — 9 accent colors, light/dark/auto mode, configurable radius, density, and card style
- Local-first — SQLite database, no external dependencies, runs anywhere Python runs
Install
pip install zuzu
Requires Python 3.10+.
Documentation
See zuzu.codes/docs for the full SDK reference.
Examples
Check the examples/ directory:
- personal-crm — Contact manager with status tracking and dashboards
Development
git clone https://github.com/zuzucodes/zuzu.git
cd zuzu
pip install -e ".[dev]"
pytest
Frontend development
The renderer is a Preact + Vite app with Storybook:
cd frontend
npm install
npm run dev # Dev server (proxies to Python on :8899)
npx storybook dev # Component docs
npx vite build # Production build → zuzu/runtime/static/
Schema-driven codegen
Components are defined as JSON schemas in schemas/ and generated into Python functions + TypeScript types:
python scripts/codegen.py # Regenerate all
python scripts/codegen.py --check # CI: exit 1 if stale
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zuzu-0.1.0.tar.gz.
File metadata
- Download URL: zuzu-0.1.0.tar.gz
- Upload date:
- Size: 153.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
92e7222423193bca64a33fbd4696b7eadece83fe0866b2e44df662f6ccbcb9b2
|
|
| MD5 |
4f6054b38d6d768f6406f799ee92398e
|
|
| BLAKE2b-256 |
c3cd1200a3a4ad69313739b771a8c2c3d50581bc858eca78d0c576e5cc920986
|
File details
Details for the file zuzu-0.1.0-py3-none-any.whl.
File metadata
- Download URL: zuzu-0.1.0-py3-none-any.whl
- Upload date:
- Size: 73.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82a5962197238dfc194273557a63fdc5ab003f4f36f75914da42060701a498d1
|
|
| MD5 |
03d4ea6a7e4986fc469b99f65f6b09db
|
|
| BLAKE2b-256 |
7aea7a63ebc3eaa53a4552d86b1495d4e3fbf39aaaf7df1b6c0ef8dc6f2213d0
|