A private control plane for the devices your software still has to touch.
Printers, scales, scanners, and edge hardware—local-first, secure, and observable.
Caution
Inari is alpha software. Expect protocol, configuration, and storage changes before the first stable release.
Inari connects the ordinary hardware around a business—receipt printers, office printers, scales, scanners, and other USB or network devices—to the software that needs it. Odoo and similar systems work with a stable local API; the edge agent deals with drivers, queues, retries, and the awkward realities of hardware.
The agent runs beside the devices and keeps working through controller or network interruptions. Device Center gives the person at that machine a tray, setup assistant, and local device view. Organizations that need fleet-wide operation can add the Rust controller for enrollment, policy, audit, and remote work over Zenoh.
Odoo / local application
│
▼
Inari Agent ─── drivers ─── printers, scales, scanners
│
├── Device Center on the local desktop
│
└── HTTPS enrollment + Zenoh ─── Inari Controller
│
├── PostgreSQL
├── OIDC
└── step-ca
The agent is the service. Device Center is a user-session client. Managed mode extends the local runtime; it does not replace it.
The repository is a Rust, Python, and Bun workspace. Install the tool versions
declared in mise.toml, add the browser target, and synchronize
the workspace:
mise install
rustup target add wasm32-unknown-unknown
cargo install cargo-leptos --locked
mise exec -- just syncRun the controller and hydrated Leptos interface with:
cargo leptos watchThe edge components have focused guides:
Before submitting a change, run:
mise exec -- just checkThat is the repository-wide gate for Rust, Python, the web build, release tools, and deployment manifests. Rust compilation is always validated with Clippy.
The controller keeps browser pages and APIs under different owners:
/api/inari/v1is the typed JSON API for Inari resources;/api/zenoh/v1/{selector}is the optional Zenoh HTTP compatibility surface;- Leptos serves pages outside
/apiand hydrates them in Rust/WebAssembly.
Unknown API paths return RFC 9457 problem details, never an HTML page. The Zenoh surface keeps selector semantics intact rather than turning the keyspace into a second Inari resource API.
The production controller runs as a stateless Axum/Leptos service backed by externally managed PostgreSQL. The Zenoh router runs separately with stable network identity. OIDC and step-ca remain organization-owned services.
Build the server and browser assets together:
cargo leptos build --releaseDeploy the binary with target/site and set LEPTOS_SITE_ROOT to that asset
directory. Apply embedded database migrations before rolling application pods:
inari-server database migrate
inari-server database statusThe maintained Kubernetes distribution is the Helm chart in
deploy/helm/inari. A Kustomize-owned alternative lives in
deploy/kustomize/inari. Choose one lifecycle owner
for a given installation.
Windows users install the signed Inari Device Center MSIX, which contains both the tray application and the background agent service. See the Windows installation guide before trusting the private alpha signing hierarchy.
- Architecture
- Contributing
- Roadmap
- Kubernetes operations
- Windows installation
- Release process
- Controller database
- Managed gateway protocol
- Managed deployment
- Zenoh HTTP compatibility
- Odoo print compatibility
- Brand guide
Inari is available under the MIT License.