Architecture
The pieces
flowchart TB
subgraph oxygen[oxygen repository]
CLI["oxy: the command line<br/>(src/cli)"]
Core["oxy-core: objects, change graph,<br/>storage, identities, policy, protocol"]
Server["oxy-server: the reference<br/>HTTP(S) server"]
Strata["oxy-strata: S3, GCS<br/>and Azure stores"]
CLI --> Core
CLI --> Strata
Server --> Core
Strata --> Core
end
subgraph hub[OxygenHub]
Hub["oxygenhub: the forge<br/>web, API, wikis, proposals"]
OH["oh: the hub's command line"]
end
subgraph flow[OxygenFlow]
Runner["flow: runs pipelines<br/>in sandboxes"]
end
Hub --> Core
Hub --> Server
Hub --> Strata
Runner --> Core
Hub <-->|claims, logs, receipts| Runner
| Crate | What it does |
oxy-core | Encoding and hashing, the object types, the change graph and conflict detection, the working copy, storage, identities and signatures, the trust policy, the wire protocol client, Git import and export |
oxy-server | Serves the wire protocol over HTTP(S): oxy serve |
oxy-strata | The cloud stores, kept apart because of what they pull in |
oxy (src/cli) | The command line, with colour, glyphs and plain output for scripts |
Inside oxy-core
flowchart TB
Repo["Repo: every user operation"] --> WC[Working copy and snapshot]
Repo --> OpLog[Operation log]
Repo --> StateL["State: changes applied<br/>into file and tree graphs"]
StateL --> Graph["File graphs (atoms)<br/>and the tree graph"]
Repo --> Store["Store: objects, packs,<br/>batches, caches"]
Store --> Backend["Strata backend:<br/>directory, memory or a bucket"]
Repo --> Ident[Identities, signatures, policy]
Repo --> Proto[Protocol: hub, directory and bucket remotes]
Around it
- OxygenHub is a forge built on oxy-core: repositories, proposals with sealed approvals, issues, wikis, releases, a Git mirror, and repositories kept in their owner's buckets.
- OxygenFlow runs a repository's pipeline (
.flow/pipeline.kdl) in sandboxes: a Firecracker microVM where there is KVM, or a Linux namespaces, Landlock and seccomp sandbox where there is not. Each job's result is a signed receipt kept in the repository.
- Oxygen is self-hosting: its own history, OxygenHub's and OxygenFlow's are kept in Oxygen, and every push is checked by OxygenFlow.