Every track stays a track
Each source is a discrete audio track with its own metadata — not an offset applied to a downmix. Nothing is merged early, and nothing is merged at all until the listener's device does it.
The format
An open, licence-free format for immersive audio with real, discrete objects. We hold no patents on it, charge nothing per unit shipped, and place no restriction on commercial use. Here is what it does and how it is built.
Three natures
Each source is a discrete audio track with its own metadata — not an offset applied to a downmix. Nothing is merged early, and nothing is merged at all until the listener's device does it.
Objects carry triggers and can change their behaviour at runtime — reacting to sensors, biometrics, environment or session state, resolved on the device rather than baked in months earlier.
Each object can be fetched, prioritised and delivered in adaptive quality on its own. Silence costs nothing, and the render always happens locally on the client.
The whole point
Every immersive format ends up as channels for speakers. The question is when — and everything else follows from the answer.
Rendered: the objects are folded into fixed channels in the studio, for a layout somebody guessed at. Everything after that carries channels. The room the listener is actually sitting in never enters the calculation.
saimox: the objects stay objects through delivery and arrive as objects. The fold happens on the listener's own device, for the speakers that are actually there — which is also the only place where a trigger can know that a head just turned.
Core principles
An open format is not the same as open content. The specification is free for anyone to implement. Individual pieces can still be protected — exactly as an open ZIP may contain encrypted files.
Under the lid
Both files are ordinary ZIP archives. You can open one with any unzip tool and read what is inside — that is a design goal, not an oversight.
| Inside | What it holds |
|---|---|
| manifest.json | Identity, version, codec, catalogue metadata, loudness across five folds |
| spatial.json | Every track: position over time, movement, gain, triggers, reactions |
| Audio | One stream per object, or independently addressable blobs for delivery |
| envelope.bin | Directional energy over time, so a player can draw the piece before decoding it |
| Cover | Artwork, 600 × 600, carried inside the file |
MIME type application/vnd.smx+zip · Apple UTI com.desteba.smx
libsaimox
The reference implementation is one small portable library written in Rust. Every player we ship — macOS, iOS, Android, browser — runs the same one, which is how a piece sounds identical across platforms rather than approximately similar.
A C ABI plus a WebAssembly door, no exotic dependencies and no runtime to install. It already runs on Apple silicon, on ARM Android, and in every current browser.
The whole renderer, including the Opus decoder, is measured in a couple of megabytes. Memory scales with how many objects are actually playing, not with how many the file contains.
Each build reports a conformance fingerprint derived from the movement formulas themselves. Two devices reporting the same fingerprint compute the same positions — not close, identical. You can check your integration against ours in one call.
Ship it in a million devices and you owe us nothing. There is no decoder licence to buy from us, no certification programme to join and no logo you have to pay to print on the box.
Rendering always happens locally. The library takes a saimox file and a description of the speakers actually present — any geometry, any channel count — and produces the output for that specific room. Nothing is pre-rendered for a layout somebody guessed at in a studio.
For manufacturers and integrators
Shorter than you expect, because the hard part is already done.
| You provide | The library does |
|---|---|
| A file, or a stream of blocks | Parses the container and the spatial description |
| Your speaker layout, in coordinates | Renders every object to those exact positions by distance-based panning |
| An audio callback | Fills it, with no allocation and no locks in the hot path |
| Sensor values, if you have them | Resolves the triggers the author attached to each object |
| Nothing else | Loudness, downfolds, silence skipping and cover art come with it |
Head tracking, adaptive quality and per-object streaming are all in there and all optional. Take the parts you need.
The full specification
The complete specification runs to a few hundred pages across two documents — the container and spatial description, plus the trigger and reaction contract. It is free to implement, with no licence to sign and no fee at any point.
We are not publishing it as a download yet, because it is still moving and we would rather talk to the people building against it than watch an outdated PDF circulate. Write to us and say what you are building — you get the current documents and a direct line to the person who wrote them.
Who this is for
Hear it in your browser → · See what already plays it → · How it compares to ADM and IAMF → · How to author with it →