Your program.
With a little UI.

Turn the code you already have into a tool you can see, touch, and share. State and actions stay in your language. Omochi brings them to the browser.

Local tools. Browser views. Apache 2.0.
● ● ●FROM A PROGRAM TO A WORKSPACE01 — 03
counter.py PYTHON
import asyncio
from omochi_ui import App

app = App({"count": 0})

@app.action("increment")
async def increment(input, ctx):
    await ctx.update(lambda s: s.update(count=s["count"] + 1))

@app.surface("main")
def main(ui, state):
    ui.text(f'Count: {state["count"]}')
    ui.button("Add one", increment.call({}))

asyncio.run(app.start())
A view in your browser A2UI
EXAMPLE VIEW

Count: 0

Add one +

Run Python code with a button.

Program → A2UI → Browser
01 / A SMALLER DISTANCE

Keep the logic close.

Define a view where your application already lives. The shared renderer takes care of showing it.

01

Declare a view

A view is called a Surface in the SDK. Describe text, inputs, and controls in Python, TypeScript, or Rust.

02

Connect an action

Use your existing functions. Publish state updates, including progress during a long task.

03

Let the browser render

Omochi sends A2UI updates. Unfinished form input stays in the browser.

02 / A PLACE FOR YOUR TOOLS

One script is a start.
A workspace is next.

Bring views from running applications into a dashboard. Add a command button, follow a log, or give an agent a place to show its work.

Omochi dashboard showing application views and dashboard navigation
The Omochi dashboard · actual application screenshot
03 / FIND YOUR STARTING POINT
MAKE SOMETHING USEFUL

A little UI goes a long way.

Open the docs ↗