Skip to main content

ubo-gui-client

The Kivy GUI client for ubo-app. It is a thin renderer: it holds no application state and contains no business logic. It connects to the headless core over gRPC, subscribes to the computed view stream, draws it, and dispatches the user's input back as actions.

It is the reference implementation of the client contract — its C/LVGL sibling (ubo_lvgl/) and the TUI (ubo_app/tui/) render the same stream.

Running

uv run ubo-core                      # the headless core, serves 127.0.0.1:50051
uv run --directory ubo_app/gui ubo-gui-client
Flag Meaning Default
--host gRPC server host localhost
--port gRPC server port 50051
-v / --verbose DEBUG logging off

It installs into its own virtualenv, separate from the core's — it depends on headless-kivy and ubo-gui, which the headless core deliberately does not. OTA updates and poe device:deploy install it as a separate wheel. Type-check it with uv run poe typecheck:gui, which targets that venv.

What it renders

The core sends serializable ViewData; nothing callable or Kivy-shaped crosses the wire. view_renderer.py turns each view into widgets:

Area Modules
App shell & lifecycle app.py, __main__.py, splash.py, display.py
gRPC transport client.py
View dispatch view_renderer.py
Menu chrome menu_central.py, menu_header.py, menu_footer.py, menu_notification_handler.py
Input keyboard.py
Device eeprom.py, constants.py, gui_utils.py

widgets/ holds the generic render widgets, registered by kind in GENERIC_RENDER_WIDGETS: qr_code, qr_code_carousel, readings, status, text_viewer, image_viewer, frame_stream — plus chat, home_page, notification_info and the video_viewer.

Two rules that bite

  • The application registry is local. The core's store holds an ApplicationStackItem(application_id=...), never a widget class. Full-screen pages must be registered twice: with register_application(...) in ubo_app/store/ubo_actions.py on the core side, and again in this process's own registry (pages/__init__.py), which exists precisely because the core's registry is not importable from this venv.
  • Kivy work belongs on the main thread. gRPC callbacks arrive on other threads; anything touching widgets has to hop back via @mainthread.

See .claude/rules/coding-style.md for the serializable-state rules this client depends on, and docs/architecture/UI_REDUX_ARCHITECTURE.md for the store/view model.

Metadata

Release files for ubo-gui-client 2.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ubo-gui-client 2.1.0
File Size Uploaded
ubo_gui_client-2.1.0.tar.gz 90.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ubo-gui-client 2.1.0
File Interpreter ABI Platform
ubo_gui_client-2.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 195.3 kB

Release files / ubo_gui_client-2.1.0.tar.gz

Download URL ubo_gui_client-2.1.0.tar.gz
Size 90.4 kB
Tags Source
SHA-256 checksum
How to use checksums
255f364aa6a94b53178c1092c9bf5617af12a617ba48a728cc4198245a3cd2b3
BLAKE2b-256 checksum
How to use checksums
1dd0f7785fc72524b3728d9c65def3f880565df07ce08d9cd5d50175b2fd9ef1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 20, 2026.

Transparency log

Release files / ubo_gui_client-2.1.0-py3-none-any.whl

Download URL ubo_gui_client-2.1.0-py3-none-any.whl
Size 104.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6304f34db5814ff19064bbb2fde7fc697f56500227a1e7f8c728653619067317
BLAKE2b-256 checksum
How to use checksums
03bcefc0b0f162483006dfa0550f3ebbde5413e467842d116130077e35317fa9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 20, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.1.0 This release

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page