Developer tools
iohr ui
iohr ui serves the InOrbit web UI on this machine and opens it in your browser. It is in iohr-preview today and needs a checkout of the SDK repository.
iohr ui serves the InOrbit web UI on this machine and opens it in your browser. The UI is
the desktop app's window in a browser tab: the frame, the header, the sidebar, the menus, a
dock on the right, and the panels of the extensions you have installed.
It is not in the release yet. It is in iohr-preview, and today it
serves a UI you build from a checkout of the SDK repository.
Start it
You need iohr-preview, a checkout of the SDK repository, pnpm, and Node 22.18 or newer.
Build the UI once in the checkout, then serve it from there:
cd sdk
mise run ui:build # installs the UI's locked dependencies, then builds it
iohr-preview ui # serves it and opens your browseriohr ui with no verb serves the UI and opens it. Stop it with Ctrl-C. To serve without
opening a browser, or to choose where it listens:
iohr-preview ui serve # serve only, until Ctrl-C
iohr-preview ui serve --open # serve and open
iohr-preview ui serve --port PORT # a fixed port; a taken one is an error
iohr-preview ui serve --dir path/to/dist # a UI built somewhere else (or IOHR_UI_DIR)
iohr-preview ui open # open the one already runningWithout --port the system picks a free port. Without --dir it uses the nearest ui/dist
above the folder you are in, so run it inside the checkout. When no built UI is found it says
so and tells you to run iohr ui build in the checkout or pass --dir.
IOHR_NO_BROWSER prints the address instead of opening a browser, for iohr ui and
iohr ui open.
Work on the UI itself
If you change the UI, these run the UI package's own scripts in the nearest ui/ folder (or
the one --package names):
| Command | What it runs |
|---|---|
iohr-preview ui build | Builds the UI |
iohr-preview ui dev | The UI's dev server, which reloads as you edit |
iohr-preview ui check | Types, lint and tests |
The same are mise run ui:build, ui:dev and ui:check in the checkout.
What you see
- The header says InOrbit and has an Extensions menu.
- The sidebar has Home and an Extensions section: every installed extension that declares a panel. With none, it says "No installed extension declares a panel." ⌘\ (Ctrl+\ elsewhere) hides and shows it.
- Home is marked Stub. It shows the frame and tells you how to use it; it has no content of its own yet.
- An extension's page has a Start button. Its panel then runs inside the page, in a sandboxed frame. Right-click an extension in the sidebar for Start (or Open, once it runs) and Stop.
- Details opens a dock on the right with what the extension's listing says about it. You can resize the dock.
Install an extension that has a panel with iohr ext install; see
Extensions.
What it serves and what it refuses
- This machine only. It listens on loopback, never on another address, and answers only requests addressed to its own address.
- Reads only. Pages are GET and HEAD. A path cannot leave the UI's folder or follow a link.
- Its own pages only. The UI's API answers only the pages it served. It lists the installed extensions that declare a panel, and starts or stops a panel only when you ask.
- Panels start like
iohr ext run. The same launch and the same trust check. One copy of each runs at a time, and every panel stops wheniohr uistops. - One record while it runs. It writes its address to a private file in your InOrbit data
folder, so
iohr ui openfinds it, and removes it when it stops.
Where it stands
| Part | State |
|---|---|
iohr ui, serve, open, build, dev, check | In iohr-preview, not released |
| The window: header, sidebar, menus, dock, extension pages | In iohr-preview |
| Starting and stopping a panel | In iohr-preview |
| Home | A stub |
| Serving from any folder, without a checkout | In progress, not in any build |
The UI shipped with the release and iohr upgrade | Planned, not in any build |
Work in progress lets iohr ui serve from any folder: a new iohr ui install puts a built UI
in your InOrbit data folder, the preview install builds and installs it too, and a missing UI
ends with exit code 1 and names the fixes. Until that lands, use a checkout as above.
iohr released (0.1.0-alpha.39) does not have iohr ui.