Content-addressed storage for byte streams.
- Scala 3
- ZIO Streams
- Filesystem or S3
- PostgreSQL manifests
One identity across every backend
Storage adapters can change without changing what a blob means. Content identity is derived from bytes, not filenames, locations, or upload sessions.
- StreamRead bounded chunks
Uploads stay backpressured without collecting the complete payload.
- AddressHash each block
Existing block keys turn repeated content into reuse.
- CommitPublish the manifest
Ordered block references make the blob durable and retrievable.
- VerifyRehash stored bytes
Integrity checks read the persisted content instead of trusting metadata.
What the repository proves
Every row points to an executable path or an integration-tested boundary.
Restart-safe local CASSeparate CLI and server processes ingest, retrieve, rehash, and compare bytes.
./scripts/verify-local-lifecycle.shStreaming HTTP and gRPCUpload, list, inspect, verify, range-read, download, and delete through packaged listeners../scripts/smoke-packaged-server.shShared storage adaptersCI runs PostgreSQL manifests and S3-compatible blocks against PostgreSQL and MinIO.GRAVITON_IT=1 ./sbt testOperational controlsReadiness, authorization, audit, backup, restore, and reversible collection have explicit gates.docs/ops/production-readiness.mdSee what changed without storing it twice.
Drop real files into the streamed Scala.js analyzer. It maps exact block overlap locally and loads ZIO PDF only when the bytes identify a PDF. Nothing on this static page claims persistence.
Compare files by content
Local, nothing uploaded- Runs locally
- Streaming SHA-256
- PDF-aware