Skip to content

S1avv/taupy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

58 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

TauPy

TauPy

Build desktop apps with Python + Rust, and drop in React/Vite when you want. Fast reloads, native window controls, and a tiny API surface.

Demo

🎯 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

Why TauPy

  • 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 build bundles your front-end, rebuilds the launcher, and Nuitka-packages the backend.

Code example (Python UI)

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")))

Install

pip install taupy-framework

Quick start (React front-end)

taupy new [app_name]
cd [app_name]
npm install
taupy dev

Build

taupy build

Pipeline:

  1. Build React/Vite (if present) β†’ target/dist
  2. cargo build --release for the launcher β†’ target/launcher
  3. Nuitka bundle backend β†’ target/app.exe

Performance snapshot (indicative)

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

Measurement conditions

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 CLI

  • taupy dev - run backend + external front-end (Vite) with hot reload.
  • taupy build - build front-end, launcher, and Nuitka bundle into target/.
  • taupy new <name> - scaffold a new TauPy project.

Dev vs Prod (auto)

  • Dev (--dev): external HTTP (Vite 5173), hot reload.
  • Prod: serves bundled dist/ on 8000. Override with TAUPY_EXTERNAL_HTTP / TAUPY_HTTP_PORT.

πŸ“˜ Documentation

Full documentation is available here:

πŸ‘‰ https://s1avv.github.io/taupy/

Roadmap

  • Cross-platform launcher (Linux/macOS)
  • Native dialogs & notifications
  • Packaging presets (single-file)
  • Built-in icon set & theme presets
  • DevTools/inspector mode
  • Playground in browser

Requirements

  • 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 ❀️