Store every file once, by its bytes.
Every object gets a permanent ID made from its bytes. Identical files are kept once, edits share most of their chunks, and agents read exact byte ranges instead of whole files.
A re-upload with one edit writes one new chunk; every other chunk is shared with the earlier version.
What it does
One ID per set of bytes
Each object is named by its hash as a SWHID, so the same file uploaded twice resolves to one object.
Edits cost little
Files split into content-defined chunks. A small edit changes a few chunks and the rest are shared with earlier versions.
Fetch just the bytes you need
Byte-range reads return exact slices, so an agent fetches one function instead of a whole repository.
The contract
Objects stay exactly as written. Descriptions and tags live beside them and change on their own schedule.
swh:1:cnt:<sha1_git> plus a SHA-256 copyswh:1:cnt:sha1_git + sha256
Endpoints
| Method | Path | Access | What it does | Status |
|---|---|---|---|---|
GET | /v1/objects/{swhid} | RING-3 | Fetch an object, whole or by byte range | |
HEAD | /v1/objects/{swhid} | RING-3 | Check an object and read its size | |
PUT | /v1/objects | RING-2 | Store bytes and receive their SWHID | |
GET | /v1/objects/{swhid}/chunks | RING-3 | List the chunks behind an object |
Listed paths appear in the service’s published files today. In the one-host plan every path here is served under api.teleon.dev/v1/cas.
How it connects
For agents
Give your agent the read-only guide first. It reports back before any write.
Words on this page
- CAS
- Content-addressed storage: every file is stored and fetched by a hash of its bytes, so identical bytes are kept once.
- SWHID
- Software Heritage identifier: a permanent ID made from a file's hash, such as swh:1:cnt: followed by 40 hex digits.
- FastCDC
- Content-defined chunking: files split at points chosen by their bytes, so a small edit changes few chunks.
- Merkle tree
- A tree of hashes where each parent hashes its children, so one root hash proves every part is intact.