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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ubo_gui_client-2.0.1.dev260819103102541025.tar.gz.
File metadata
- Download URL: ubo_gui_client-2.0.1.dev260819103102541025.tar.gz
- Upload date:
- Size: 90.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78f589dcba71581d26a39b85b637075b56d31b99b2b31cf765248d8ba9cea2b9
|
|
| MD5 |
7b315b7ab3feb2798d7bfeefe4626148
|
|
| BLAKE2b-256 |
23ef81d1c63a30a6b0d7cac234ff0bf3702af2d0a0c0acb87a823456ce3685ea
|
Provenance
The following attestation bundles were made for ubo_gui_client-2.0.1.dev260819103102541025.tar.gz:
Publisher:
integration_delivery.yml on ubopod/ubo_app
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ubo_gui_client-2.0.1.dev260819103102541025.tar.gz -
Subject digest:
78f589dcba71581d26a39b85b637075b56d31b99b2b31cf765248d8ba9cea2b9 - Sigstore transparency entry: 2519622858
- Sigstore integration time:
-
Permalink:
ubopod/ubo_app@f6f70c48c527fadc96dd1a82737fa1f117c689ef -
Branch / Tag:
refs/heads/development - Owner: https://github.com/ubopod
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
integration_delivery.yml@f6f70c48c527fadc96dd1a82737fa1f117c689ef -
Trigger Event:
push
-
Statement type:
File details
Details for the file ubo_gui_client-2.0.1.dev260819103102541025-py3-none-any.whl.
File metadata
- Download URL: ubo_gui_client-2.0.1.dev260819103102541025-py3-none-any.whl
- Upload date:
- Size: 105.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c87e285ebabc70946dfe56ddcfba2174ed79683210a216039ed6400d46c93cc9
|
|
| MD5 |
7d7769f51bb327e093769246c5c318d4
|
|
| BLAKE2b-256 |
b9f5c7949faadb8a58035e68e49ac97649b1818aa031e10c0520d3a0dc81064a
|
Provenance
The following attestation bundles were made for ubo_gui_client-2.0.1.dev260819103102541025-py3-none-any.whl:
Publisher:
integration_delivery.yml on ubopod/ubo_app
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ubo_gui_client-2.0.1.dev260819103102541025-py3-none-any.whl -
Subject digest:
c87e285ebabc70946dfe56ddcfba2174ed79683210a216039ed6400d46c93cc9 - Sigstore transparency entry: 2519559749
- Sigstore integration time:
-
Permalink:
ubopod/ubo_app@f6f70c48c527fadc96dd1a82737fa1f117c689ef -
Branch / Tag:
refs/heads/development - Owner: https://github.com/ubopod
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
integration_delivery.yml@f6f70c48c527fadc96dd1a82737fa1f117c689ef -
Trigger Event:
push
-
Statement type: