Skip to main content

Experimental Python UI runtime with reactive components and live previews.

Project description

Otoe

Otoe is a pre-alpha Python-first frontend runtime for local operational interfaces: hardware control panels, kiosks, appliances, dashboards, offline tools, and operator consoles.

It is for Python developers building controlled product surfaces around local services, device adapters, diagnostics, workflows, and operator actions. The goal is to make those interfaces feel modern, testable, and deployable without making a browser the mandatory runtime or forcing the product into an unrelated frontend stack.

Otoe is not a stable framework yet. Treat it as an active runtime experiment with a usable HTML preview path, early portable UI primitives, deterministic native render evidence, and technical-preview offline bundle tooling.

For the product thesis and anti-goals, read Product North Star.

What Works Today

  • Python component functions with explicit widget props and event contracts.
  • signal, computed, effect, lifecycle cleanup, Show, and keyed For.
  • otoe.ui primitives for app frames, cards, badges, action buttons, tabs, tables, dialogs, toasts, command palettes, sidebars, menus, selects, lists, metrics, and dense operational surfaces.
  • Static HTML rendering for fast visual preview.
  • Local live HTML preview for development-time interaction checks.
  • A documented portable CSS subset through css(...), StyleSheet, class selectors, selected portable properties, simple values, and style artifacts.
  • Headless native layout, paint, PNG output, hit testing, click, focus, keyboard, input, and scroll dispatch through NativeSurface.
  • Offline planning, dependency audit, build, generated runner validation, and pack commands for the first constrained Linux hardware profile.
  • Experimental renderer/backend evidence tooling for contributors.

Not Ready Yet

  • Stable API guarantees.
  • Production native rendering, GPU rendering, retained desktop windowing, or complete native text shaping.
  • Platform accessibility tree output.
  • Full browser CSS compatibility, DOM APIs, or browser extension points.
  • A complete native-parity component library.
  • Offline bundles as a security sandbox.
  • A generic replacement promise for Qt, Flutter, Electron, React, or browser apps.

Quickstart

Use Python 3.11 or newer. Start with the generated app and keep advanced native/backend surfaces out of your first pass.

python -m pip install otoe
otoe new hello_otoe
cd hello_otoe
otoe check
otoe render app:app --out preview.html --css styles.css --pretty
otoe render app:app --out preview.png --native --css styles.css
otoe dev app:app --css styles.css
otoe build app:app --out dist/cage --css styles.css --validate

What each step proves:

  • otoe new writes app.py, styles.css, and a small app README.
  • otoe check compiles the scaffold and catches basic Python errors.
  • otoe render ... preview.html is the fastest static visual check. It is a usable preview surface, not a production deployment claim.
  • otoe render ... --native writes a deterministic PNG through the current headless native path. Use it for fixtures and evidence, not as a production renderer.
  • otoe dev starts a local live HTML preview for interaction checks. Keep it bound to localhost; it is not a public server or sandbox.
  • otoe build ... --validate writes a minimal offline bundle and runs the generated runner's verify/load/layout checks. This is a technical preview, not a sandbox or mature deployment platform.

Use otoe check --tests once your generated app has a tests/ directory.

For local development from a checkout:

python3 -m venv .venv
. .venv/bin/activate
python3 -m pip install -e ".[dev]"
python3 -m pytest -q

Repository examples such as examples.quickstart:app are available from a source checkout, not from the installed wheel:

PYTHONPATH=src:. python -m otoe render examples.quickstart:app --out preview.html --pretty
PYTHONPATH=src:. python -m otoe render examples.quickstart:app --out preview.png --native
PYTHONPATH=src:. python -m otoe dev examples.live_counter:app --port 8767

Surface Maturity

Surface Status Use it for Not for
Python components and reactivity Public pre-alpha Prototypes, local tools, app structure, tests Stable API commitments
otoe.ui primitives Product-preview Operational layouts, dense panels, reference apps Guaranteed native parity for every component
Static HTML render Usable preview Fast screenshots, reviews, simple visual checks Final runtime proof
Live HTML preview Local dev only Iterating on interactions on localhost Public serving, sandboxing, or deployment
Portable CSS subset Public pre-alpha Styles that can feed HTML, native evidence, and build artifacts Full browser CSS compatibility
Native PNG and NativeSurface Experimental evidence Layout, paint, input, and fixture validation Production desktop rendering
Offline build/pack Technical preview Auditable local bundle experiments for constrained Linux targets Security sandboxing or mature release packaging
Backend evidence tooling Experimental contributor path Advanced renderer/backend contract checks First app-author workflow

