This release is a pre-release and may not be stable for production use.
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: withregister_application(...)inubo_app/store/ubo_actions.pyon 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.0.1.dev260819103102541025
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ubo_gui_client-2.0.1.dev260819103102541025.tar.gz | 90.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ubo_gui_client-2.0.1.dev260819103102541025-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 195.7 kB
Release files / ubo_gui_client-2.0.1.dev260819103102541025.tar.gz
| Download URL | ubo_gui_client-2.0.1.dev260819103102541025.tar.gz |
|---|---|
| Size | 90.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
78f589dcba71581d26a39b85b637075b56d31b99b2b31cf765248d8ba9cea2b9
|
|
BLAKE2b-256 checksum How to use checksums |
23ef81d1c63a30a6b0d7cac234ff0bf3702af2d0a0c0acb87a823456ce3685ea
|
| 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 19, 2026.
Transparency logRelease files / ubo_gui_client-2.0.1.dev260819103102541025-py3-none-any.whl
| Download URL | ubo_gui_client-2.0.1.dev260819103102541025-py3-none-any.whl |
|---|---|
| Size | 105.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c87e285ebabc70946dfe56ddcfba2174ed79683210a216039ed6400d46c93cc9
|
|
BLAKE2b-256 checksum How to use checksums |
b9f5c7949faadb8a58035e68e49ac97649b1818aa031e10c0520d3a0dc81064a
|
| 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 19, 2026.
Transparency log