This release is a pre-release and may not be stable for production use.
LumiView
Pythonic webview desktop app framework — lightweight, out-of-the-box, async-first.
⚠️ Early Development Stage — APIs May Change
LumiView is currently in pre-alpha. The API is functional but not yet stable — method names, parameter structures, and import paths may change between dev releases. We use dev 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 --pre 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 (maybe 0.2.x)
- 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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 lumiview-0.1.0.dev5.tar.gz.
File metadata
- Download URL: lumiview-0.1.0.dev5.tar.gz
- Upload date:
- Size: 148.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
477f470d57e00485880002e9734d8ffd4323424529171f9c20b2b18b6b123bcb
|
|
| MD5 |
567cfa60c362c420f45e943bcce562bd
|
|
| BLAKE2b-256 |
1efd0020f749366c25cbefc26dd7f7682265a616b5cfa473cb0ab58029bbab7d
|
Provenance
The following attestation bundles were made for lumiview-0.1.0.dev5.tar.gz:
Publisher:
build.yml on xiaosuawa/LumiView
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lumiview-0.1.0.dev5.tar.gz -
Subject digest:
477f470d57e00485880002e9734d8ffd4323424529171f9c20b2b18b6b123bcb - Sigstore transparency entry: 2366921703
- Sigstore integration time:
-
Permalink:
xiaosuawa/LumiView@d7955a6585b1e210a031b7c61d5e6624feb6da7e -
Branch / Tag:
refs/tags/v0.1.0.dev5 - Owner: https://github.com/xiaosuawa
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@d7955a6585b1e210a031b7c61d5e6624feb6da7e -
Trigger Event:
push
-
Statement type:
File details
Details for the file lumiview-0.1.0.dev5-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: lumiview-0.1.0.dev5-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 650.8 kB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c61e7941ffeaa3556b79b70de651a3be21df79d73bd298517e75c5844c2fa50
|
|
| MD5 |
68c97bb2333b1058dc21d7c818391612
|
|
| BLAKE2b-256 |
15e71411bb52f7a9199f42851be9c13328e784c94df04e6deeccdfbf12b63c9b
|
Provenance
The following attestation bundles were made for lumiview-0.1.0.dev5-cp310-abi3-win_amd64.whl:
Publisher:
build.yml on xiaosuawa/LumiView
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lumiview-0.1.0.dev5-cp310-abi3-win_amd64.whl -
Subject digest:
1c61e7941ffeaa3556b79b70de651a3be21df79d73bd298517e75c5844c2fa50 - Sigstore transparency entry: 2366921981
- Sigstore integration time:
-
Permalink:
xiaosuawa/LumiView@d7955a6585b1e210a031b7c61d5e6624feb6da7e -
Branch / Tag:
refs/tags/v0.1.0.dev5 - Owner: https://github.com/xiaosuawa
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@d7955a6585b1e210a031b7c61d5e6624feb6da7e -
Trigger Event:
push
-
Statement type:
File details
Details for the file lumiview-0.1.0.dev5-cp310-abi3-win32.whl.
File metadata
- Download URL: lumiview-0.1.0.dev5-cp310-abi3-win32.whl
- Upload date:
- Size: 600.7 kB
- Tags: CPython 3.10+, Windows x86
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2db2043ffd31b9bb890150a20985b82e201e7c09480c33df92a44d59c0ff3d88
|
|
| MD5 |
a44a2e87e438a290be20815f724b8f7c
|
|
| BLAKE2b-256 |
ce870eaf2d03aef642578570b07e5d40a81f845a1072721e03035cb1f6c0caaa
|
Provenance
The following attestation bundles were made for lumiview-0.1.0.dev5-cp310-abi3-win32.whl:
Publisher:
build.yml on xiaosuawa/LumiView
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lumiview-0.1.0.dev5-cp310-abi3-win32.whl -
Subject digest:
2db2043ffd31b9bb890150a20985b82e201e7c09480c33df92a44d59c0ff3d88 - Sigstore transparency entry: 2366921782
- Sigstore integration time:
-
Permalink:
xiaosuawa/LumiView@d7955a6585b1e210a031b7c61d5e6624feb6da7e -
Branch / Tag:
refs/tags/v0.1.0.dev5 - Owner: https://github.com/xiaosuawa
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@d7955a6585b1e210a031b7c61d5e6624feb6da7e -
Trigger Event:
push
-
Statement type:
File details
Details for the file lumiview-0.1.0.dev5-cp310-abi3-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: lumiview-0.1.0.dev5-cp310-abi3-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 854.8 kB
- Tags: CPython 3.10+, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1de85253509046c3bd8d068b134c726e3d40a6ff9aae16dfd307e86c6541382e
|
|
| MD5 |
1052195cc23683b7c3b7a71aa70c391c
|
|
| BLAKE2b-256 |
ff3fee5bd4eda8683a1ae1c1ed31caec91fbb1a6a54b860b3c848e5fbd9f5db4
|
Provenance
The following attestation bundles were made for lumiview-0.1.0.dev5-cp310-abi3-manylinux_2_34_x86_64.whl:
Publisher:
build.yml on xiaosuawa/LumiView
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lumiview-0.1.0.dev5-cp310-abi3-manylinux_2_34_x86_64.whl -
Subject digest:
1de85253509046c3bd8d068b134c726e3d40a6ff9aae16dfd307e86c6541382e - Sigstore transparency entry: 2366921922
- Sigstore integration time:
-
Permalink:
xiaosuawa/LumiView@d7955a6585b1e210a031b7c61d5e6624feb6da7e -
Branch / Tag:
refs/tags/v0.1.0.dev5 - Owner: https://github.com/xiaosuawa
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@d7955a6585b1e210a031b7c61d5e6624feb6da7e -
Trigger Event:
push
-
Statement type:
File details
Details for the file lumiview-0.1.0.dev5-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: lumiview-0.1.0.dev5-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 864.6 kB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9d9757dffbc96dd76d78abe8be9c1d8117010890f22e7f04cbf734c4c3209e3
|
|
| MD5 |
cd7b3ad37c7786ad21c6d49cccbe31bf
|
|
| BLAKE2b-256 |
d37c0d8b6f39445bf18fd6b8663e8a30a7f4478cf59f8ee83c27b5d7c20f6569
|
Provenance
The following attestation bundles were made for lumiview-0.1.0.dev5-cp310-abi3-macosx_11_0_arm64.whl:
Publisher:
build.yml on xiaosuawa/LumiView
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lumiview-0.1.0.dev5-cp310-abi3-macosx_11_0_arm64.whl -
Subject digest:
a9d9757dffbc96dd76d78abe8be9c1d8117010890f22e7f04cbf734c4c3209e3 - Sigstore transparency entry: 2366922049
- Sigstore integration time:
-
Permalink:
xiaosuawa/LumiView@d7955a6585b1e210a031b7c61d5e6624feb6da7e -
Branch / Tag:
refs/tags/v0.1.0.dev5 - Owner: https://github.com/xiaosuawa
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@d7955a6585b1e210a031b7c61d5e6624feb6da7e -
Trigger Event:
push
-
Statement type:
File details
Details for the file lumiview-0.1.0.dev5-cp310-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: lumiview-0.1.0.dev5-cp310-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 906.9 kB
- Tags: CPython 3.10+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23fdfbc5b9a47717abd45f2b71e3678dabdd9ecbc130ac7b4c3f1c864645986f
|
|
| MD5 |
08157875374d4961e2a88cdbb09295b7
|
|
| BLAKE2b-256 |
f7293d50510460446f3a8d11d054191d1664f90d276c776a59ab6fe6e16809ef
|
Provenance
The following attestation bundles were made for lumiview-0.1.0.dev5-cp310-abi3-macosx_10_12_x86_64.whl:
Publisher:
build.yml on xiaosuawa/LumiView
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lumiview-0.1.0.dev5-cp310-abi3-macosx_10_12_x86_64.whl -
Subject digest:
23fdfbc5b9a47717abd45f2b71e3678dabdd9ecbc130ac7b4c3f1c864645986f - Sigstore transparency entry: 2366921856
- Sigstore integration time:
-
Permalink:
xiaosuawa/LumiView@d7955a6585b1e210a031b7c61d5e6624feb6da7e -
Branch / Tag:
refs/tags/v0.1.0.dev5 - Owner: https://github.com/xiaosuawa
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@d7955a6585b1e210a031b7c61d5e6624feb6da7e -
Trigger Event:
push
-
Statement type: