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

Installation

pip install --pre lumiview

Quick Start

from lumiview import App, Window

app = App(name="HelloLumiView")

async def main():
    win = await Window.create(
        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)
  • Hook event system (AppHookEvent / WindowHookEvent)
  • 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.

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.dev2.tar.gz (85.8 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.dev2-cp310-abi3-win_amd64.whl (440.7 kB view details)

Uploaded CPython 3.10+Windows x86-64

lumiview-0.1.0.dev2-cp310-abi3-win32.whl (414.9 kB view details)

Uploaded CPython 3.10+Windows x86

lumiview-0.1.0.dev2-cp310-abi3-manylinux_2_34_x86_64.whl (553.6 kB view details)

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

lumiview-0.1.0.dev2-cp310-abi3-macosx_11_0_arm64.whl (596.8 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

lumiview-0.1.0.dev2-cp310-abi3-macosx_10_12_x86_64.whl (623.3 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: lumiview-0.1.0.dev2.tar.gz
  • Upload date:
  • Size: 85.8 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.dev2.tar.gz
Algorithm Hash digest
SHA256 0d019e15d01e74591ddf50b7f3ef3d58422202cae5d9e01dc726219884c3fea6
MD5 564744312e91a3fe90b08ca266bb8899
BLAKE2b-256 52ecd5cdd11595bbd634b9bc82d0257e6780d60a77dc5f31267e22e906becc20

See more details on using hashes here.

Provenance

The following attestation bundles were made for lumiview-0.1.0.dev2.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.dev2-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for lumiview-0.1.0.dev2-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 e22490af0d992770d658db97b845d32f6c06e77ad608ea7e3ad333634965b8ad
MD5 a164ae5ec475d55de1d2acf86e9f35b5
BLAKE2b-256 43af5e085a2f5afffd0c59fcbc97858f1da3aadc43db78236fedd2131c6605a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for lumiview-0.1.0.dev2-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.dev2-cp310-abi3-win32.whl.

File metadata

  • Download URL: lumiview-0.1.0.dev2-cp310-abi3-win32.whl
  • Upload date:
  • Size: 414.9 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.dev2-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 95f2646d991bf5147a73cab104b04319e394199474c57298ee81e27ccacaca9b
MD5 722307a7492f9a119d7f5b8f9d6e9b0f
BLAKE2b-256 9edca1a15c1e71323712d287297ffceb3eba6317cc99a90b6b6ec29555c02a88

See more details on using hashes here.

Provenance

The following attestation bundles were made for lumiview-0.1.0.dev2-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.dev2-cp310-abi3-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for lumiview-0.1.0.dev2-cp310-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 acc85e4f6edf2a7c9cd0fbce9abde635b8e37a7c9afdbf8444accc1b0b829a28
MD5 bc580629a76119aee5087c23d3d0a290
BLAKE2b-256 82f877bd6b7468fdb47ce9f935c761cf6de3fc385c8170e86a61962db8a3c5e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for lumiview-0.1.0.dev2-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.dev2-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for lumiview-0.1.0.dev2-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 51d749b010ce9283aa6c93212835192816abc82b036674fae30fddf144aca2b4
MD5 4da1b3c8b52da4302cbaa428100898fd
BLAKE2b-256 f702b7e0536df0113b85f7a531236d7abe2fbd485e8bf788ba2111dd9b8e2646

See more details on using hashes here.

Provenance

The following attestation bundles were made for lumiview-0.1.0.dev2-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.dev2-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for lumiview-0.1.0.dev2-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6dd1659e629cfd332ea1cec75c72ab6848d7b4229baf192aabdbf0e6e6f5243c
MD5 6c392d4f1696134be70cba8869dc28b2
BLAKE2b-256 fae31a9b89ace2f00472528e6569e9f7e05644c3aa6d5bef3342d00bcea93fd0

See more details on using hashes here.

Provenance

The following attestation bundles were made for lumiview-0.1.0.dev2-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