A Linux system management API with async job processing over NATS JetStream.
Work reaches a host by being queued, not by being called.
OSAPI makes a Linux host behave like an appliance. One binary and a config file give you a REST API, a CLI, a Go SDK and an embedded dashboard over hostname, DNS, disk, memory, load, packages, services, users, sysctl, cron, certificates, containers, files and command execution, across a fleet rather than one box.
CLI / SDK / UI -> Controller (REST API) -> NATS JetStream -> Agents
The controller never touches the operating system. It writes a job and waits. An agent on the managed host picks the job up and a provider does the work. Delivery is at-least-once, so every provider has to be safe to run twice, and that constraint is what the rest of the design is built around.
Target one host by name, broadcast to the whole fleet, load-balance across any free agent, or route by label.
| Project | Release | Stars | Description |
|---|---|---|---|
| osapi | The controller, the agent, the CLI, the SDK and the embedded dashboard | ||
| osapi-orchestrator | Runs multi-step operations across OSAPI-managed hosts | ||
| gohai | Collects system facts, in the spirit of Chef Ohai | ||
| nats-client | Connects to NATS and JetStream | ||
| nats-server | Runs a NATS server inside a Go process | ||
| osapi-justfiles | The just recipes every repository here imports |
||
| specs | The design docs, written before the code |
Start with osapi. Everything else is either something it imports or something that reads it.
Design first. A change starts as a page in specs, gets built, and then the page is corrected wherever building proved it wrong. It is the same page all three times, so nothing is converted from one form into another, and the design and the documentation cannot drift apart.
# run the controller, the agent and NATS together
osapi start
# ask one host its hostname
osapi client node hostname --target web-01
# ask every host for its users
osapi client node user list --target _all
# open the dashboard
open http://localhost:8080Documentation | API reference | Contributing | Security | Code of conduct | AI policy