LumiView
Pythonic webview desktop app framework — lightweight, out-of-the-box, async-first.
⚠️ Early Development Stage — APIs May Change
LumiView is currently in alpha. The API is functional but not yet fully stable — method names, parameter structures, and import paths may still change between releases. We use alpha releases to gather early feedback while retaining the flexibility to adjust the API.
Early adopters welcome! Try building an app with it and tell us what works well and what doesn't. Your feedback will directly shape the final stable API. When upgrading, please check the changelog and be prepared to adjust your code.
What is LumiView?
LumiView is an app development framework focused on system webviews. At the core layer, it wraps tao and wry (via wryview); at the top layer, it provides a clean, out-of-the-box, async-first Python API.
Architecture
flowchart TB
subgraph py["Python Layer"]
direction LR
App ~~~ Window ~~~ Bridge ~~~ Task["Task[T]"] ~~~ Serve
end
subgraph rust["Rust Layer (PyO3)"]
TaoWindow ~~~ EventLoop
end
subgraph plat["Platform WebView"]
direction LR
Win["Windows: WebView2"] ~~~ Mac["macOS: WKWebView"] ~~~ Linux["Linux: WebKitGTK"]
end
py --> rust --> plat
Threading model: Main thread (event loop + native ops) → Async thread (asyncio + user coroutines) → Thread pool (synchronous code).
Documentation
- Getting Started
- Architecture & Threading Model
- Custom Plugins
- Third-Party Integrations
- Serve Protocol
Installation
pip install lumiview
Quick Start
from lumiview import App, Window, WindowOptions
app = App(name="HelloLumiView")
async def main():
win = await Window.create(WindowOptions(
title="Hello LumiView!",
url="https://example.com",
width=900, height=640,
devtools=True,
))
title = await win.eval_js("document.title")
print(f"Page title: {title}")
app.run(main)
Key Features
- 🧵 Unified async/sync — All cross-thread / async operations return
Task.await,.result(), or.on_done()— same API, your choice. - 🌉 JS ↔ Python Bridge — Expose Python functions to JS via
window.lumiview.invoke(). No HTTP server, no manual serialization required. - 🪟 Native window effects — Acrylic, Mica, Vibrancy via
window-vibrancy. - 🎨 Custom titlebar — Declarative
data-lumiview-drag-regiondrag areas + built-inlumiview.window.*JS API (minimize / maximize / close). - 📋 Native menus — Per-item
on_activatecallbacks + globalMenuItemActivatedEvent; macOS default app menu installed automatically, window menu bars on Windows. - 🎛️ System tray — Cross-platform tray icons with context menus and click events; close-to-tray pattern.
- 📁 Static serving & WSGI & ASGI — Directly load local files, proxy to WSGI apps (Flask, Django, etc.), or run FastAPI/Starlette apps without external servers.
Logging
LumiView logs to the lumiview logger tree using the standard
logging configuration. To see internal diagnostics, raise the level of
the lumiview logger:
import logging
logging.getLogger("lumiview").setLevel(logging.INFO) # lifecycle events
logging.getLogger("lumiview").setLevel(logging.DEBUG) # + scheduling / dispatch
When reporting a bug, please include the DEBUG log output from your repro — it covers window / tray lifecycle and event dispatch, which usually pinpoints the issue. See CONTRIBUTING.md.
For runnable code, see the examples/ directory.
Examples
| Example | Description |
|---|---|
hello_world.py |
Minimal app — create window, load URL (async) |
hello_world_sync.py |
Same as above, using .result() — pure synchronous style |
bridge_demo.py |
JS ↔ Python IPC — sync/async commands, error handling |
multi_window.py |
Multi-window + shared WebContext |
custom_titlebar.py |
Frameless window + native effects + drag regions |
events.py |
App/Window hook events + JS event emission |
fastapi_demo.py |
FastAPI running via source=ASGI(...) |
django_demo.py |
Django running via source=WSGI(...) — template rendering, form POST, JSON APIs |
menu.py |
Native menus — accelerators, on_activate callbacks, macOS app menu / Windows window menu bar |
tray.py |
System tray — close-to-tray pattern, tray context menu |
Development Status
- Window management (TaoWindow + Window)
- WebView embedding (wryview)
- JS ↔ Python Bridge (invoke/listen IPC)
- Event class system (WindowEvent / AppEvent)
- Unified async/sync
Taskinterface - Static file serving + WSGI proxy
- ASGI adapter (FastAPI, Starlette, etc.)
- Native window effects (Acrylic / Mica / Vibrancy)
- Custom titlebar
- Native menus (muda)
- System tray (tray-icon)
- API stabilization
- Complete documentation site
Contributing
This is an early-stage project — your feedback is crucial.
Due to limited personal time, some features may not be completed promptly — PRs and other contributions are warmly welcomed.
Please read CONTRIBUTING.md before submitting PRs — the API is still in flux and significant changes require prior discussion.
License
Copyright (c) 2026 Xiaosu.
Distributed under the terms of the Mozilla Public License Version 2.0.
Metadata
Release files for lumiview 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| lumiview-0.1.2.tar.gz | 149.1 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| lumiview-0.1.2-cp310-abi3-win_amd64.whl | CPython 3.10 | abi3 | Windows x86-64 | Details |
| lumiview-0.1.2-cp310-abi3-win32.whl | CPython 3.10 | abi3 | Windows x86-32 | Details |
| lumiview-0.1.2-cp310-abi3-manylinux_2_34_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.34+ x86-64 | Details |
| lumiview-0.1.2-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details |
| lumiview-0.1.2-cp310-abi3-macosx_10_12_x86_64.whl | CPython 3.10 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 4.0 MB
Release files / lumiview-0.1.2.tar.gz
| Download URL | lumiview-0.1.2.tar.gz |
|---|---|
| Size | 149.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
23cebb93c13e40ab11662ae479e3a4e781105b6462505d23d337160f1fe1668d
|
|
BLAKE2b-256 checksum How to use checksums |
d9c657e62756a9fd3f5042f642fe2a8bbca39c5df1096556d6a71972732edbb1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.
Transparency logRelease files / lumiview-0.1.2-cp310-abi3-win_amd64.whl
| Download URL | lumiview-0.1.2-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 650.8 kB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
7474577b8b3f27cea84d7ac4867f16e46e5325d3595815ed497e82a9b3c38d49
|
|
BLAKE2b-256 checksum How to use checksums |
b72a2c16786586202b2b33245dc8c19ddce061019520af2ea330c88cfc5feca6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.
Transparency logRelease files / lumiview-0.1.2-cp310-abi3-win32.whl
| Download URL | lumiview-0.1.2-cp310-abi3-win32.whl |
|---|---|
| Size | 602.0 kB |
| Tags | CPython 3.10 Windows x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
22a3e9747f19f0625f7cf7ef988c623adf318d9f34c759d65a77c13f93760bc1
|
|
BLAKE2b-256 checksum How to use checksums |
a0db3309f61f3ecbb6af8953c0f7cc6dacc042a541aa0912dbf01577db98a996
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.
Transparency logRelease files / lumiview-0.1.2-cp310-abi3-manylinux_2_34_x86_64.whl
| Download URL | lumiview-0.1.2-cp310-abi3-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 857.0 kB |
| Tags | CPython 3.10 Linux glibc 2.34+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
f0957a930805b0c75a82ff99df5da14cbe5a7e8ed50faee3f7a7a2ed2401a36b
|
|
BLAKE2b-256 checksum How to use checksums |
43e7da73a68e066706e31329a2ce47cfc35a2d4de2211f969ba541fe1200df62
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.
Transparency logRelease files / lumiview-0.1.2-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | lumiview-0.1.2-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 865.9 kB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
11a680e68f958a43454265baf8b2437428e16df9d97ea0561042ec31eca8eb0c
|
|
BLAKE2b-256 checksum How to use checksums |
1d2e9098757a4991c5506e3fd925e7bb85731aa3e46bd60a72f90c2d131de2d4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.
Transparency logRelease files / lumiview-0.1.2-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | lumiview-0.1.2-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 907.6 kB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
1aa66d00ba14cb3818f14d7c9ec62e210c60b65ef9444c238f3f163773614e0c
|
|
BLAKE2b-256 checksum How to use checksums |
c547a57aa81732ed2576472c871acc53ed847f3ae429097c23bccf6593e1ffdf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.
Transparency log