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.dev3.tar.gz (117.1 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.dev3-cp310-abi3-win_amd64.whl (520.5 kB view details)

Uploaded CPython 3.10+Windows x86-64

lumiview-0.1.0.dev3-cp310-abi3-win32.whl (485.6 kB view details)

Uploaded CPython 3.10+Windows x86

lumiview-0.1.0.dev3-cp310-abi3-manylinux_2_34_x86_64.whl (618.9 kB view details)

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

lumiview-0.1.0.dev3-cp310-abi3-macosx_11_0_arm64.whl (669.2 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

lumiview-0.1.0.dev3-cp310-abi3-macosx_10_12_x86_64.whl (701.4 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: lumiview-0.1.0.dev3.tar.gz
  • Upload date:
  • Size: 117.1 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.dev3.tar.gz
Algorithm Hash digest
SHA256 48f023e132be9b5ecc7128dd4e9bd1dafc32544c15e509ada68f58a5d02df8f2
MD5 326544a20f108190e7109f4daba5cc6e
BLAKE2b-256 4af2764d77410e48e49cda3760b272c9535a17e20af54593801aee503fc10c06

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for lumiview-0.1.0.dev3-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 bf04c4ebb4c6ca073bfc7b6f3ab321f4da6fd9147e651ecde635e85578685f25
MD5 6674db18a73a64403c393f854015dd42
BLAKE2b-256 e26101c3157c97b44266aebc552970381ccb92b327ef303e5d0667e70ff2e534

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: lumiview-0.1.0.dev3-cp310-abi3-win32.whl
  • Upload date:
  • Size: 485.6 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.dev3-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 31fdaa35a5fcd9d0563040dd05726197a41d2062281edd29038cbb8f2e37ab64
MD5 af2c07f5f31fa1d088c390237f464f9a
BLAKE2b-256 d4597d1c21c47babef78a360dbc446817e5cd64defaa115dc7a428c76cf26ec7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for lumiview-0.1.0.dev3-cp310-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 526d04eadffee4a6b5ad5cb162642a67c59e28a2c56ab033cb1eb6f99026b645
MD5 1054ff72dbd6e38dcc7645ac203da8a1
BLAKE2b-256 6990e6f923bf7e259fbe890101f679bcd0b2a6d7abe9b33e94ecb69e5ce1f030

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for lumiview-0.1.0.dev3-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c6c5a208171689f3bfc815b78ad0757caed91acd5b1c8257300433d4b85eb122
MD5 fac6b0eb5bd04681947b2768ece1664e
BLAKE2b-256 aad42609ee1ae23b70f86ae51b9a9e9ffb709bbe7f0a161b7eb46528738db832

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for lumiview-0.1.0.dev3-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bed3dfea7368a1d65790d69ad66410da21c2c26181893edaab52427173d6d83d
MD5 e8bc4647254bbb28ff1e625a0a24f7af
BLAKE2b-256 069fcdda191b25f8e06a80f317a34bc9db091372ac44735fcdf09f79fe4b3b80

See more details on using hashes here.

Provenance

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