Content-addressed storage

Store once. Address forever.

Zebra keeps every file as content-addressed blocks and writes its own index into the same store. Copy the folder to a new server and everything, names included, comes with it.

01 — How it works

Three steps,one folder.

Upload

Send a file with a token

Services authenticate with a signed Bearer token and post the file.

Address

Get a permanent CID

The file is chunked into blocks and addressed by its content. The same bytes always give the same address.

Describe

The index writes itself

Name, type and size are appended to a namespaced DAG log stored beside the blocks.

Request POST /storage Authorization: Bearer <token> Content-Type: multipart/form-data multipleFiles=@invoice.pdf
Response { "urls": [ "/storage/bafkrei…q7oie/invoice.pdf" ] }

Same file in, same CID out.

Index entry { "namespace": "smartstock-storage", "op": "add", "prev": { "/": "baguqee…" }, "file": { "name": "invoice.pdf", "type": "application/pdf", "content": { "/": "bafkrei…" } } }
02 — API

Small surface.Easy to call.

Uploadcurl -X POST $HOST/storage \ -H "Authorization: Bearer $TOKEN" \ -F "multipleFiles=@file.png"
Downloadcurl $HOST/storage/$CID/file.png \ -H "Authorization: Bearer $TOKEN" \ -o file.png

Tokens are minted by an admin in the console, scoped to write or read + write, and stay valid until an admin revokes them.

03 — Why Zebra

Built to bemoved and trusted.

Self-describing

Names and types live in the store, not in a side database.

Portable

One folder holds blocks, index and keys. Pin it to a server or move it.

Verifiable

Check every file's blocks, or rebuild the index straight from the store.