Build desktop apps with Python + Rust, and drop in React/Vite when you want. Fast reloads, native window controls, and a tiny API surface.
π― Focus Timer Demo - a small demo application showcasing TauPy window APIs, compact mode switching, and a React-based UI.
π https://github.com/S1avv/taupy-focus
- Hybrid by design - Python backend + Rust launcher; use Python widgets or a full React front-end.
- Hot dev loop - edit β window refreshes near-instantly, no page reload dance.
- Native window API - minimize/maximize/resize/drag, all routed through Python to the launcher.
- Shipping ready -
taupy buildbundles your front-end, rebuilds the launcher, and Nuitka-packages the backend.
from taupy import App, VStack, Text, Button, State
from taupy.events import Click
app = App("Hello TauPy", 800, 500)
msg = State("Hello, TauPy!")
@app.dispatcher.on_click("btn_hello")
async def hello(_: Click):
msg.set("Button clicked!")
@app.route("/")
def home():
return VStack(Text(msg), Button("Click me", id="btn_hello"))
if __name__ == "__main__":
import asyncio
asyncio.run(app.run(VStack(id="root")))pip install taupy-frameworktaupy new [app_name]
cd [app_name]
npm install
taupy devtaupy buildPipeline:
- Build React/Vite (if present) β
target/dist cargo build --releasefor the launcher βtarget/launcher- Nuitka bundle backend β
target/app.exe
| Scenario | TauPy (Python + Rust) | PyQt / PySide | Tkinter | Electron |
|---|---|---|---|---|
| Cold start (release build) | ~300β600 ms | ~900 ms β 1.8 s | ~500β900 ms | ~1.5 β 3 s |
| Hot reload (code β UI) | ~40β120 ms (WS diff) | Full widget refresh | Full redraw | ~200β500 ms |
| UI update (state β render) | ~10β40 ms | QWidget update | Full widget update | Virtual DOM diff |
| Bundle size | ~6β15 MB + dist | 40β80 MB | ~2β5 MB | 120+ MB |
| UI stack | HTML/CSS (WebView) | Native Qt | Native Tk | Chromium |
Measurements taken on Windows 11, Ryzen 7 5800X, NVMe SSD.
Release builds, minimal "hello world" applications.
Numbers are indicative and vary by project size and configuration.
taupy dev- run backend + external front-end (Vite) with hot reload.taupy build- build front-end, launcher, and Nuitka bundle intotarget/.taupy new <name>- scaffold a new TauPy project.
- Dev (
--dev): external HTTP (Vite 5173), hot reload. - Prod: serves bundled
dist/on 8000. Override withTAUPY_EXTERNAL_HTTP/TAUPY_HTTP_PORT.
Full documentation is available here:
π https://s1avv.github.io/taupy/
- Cross-platform launcher (Linux/macOS)
- Native dialogs & notifications
- Packaging presets (single-file)
- Built-in icon set & theme presets
- DevTools/inspector mode
- Playground in browser
- Windows 64-bit, Python 3.11+
- Rust toolchain (launcher rebuild)
- Node.js (for React/Vite, optional)
π License
TauPy is released under the MIT License. Free for commercial and personal use.
π¬ Contributing
Contributions are welcome!
β Support the Project
If TauPy inspires you - please star the repository. Every β makes development faster β€οΈ