- Rust 96%
- Nix 4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .moira/envs | ||
| deploy/kubernetes | ||
| docs | ||
| example | ||
| migrations | ||
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| devenv.lock | ||
| devenv.nix | ||
| devenv.yaml | ||
| flake.lock | ||
| flake.nix | ||
| README.md | ||
| renovate.json | ||
| zensical.toml | ||
CDB
CDB is a primitive economic database. It tracks the flow of things — what exists, where it is, where it came from, where it went.
What does the C stand for? Some say economic. Some say commodity. Some say community. Some say commune. All of them are right.
What it is
- Small. Five primitives — items, states, transactions, locations, flows — that compose into whatever inventory situation you have.
- Scale-invariant. One person's pantry, a shared household, a maker space, a community.
- API-first. CDB is infrastructure. Automation and integrations live outside as operators and talk to it over HTTP. The API describes itself:
GET /openapi.jsonis a generated OpenAPI 3.1 document covering every endpoint, so clients are generated rather than guessed. - Yours. Self-hosted, no cloud, no analytics. The data about what you own and consume belongs to you.
- Federated (eventually). Sovereign instances exchanging items and demand signals, peer to peer.
The full documentation lives in docs/ — concepts, architecture, data model.
Running
CDB is a single binary plus PostgreSQL. An instance is configured by a config.toml and a set of definition directories (itemdb sources, locations, flows) — see Storage. Users and tokens live in the database, not in files.
Development
devenv up # starts postgres (and provides nightly rust)
cargo run -- example/config.toml # migrate + serve on 127.0.0.1:8080
Create the first admin (also works as lockout recovery):
cargo run -- example/config.toml bootstrap <name>
Log in with the printed one-time password via POST /auth/login, then manage users and operator tokens through the API — see Users.
The full surface is at GET /openapi.json; GET /health is liveness and GET /ready also checks the database.
Deployment
The container image is built with nix — no Dockerfile:
nix build .#containerImage
skopeo copy docker-archive:result docker://registry.example.com/cdb:latest
deploy/kubernetes/ is a deployment template, one manifest per resource (apply with kubectl apply -f deploy/kubernetes/): itemdb sources are cloned by git init containers (fetching and pinning repos is the deployment's job — core only reads directories), config lives in a Secret, and a minimal postgres is included for small instances.