Install the desktop app
The Nori desktop app bundles everything needed to talk to robot hardware — no Python, no terminal, no pip. Download it, drag it in, open it.
Installers are not available yet
There is no signed installer for macOS, Windows, or Linux yet. Until there is, run from source.
What the app actually does when it starts
Worth knowing, because most "the app won't open" reports are one of these steps failing:
- It spawns a frozen Python backend bundled inside the app, which serves the API and UI on
127.0.0.1:8000. - It waits for that port to answer (up to 60 s).
- It opens a window pointing at it.
So the app is a local web app in a native window. If port 8000 is already in use by something else, that's a problem — see When it goes wrong below.
Run from source
Requires Python ≥ 3.12 and Node.
git clone https://github.com/nori-robotics/NoriLeLab
cd NoriLeLab
pip install -e .
lelab # serves API + UI on :8000 and opens a browserFor frontend development, lelab --dev runs Vite on :8080 against a reloading backend on :8000.
When it goes wrong
The window is blank, or the app quits on launch
The backend never came up on :8000. After 60 seconds of waiting, the app gives up.
The usual cause: something else is already using port 8000. Another copy of the app, a stray lelab process from a previous run, or an unrelated dev server.
Check what's holding the port:
lsof -i :8000 # macOS / Linux
netstat -ano | findstr :8000 # WindowsKill it, then relaunch.
The OS refuses to open the app
If the build isn't signed and notarized yet, macOS Gatekeeper and Windows SmartScreen will both block it.
A stray backend keeps running after I quit
It shouldn't. The app kills the backend child on window-destroyed and on app-exit, and the backend additionally self-exits if its parent dies. All three exit paths are covered.
If you still find an orphan on :8000, that's a bug worth reporting — tell us how you quit.
The app can't see my hardware
That's not a desktop-app problem — go to Leader arms.
