cloudparts

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.

Type
Open source
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

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.test

See 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

  1. 2020

    Repository started (February); RFD 110 evaluates CockroachDB for the control plane database

  2. 2021

    May milestone demo: Omicron, CockroachDB and ClickHouse running natively on Helios

  3. 2023

    Ships with the first Oxide rack (system release v1.0.0, July)

  4. 2026

    Release v23 (September) adds IPv6-only rack networking

Sources7 · facts checked 13 October 2026

Improve this page on GitHub