Omicron
The control plane of the Oxide rack: a set of Rust services that serve the public API, keep all configuration in CockroachDB and tell each sled what VMs, disks and network ports to run.
- What it is
- Virtual machines
- Type
- Open source
- Made by
- Oxide Computer Company
- License
- MPL 2.0
- Facts checked
- 13 October 2026
What it is
Omicron is everything in the Oxide rack that decides rather than does. Its center is Nexus, one program that hosts every user-facing API (for users and operators), the web console and the internal APIs other components report to. Nexus keeps no state of its own: all configuration, inventory and runtime state lives in a replicated CockroachDB cluster, and Nexus is the only component that talks to it. So any number of Nexus copies can run, coordinating only through the database. A change follows four steps: Nexus receives the request, validates it, writes it to CockroachDB (the point where it is ordered against concurrent changes), and then propagates it to the components that need to know.
On every sled a sled agent does the local work. To start a VM it creates an illumos zone for a Propolis server and sets up the VM’s OPTE network ports; Propolis then connects the VM’s disks to Crucible. Other services run as zones that can be placed on any sled and multiplied for availability: Oximeter collects metrics into ClickHouse, internal DNS lets components find each other, external DNS answers for the API and console names, and Crucible Pantry handles detached volumes. On the two sleds wired to the switches, Dendrite programs the switch and the Management Gateway Service talks to every service processor. All Oxide-written services are in Rust and talk HTTP with OpenAPI specs generated by Dropshot.
Multi-step operations, such as creating an instance with its disks and IP addresses, run as distributed sagas whose log records which steps have run, and periodic background tasks re-check the state of the world and reconcile it, rather than retrying single calls. The design goals are to stay available through any two hardware or software failures and to support on the order of 100 servers and 10,000 VMs per rack. Omicron also has a simulated mode, with a fake sled agent, that runs on Linux and macOS for development; the real one runs only on Helios.
Why teams pick it
- Stateless API servers over one strongly consistent database, so a change is either recorded or not, and Nexus can be scaled out without coordination
- Sagas and reconcilers give long operations a durable log and let the system converge again after a sled, switch or service fails
- The cold start path is designed in: sleds unlock storage through a trust quorum, then bring up time, internal DNS, CockroachDB and Nexus in order from data each sled keeps locally
- Every API is described by a generated OpenAPI document, which Oxide uses to spot breaking changes between components that are updated at different times
Watch out for
- It is built for Oxide hardware: the non-simulated control plane manages real sleds, switches and service processors and runs only on Helios
- Oxide says it is focused on its own goals and not able to help outside contributors, so it is open source to read and audit rather than a community project
- Much of the design history is in RFDs that are not public, and some docs in the repository still point to them
- Data kept outside the database, such as ledgers on each sled’s internal drives, needs hand-written migration code when its format changes
How it fits with other technologies
What Omicron uses
- Omicronkeeps all control plane state inCockroachDB
- Omicronstores rack metrics inClickHouse
- Omicronserves all its APIs withDropshot
- Omicronstarts each VM as a zone runningPropolis
- Omicronallocates disk regions withCrucible
- Omicroncreates VM network ports inOPTE (Oxide Packet Transformation Engine)
- Omicronruns in production only onHelios
Run a simulated Omicron (Nexus, a simulated sled agent, CockroachDB and DNS) on a laptop, from the repository’s docs · bash
$ source env.sh
$ ./tools/install_builder_prerequisites.sh
$ cargo xtask omicron-dev run-all
omicron-dev: setting up all services ...
omicron-dev: services are running.
omicron-dev: nexus external API: 127.0.0.1:12220
omicron-dev: nexus internal API: [::1]:12221
omicron-dev: cockroachdb: postgresql://root@[::]:54649/omicron?sslmode=disable
omicron-dev: internal DNS: [::1]:37503
omicron-dev: external DNS name: oxide-dev.testSee it in a real stack
No architecture uses Omicron yet. Drop it into the playground and wire it up yourself.Open playground →Where it came from2020–2026
An Oxide rack had to feel like a public cloud: an API for instances, disks and networks, plus operator APIs for setup, updates, faults and support. No existing control plane fit hardware that Oxide was designing itself, so the company wrote one. Oxide’s RFD 48 set the requirements, and the repository, started in February 2020, collects the services that implement them.
The database was the first big decision. RFD 53 asked for a low-touch, highly available, horizontally scalable and strongly consistent store, and RFD 110 (2020) recorded the tests: after a survey of CockroachDB, YugabyteDB and TiKV/TiDB, Oxide ran CockroachDB through expansion, contraction and fault tests and saw no data loss and no need for an operator to restore availability, while noting its licensing as “a mess” and latency spikes during rebalancing. By May 2021 Omicron ran natively on Helios alongside CockroachDB and ClickHouse.
Omicron shipped with the first rack in 2023 and is updated as part of each system release. Its living architecture document, moved out of RFDs 48 and 61 into the repository, describes Nexus, the sled agent, sagas and the cold start sequence.
Why it’s built this way
- One strongly consistent database as the source of truth
- Users expect a created instance to be visible to everyone immediately. Keeping every bit of state in CockroachDB makes the system CP, and lets Nexus copies stay stateless and independent.
- HTTP and OpenAPI between internal services
- HTTP is slower than a custom protocol, but internal request rates are low, and generating OpenAPI from server code lets Oxide reuse its external API tooling and detect breaking changes before incompatible versions meet during an update.
- Reconcilers instead of one-off retries
- Background tasks re-evaluate the whole state each run and retry periodically, which tolerates the partial failures common in a rack better than retrying individual calls.
- Everything in illumos zones
- Zones are lightweight containers with their own network stack, so each service, and each VM’s Propolis, can be isolated and placed on any sled.
Timeline
- 2020
Repository started (February); RFD 110 evaluates CockroachDB for the control plane database
- 2021
May milestone demo: Omicron, CockroachDB and ClickHouse running natively on Helios
- 2023
Ships with the first Oxide rack (system release v1.0.0, July)
- 2026
Release v23 (September) adds IPv6-only rack networking
- Oxide RFD 110: CockroachDB for the control plane database
- Oxide RFD 53: Control plane data storage requirements
- Oxide RFD 48: Control Plane Requirements
- Oxide RFD 26: Host Operating System & Hypervisor (May 2021 demo)
- Omicron docs: Control plane architecture
- GitHub: oxidecomputer/omicron (created February 2020)
- Oxide docs: release notes v23 (Sep 2026)
Sources7 · facts checked 13 October 2026
- Omicron docs: Control plane architecture (Nexus, sled agent, sagas, cold start)
- Oxide docs: Control plane architecture (components and telemetry)
- Omicron README (simulated and non-simulated modes, contributions)
- Omicron docs: Running Omicron (simulated)
- Omicron source: sled-agent/src/instance.rs (Propolis zones, OPTE ports)
- Oxide RFD 177: Implementation of Data Storage (Nexus and the Crucible agent)
- GitHub API: oxidecomputer/omicron license (MPL-2.0)