Choosing a ring
Start from what you want to do
Take the smallest ring that answers your question — you can always move outward later, and nothing you wrote against a lower ring changes when you do, because the lower ring is unchanged by the higher one (see rings for why that holds structurally).
| If you want to… | You need |
|---|---|
| read, write, or convert CX documents | Ring 0 |
| give data a stable identity, or diff two versions | Ring 0 |
| validate against a schema | Ring 0 |
| embed CX somewhere that must not run code | Ring 0 |
| query, transform, or generate with programs | Ring 1 |
| run a program with controlled access to files or the network | Ring 1 |
| store data, keep history, or serve it | Ring 2 |
| host an XAP feature | Ring 2 |
| publish, discover, or install a feature | Ring 3 |
| call CX from Go, Python, Rust, or V | Ring 3 |
If the table already answered you, jump to that ring's group in the sidebar — each ring's pages open with what the ring is and end with the packs it gives you. If you recognize yourself in one of the four readers below, follow the path — each is ordered, each stop earns the next, and each ends in something you can do.
The first-time evaluator
\"What is this, and is it for me?\" — answerable without meeting a single directive:
- intro — what CX is and what problem it refuses to have.
- rings — the shape of the system: four rings, one import direction.
- quickstart — the first five minutes; it runs inside Ring 0 before it shows you anything that executes.
- comparison — CX against JSON, YAML, XML, Protocol Buffers, and friends, in both directions.
You are done when you can say what CX would replace in your stack and which ring that replacement lives in. If the answer is \"nothing\", the comparison page will have told you that honestly.
The data-format adopter
You want the format — parse, validate, convert, hash, diff — and you never intend to run a program. Ring 0 is a complete product for you, and this path never asks you to understand the evaluator:
- data — the data language end to end: elements, scalars, collections, anchors.
- value-model — one value, one address: what identity buys you and what rides in the three lanes.
- surfaces — projections to and from JSON, XML, YAML, TOML, Markdown, and the binary forms.
- identity — canonical form and hashing, the mechanics under the promises.
- schema-evolution — validation, computable compatibility, and what happens when schemas change.
- tour-data — fifty worked data recipes; analytics for the columnar and bridge story.
You are done when cx fmt, cx validate, cx hash, and
cx diff are in your build, and the Ring-0 pack index (on the
ring's pages) tells you exactly which library surface you may
lean on — and that http is not in it.
The platform operator
You run the thing: stores, journals, services, upgrades.
- store — the store platform: content addressing, refs, journals, folds.
- bitemporal, consistency, event-evolution — the three contracts you operate under: two time axes, declared guarantees, and reading old events under new vocabulary.
- operations — daemons, health, recovery, security
posture; the operator reading order continues in
docs/dev/(store service, management, security). - xap-distribution — the distribution machinery your developers will ask you to operate.
You are done when you can answer, without opening a runbook: where is history kept (one journal, append-only), what does a correction do to an invoice already sent (nothing — bitemporal), and what happens when a consumer asks for a guarantee a replica cannot give (a loud refusal naming the token — consistency).