Skip to main content
Pre-release

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.

PyPI Python versions License: MPL-2.0

中文


⚠️ 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

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-region drag areas + built-in lumiview.window.* JS API (minimize / maximize / close).
  • 📁 Static serving & WSGI & ASGI — Directly load local files, proxy to WSGI apps (Flask, Django, etc.), or run FastAPI/Starlette apps without external servers.

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(...)

Development Status

  • Window management (TaoWindow + Window)
  • WebView embedding (wryview)
  • JS ↔ Python Bridge (invoke/listen IPC)
  • Event class system (WindowEvent / AppEvent)
  • Unified async/sync Task interface
  • Static file serving + WSGI proxy
  • ASGI adapter (FastAPI, Starlette, etc.)
  • Native window effects (Acrylic / Mica / Vibrancy)
  • Custom titlebar
  • API stabilization (may 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

lumiview-0.1.0.dev4.tar.gz (142.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

lumiview-0.1.0.dev4-cp310-abi3-win_amd64.whl (646.2 kB view details)

Uploaded CPython 3.10+Windows x86-64

lumiview-0.1.0.dev4-cp310-abi3-win32.whl (596.7 kB view details)

Uploaded CPython 3.10+Windows x86

lumiview-0.1.0.dev4-cp310-abi3-manylinux_2_34_x86_64.whl (850.2 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.34+ x86-64

lumiview-0.1.0.dev4-cp310-abi3-macosx_11_0_arm64.whl (857.6 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

lumiview-0.1.0.dev4-cp310-abi3-macosx_10_12_x86_64.whl (899.9 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file lumiview-0.1.0.dev4.tar.gz.

File metadata

  • Download URL: lumiview-0.1.0.dev4.tar.gz
  • Upload date:
  • Size: 142.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for lumiview-0.1.0.dev4.tar.gz
Algorithm Hash digest
SHA256 ce2bf5ad1252cb6ae6433e1f497c8ab990501042e7dc89cb5e5357e9c202313f
MD5 0c48d8672e6eb1ad66d5ceceb4d62e80
BLAKE2b-256 c6f467110a1f6328a8333259a4828e184fa9efb766033a8e684b92f5fd95159f

See more details on using hashes here.

Provenance

The following attestation bundles were made for lumiview-0.1.0.dev4.tar.gz:

Publisher: publish-to-pypi.yml on xiaosuawa/LumiView

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lumiview-0.1.0.dev4-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for lumiview-0.1.0.dev4-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 884df4015afea411a4f03c81ffa079b0b1876428ee1b6d2b7520458df9606147
MD5 4bb242f7c1efc46b0d44882c6012fe7f
BLAKE2b-256 7802cad4faea8af9a3a25a0f152567d33d7d81049a8fea7fbc48d4c205daec38

See more details on using hashes here.

Provenance

The following attestation bundles were made for lumiview-0.1.0.dev4-cp310-abi3-win_amd64.whl:

Publisher: publish-to-pypi.yml on xiaosuawa/LumiView

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lumiview-0.1.0.dev4-cp310-abi3-win32.whl.

File metadata

  • Download URL: lumiview-0.1.0.dev4-cp310-abi3-win32.whl
  • Upload date:
  • Size: 596.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

Hashes for lumiview-0.1.0.dev4-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 8a618a1250b73a4dd28f0aa98601ad66677f8e9278aeb1fc2fc949f09fcfef61
MD5 f1dfc7085d5af82cce1fa130d2ee3e9c
BLAKE2b-256 194a41096f5af2a235c829f3d1426f2b5ff0cd00aa8e5f7d101577faecbaac75

See more details on using hashes here.

Provenance

The following attestation bundles were made for lumiview-0.1.0.dev4-cp310-abi3-win32.whl:

Publisher: publish-to-pypi.yml on xiaosuawa/LumiView

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lumiview-0.1.0.dev4-cp310-abi3-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for lumiview-0.1.0.dev4-cp310-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 b3cf79dbcab5006197e06cf1da912cbc0b19032b7d613e6d486ddb2f6fdb7181
MD5 1fcb9a39f5062f72d980c35571798069
BLAKE2b-256 34b071eea08ba2d36ec16703480dff060ce40ba8896b8b248b6074b0467cc644

See more details on using hashes here.

Provenance

The following attestation bundles were made for lumiview-0.1.0.dev4-cp310-abi3-manylinux_2_34_x86_64.whl:

Publisher: publish-to-pypi.yml on xiaosuawa/LumiView

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lumiview-0.1.0.dev4-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for lumiview-0.1.0.dev4-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 97773eb0f273e76f09fd5d52cd7940c5e2f0225a1b631a446d224cdb47a25c74
MD5 3e6443c0cc33d3e0a9b8c0954621d099
BLAKE2b-256 90fef1234a85e76e98f796e7f1e38b82e08a0dc92f53344d50994bb46407e29c

See more details on using hashes here.

Provenance

The following attestation bundles were made for lumiview-0.1.0.dev4-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: publish-to-pypi.yml on xiaosuawa/LumiView

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lumiview-0.1.0.dev4-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for lumiview-0.1.0.dev4-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ab44bb4e713501ebdf677c0b664bf4c03daeb0ec737a6141239c42645b2a00ed
MD5 ba7aae93dbf0f6e9ce0c72ea58c7684b
BLAKE2b-256 33d9bc4a2a87dc6e90ac49bce506196fcf8bc7d31bbcc01c1c9be68f21e8b2e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for lumiview-0.1.0.dev4-cp310-abi3-macosx_10_12_x86_64.whl:

Publisher: publish-to-pypi.yml on xiaosuawa/LumiView

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page