Skip to content

Architecture

Record Store is one Rust workspace. Protocol crates call shared application services; they never reach into storage internals directly.

Request path

flowchart TB
    Client[S3 client] -->|SigV4 :7600| S3[S3 protocol]
    Console[Console :7602] -->|Bearer token :7601| API[Management API]
    S3 --> Svc[Object and bucket services]
    API --> Svc
    Svc --> Store[Filesystem store]
    Svc --> Meta[(Metadata catalog)]
    Store --> Disk[(objects/)]

Both protocol surfaces go through the same service layer, so an object written over S3 and an object written through the console are the same object under the same rules.

Console path

flowchart LR
    Browser --> Console[Console server :7602]
    Console -->|Bearer token| API[Management API :7601]
    API --> RS[Record Store]

The browser only ever talks to the console's own origin. The console server attaches the management credential server-side, so it lives in an HTTP-only cookie the page cannot read, no CORS configuration is required, and the browser never reaches the management API, the stored objects, or the metadata catalog.

Crates

Crate Responsibility
record-store-core Validated domain model: names, keys, checksums, ranges
record-store-service Shared bucket and object application services
record-store-s3 S3 protocol, SigV4, XML, multipart, versioning
record-store-api Management HTTP API and management roles
record-store-storage Streaming filesystem backend and recovery journal
record-store-metadata Durable indexed catalog and ordered migrations
record-store-auth Encrypted credentials and authorization policies
record-store-audit Durable bounded security audit trail
record-store-sharing Share and embed capabilities
record-store-events Durable events and signed webhook delivery
record-store-lifecycle Incremental expiration worker
record-store-config Configuration loading and validation
record-store-observability Structured tracing initialization
record-store-erasure Reed-Solomon library, not currently wired in

See Repository Structure for the layout including applications and the console.

On-disk layout

<data-directory>/
├── metadata/catalog.redb
├── metadata/credentials.redb
├── metadata/audit.redb
├── metadata/events.redb
├── metadata/lifecycle.redb
├── objects/<2 hex>/<2 hex>/<object UUID>
├── system/
└── tmp/

Payloads are addressed by generated UUID. No bucket name or object key ever becomes part of a filesystem path.