omega-agent) plus a small stable supervisor (omega-launcher). What a given binary can do is decided entirely at build time by the Cargo features you enable. This page explains that feature system, how to compose a build (“SKU”) for a device class, and the full feature reference.
Build from source
target/release/omega-agent. Build the supervisor the same way:
For the smallest shipped binary, enable stripping in
Cargo.toml’s release profile — it removes ~20% on its own, more than any single feature. Feature selection is about what a binary can do and its dependency/attack surface; stripping and opt-level="z" are the levers for raw size.The feature model
Every capability beyond the always-present core is a Cargo feature. The rule is simple and strict:- A feature that is not compiled in does not exist in that binary. If a device profile lists a module or capability whose feature is off, Omega refuses to start with an exact error — it never runs half-configured.
- The build is the source of truth. The profile declares what should run; the binary must be able to honor it.
Always compiled (the core)
These are not features — every build has them:Opt-in features
Enable these explicitly for a device class that needs them:Hardware-key backends are per-OS: build
keystore-cng on Windows, keystore-secure-enclave on macOS, keystore-pkcs11 on Linux. Without a hardware backend compiled in, a device honestly reports a software key class and require_hardware cannot be satisfied.Deprecated features
A set of modules ported from the previous (Go) generation of Omega remain buildable but off by default and are slated for removal. Do not build new work on them:app-reporting, device-control, file-watcher, heartbeat, http-server, ipc, metadata, network-stats, object-storage, registration, rpc, ssh, user-session, rtc (and rtc-jwt / rtc-streaming), robotics. Each is still available with --features <name> if a device genuinely needs it during migration.
Composing a SKU
A “SKU” is just a feature set. Start from--no-default-features and add exactly what the device class needs:
Validate a build against a profile
Before shipping, confirm the binary can honor the profile it will run:✓ config valid on success, or one ERROR: line per problem — each naming the exact module or capability that the profile requires but the build does not provide. Wire this into CI so a SKU/profile mismatch fails the build rather than a device.
There is also a standalone profile validator, omega-codegen, for checking a client profile in isolation:
What a feature pulls in
Most features gate only Omega’s own code (smaller binary, no new dependency). A few pull real dependencies — worth knowing for build size and toolchain:
Everything else compiles from Omega’s own source with no exclusive third-party dependency.
The one core piece with a native cost is
sqlite-replication: it brings bundled SQLite (C) + zstd (C). Because it is always compiled, that cost is in every build — there is no SKU without it.
See also
- Configure Omega — writing the profile the build must satisfy.
- Connect — transports and the topic namespace.