Tiny Example

from otoe import Button, Text, VStack, component, computed, mount, signal


@component
def Counter():
    count = signal(0)
    label = computed(lambda: f"Clicked {count.value} times")

    return VStack(
        Text(label),
        Button("Increment", onClick=lambda: count.set(count.value + 1)),
        gap=8,
    )


tree = mount(Counter())

Product Shape

Otoe should not be read as a generic replacement for Qt, Flutter, Electron, or browser apps. Its strongest current niche is Python-first operational software:

  • hardware control panels
  • kiosks and appliance UIs
  • internal dashboards
  • offline-testable local tools
  • operator consoles and diagnostics
  • renderer/backend experiments that need deterministic evidence

Wraith inspired some of the first real constraints, but it is a case study, not the product identity. Otoe should stand on its own for many appliance-shaped products.

Use STYLE_GUIDE.md when authoring --css files. Otoe accepts only the current portable CSS subset for native, plan, and build paths. Richer browser-only preview stylesheets can exist, but they are not part of the portable contract yet.

Use otoe portable-core to inspect the current Portable Core UI v0 support matrix from the installed package.

The Phase 5 professional reference apps are documented in REFERENCE_APP_PATTERNS.md and surfaced through the hardware, admin, data workflow, utility, SaaS, and UI examples.

Documentation

App Authors

Operational UI/Product Demos

Native/Offline Evidence

Renderer/Backend Contributors

This is the advanced route for backend candidates, RenderTree, styleOps, coverage declarations, and Path0. App authors do not need this path to start.

Project Process/Release

Repository Map

  • src/otoe/ - runtime package.
  • tests/ - runtime, renderer, build, and example regression tests.
  • examples/ - source-checkout validation surfaces and case studies.
  • preview/ - generated preview artifacts.
  • docs/ - product-facing guides and support matrices.
  • ADR-*.md - design decisions. ADR-019-native-pillow-text-backend.md records the first real native text backend choice, and ADR-020-native-layout-v0-v1-decision.md records the stack-first native layout v0/v1 boundary.

Status

Current status: v0.1.9 pre-alpha product/evidence hardening. The project maintains broad test coverage and the suite is expected to pass locally; optional typing and Pillow tests skip cleanly when those dependencies are unavailable. See ROADMAP.md for the active phase plan.

Readable native PNG text is available through the optional Pillow-backed renderer path; the default native renderer stays dependency-free and deterministic.

License

MIT License. Copyright (c) 2026 Forvara.

Project details


Download files

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

Source Distribution

otoe-0.1.9.tar.gz (658.8 kB view details)

Uploaded Source

Built Distribution

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

otoe-0.1.9-py3-none-any.whl (198.7 kB view details)

Uploaded Python 3

File details

Details for the file otoe-0.1.9.tar.gz.

File metadata

  • Download URL: otoe-0.1.9.tar.gz
  • Upload date:
  • Size: 658.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for otoe-0.1.9.tar.gz
Algorithm Hash digest
SHA256 3f954d211bf42d23fb688621cd76ab1b3d27a9996a70c948dbbcf584cad81466
MD5 0871b1e8e7d8a5e1477abf1633f97f89
BLAKE2b-256 ea1bb529dea79cc8563794027aeca3248ae22d09c0ddab59bc837279a3315bf3

See more details on using hashes here.

Provenance

The following attestation bundles were made for otoe-0.1.9.tar.gz:

Publisher: publish.yml on NeonShapeshifter/Otoe

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

File details

Details for the file otoe-0.1.9-py3-none-any.whl.

File metadata

  • Download URL: otoe-0.1.9-py3-none-any.whl
  • Upload date:
  • Size: 198.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for otoe-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 a33cf7b3c9fee2c5ccb92b7e9882885e6f8de901e917fa80456a459c548eea22
MD5 88084d80e2949a6fe8f5eae1451b4b0a
BLAKE2b-256 e992ae021e25bdf89b3cac3f0924d4b7f69acacac6860f9cba975f6fdc2b2f79

See more details on using hashes here.

Provenance

The following attestation bundles were made for otoe-0.1.9-py3-none-any.whl:

Publisher: publish.yml on NeonShapeshifter/Otoe

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