Skip to main content

Neony

Reactive desktop UI framework for Python, built on LumiView.

License: LGPL-3.0 Python

中文文档 · API Reference (EN) · API 参考 (中文)


Overview

Neony renders a reactive DOM in a native window. You compose your UI from Python objects — components, layouts, styles — and Neony diff-updates the browser DOM automatically. No HTML, no JavaScript, no CSS strings.

It builds on LumiView, which uses the same Rust tao/wry webview stack as Tauri.

  • Pure Python API — components, layouts and events, no need for non-python codes
  • Same stack as Tauri — Rust tao/wry webviews via LumiView
  • 3 theme presets — dark / light / deep-blue via CSS custom properties
  • (Optional) Frosted glass — translucent surfaces with backdrop blur
  • Custom window chrome — frameless, transparent, custom TitleBar
  • (Supported platform only) Native window effects — blur / acrylic / mica materials

Installation

pip install neony

Requires Python 3.11+ and the platform WebView stack (WebKitGTK on Linux, WebView2 on Windows, WKWebView on macOS).


Quick Start

from neony.application import Page, launch
from neony.application.elements import Button, Heading, Text, VStack

counter = Button("Click me")


async def on_click(event) -> None:
    counter.label = "Clicked!"


counter.on_click(on_click)

page = Page(gap="16px").add(
    VStack(
        Heading("Hello, Neony", level=1),
        Text("Build desktop UI in pure Python.", role="secondary"),
        counter,
        gap="12px",
    )
)

launch(page, title="My App", width=480, height=360, devtools=True)

Components

Import from neony.application.elements.

Component Description
Button Themed push button — primary / ghost / danger variants, hover & press feedback
Checkbox Custom-styled checkbox with label and change event
Input Single-line text field — text / password / email / number…
Heading Themed heading (h1–h6) with automatic sizing
Text Inline body copy with semantic roles (primary / secondary / danger / success)
Tabs Tab bar + panels, exactly one visible at a time
Flex Generic flex container with full control
VStack / HStack Vertical / horizontal flex stacks
Spacer Flexible empty space that absorbs leftover room
Separator Subtle horizontal divider
GlassPanel Frosted-glass container with optional background image
TitleBar Custom window chrome for frameless windows — drag, minimize / maximize / close
Sidebar / SidebarItem Vertical navigation rail, glass-matched to the TitleBar

All components share a fluent, chainable API — see the API reference for usage.


Window Features

  • Frameless custom titlebar — set decorations=False, add a TitleBar, and drag / minimize / maximize / close all work automatically. See docs/api.en.md and the test_custom_window.py demo.
  • Transparent windows & native effectstransparent=True plus apply_blur(), apply_acrylic(), apply_mica(). See test_transparent_panel.py.
  • Programmatic window controlset_title(), set_size(), minimize(), toggle_maximize(), close(), … all on NeonApplication, with window_index=0 for multi-window apps.
  • Multi-windowrun(*pages) opens one window per page, all sharing one event loop and app.state. launch([...]) accepts a list. See test_multi_window.py.

Theming

Three built-in presets — DARK (default), LIGHT, DEEP_BLUE — exposed as CSS custom properties on :root, so a theme switch redraws the whole UI with zero DOM diff. See the API reference for switching and custom themes.


Demos

Run from the repository root:

File Shows
test_gallery.py Component gallery with docs & code samples, glass TitleBar
test_custom_window.py Frameless window: TitleBar + Sidebar chrome
test_transparent_panel.py Floating transparent panel with native blur
test_multi_window.py Two windows sharing one app state
test_reactive.py Minimal launch() app
test_builder.py Raw DOM builder without the app layer
uv run test_gallery.py

Development

This project uses uv as the environment manager and runner.

uv sync --group dev   # install dependencies (incl. dev tools)

uv run test_gallery.py            # run a demo
uv run pytest -q                  # run the test suite
uv run ruff check .               # lint
uv run ruff format --check .      # format check
uv run pyrefly check              # type check

License

LGPL-3.0-or-later © HarcicYang

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

neony-0.1.0.tar.gz (54.2 kB view details)

Uploaded Source

Built Distribution

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

neony-0.1.0-py3-none-any.whl (54.6 kB view details)

Uploaded Python 3

File details

Details for the file neony-0.1.0.tar.gz.

File metadata

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

File hashes

Hashes for neony-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1619c995d687949baba2409b787d902b7465cb1e0c7d6385cb89fa3afddb1ba7
MD5 44de24ba94c94ea5f429f3cd007f56ba
BLAKE2b-256 8f62e187c75f66e6359828c190bb120ab9064cb5194a82ec7ab919c58ea5c28c

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on HarcicYang/Neony

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

File details

Details for the file neony-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: neony-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 54.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for neony-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6d4cfe91f528b510ff8cf68234d2729b420bad0d1fe97c550bdc729b0e0c2c4c
MD5 85a83fa7b73ed3773469f21ac32f4b25
BLAKE2b-256 a8ceff3320d7718364037529c8cb46826db20926a742657b482ecdd6fb8a6d30

See more details on using hashes here.

Provenance

The following attestation bundles were made for neony-0.1.0-py3-none-any.whl:

Publisher: pypi.yml on HarcicYang/Neony

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 Pingdom Monitoring Sentry Error logging StatusPage Status page