Three substrates.
Two capabilities.
One manifest.
Omega is a thin substrate organized along two axes — where the workload runs (Gaia, Biome, Habitat) and how it runs (Standard WASM, or Frontier MicroVM). The same ZGraph manifest can compile to any combination, and the workload code never has to know which.
Two questions,
answered per brane.
PlacementSubstrate
The host pool the brane lands on. Three choices: Gaia (Omega-operated), Biome (provider-operated), or Habitat (your own).
CapabilityProfile
The execution shape. Standard is the WASM-first default. Frontier is Firecracker MicroVMs for the workloads WASM can't host (V8 JIT, X11, GPU).
Where the
brane lands.
Omega-operated WASM substrate
Datacenters and edge clusters operated by us. WASI 0.2 components on Wasmtime 37, 1.2 ms cold starts, capability-scoped from the first byte. The default for most workloads.
Decentralized provider substrate
A topology of long-lived peers that find each other through your network of choice — Tailscale, NetBird, WireGuard, or plain LAN. Workloads address branes by manifest name. The substrate doesn't broker; it dispatches.
Customer-owned substrate
Run Omega on metal you already own — phones, Pis, RISC-V boards, racks. Same manifest, same CLI, same resolver. The substrate doesn't care if the host is in a datacenter or your closet.
Advanced capability — Firecracker MicroVMs
Reserved for the workloads WASM cannot host: V8 JIT, X11/Wayland desktops, GPU passthrough. Firecracker 1.7 with snapshot resume, ≤5MB jailer, multi-arch guests. Frontier is a flag, not a substrate — it lives on Gaia or Biome, never on Habitat.
Branes are nodes,
events are edges.
# multi-substrate-pipeline.zgraph.toml
[brane.ingest]
substrate = "gaia"
capability = "standard"
replicas = 32
image = "omega/wasi-fetch:1.0"
[brane.transform]
substrate = "biome"
capability = "standard"
replicas = "auto"
peers = "lab.lan/transform-pool-*"
[brane.train]
substrate = "gaia"
capability = "frontier" # Firecracker — V8/CUDA/X11
replicas = 4
guest = "noble-aarch64"
gpu = "passthrough"
[brane.archive]
substrate = "habitat"
capability = "standard"
hosts = ["nas-01", "nas-02", "nas-03"]
[graph]
edges = [
{ from = "ingest", to = "transform", on = "raw.batch" },
{ from = "transform", to = "train", on = "tensor.shard" },
{ from = "train", to = "archive", on = "checkpoint.snapshot" },
]
[resolver.public]
host = "pipeline.branes.sh"
mode = "tailscale-funnel"Each brane picks its (Gaia / Biome / Habitat) and its (Standard / Frontier). Everything else — replicas, capabilities, graph edges — is uniform.
are typed event channels. The substrate dispatches; your branes don't know which host published.
The block on any brane will give the workload a public host on *.branes.sh regardless of substrate.