How TON Storage Works
Bags and BagID
TON Storage organises content into bags. A bag can contain a single file or a whole directory, and each bag is identified by a unique 256-bit BagID, which is the hash of the torrent info cell.
Files inside a bag are split into 128 KiB chunks. TON uses a Merkle tree built from SHA-256 hashes so individual chunks can be verified without downloading the full bag.
This makes TON Storage suitable for large files, immutable collections of site assets, and other content that benefits from chunked distribution and cryptographic verification.
Peer discovery through TON DHT
Nodes that store a bag register themselves in the TON DHT under a key derived from the BagID. When a client wants to retrieve a bag, it queries the DHT to discover seeders and then starts downloading from available peers.
In practice, this means TON Storage behaves like a torrent-style distribution layer, but one that is integrated into TON's networking stack and can be paired with on-chain storage contracts when stronger guarantees are needed.
Running the official storage-daemon
The official implementation is storage-daemon, which TON now documents as part of the TON software suite. The canonical start command remains:
storage-daemon -v 3 -C global.config.json -I <IP>:3333 -p 5555 -D storage-db
Use storage-daemon-cli to manage the daemon, create bags, export metafiles, inspect peers, pause or resume downloads, and control selective downloads.
For downloads and uploads, the current documented command set includes create, add-by-hash, add-by-meta, list, get, get-peers, get-meta, download-pause, download-resume, and priority-name. For partial downloads, TON now documents the --partial flag.
add-by-hash <BagID> --partial file1.txt file2.txt
TON-native file addressing
For direct references to files inside a bag, the current TON documentation uses the tonstorage:// URI scheme:
tonstorage://<BagID>/path/to/file
This is the most future-proof way to explain TON Storage addressing on a reference page because it matches the current TON docs and native TON ecosystem integrations.
Browser access through TON Proxy
For ordinary browser access, the current TON documentation focuses on TON Proxy. The official rldp-http-proxy can intercept .ton, .adnl, and .bag hostnames and forward those requests into the TON network.
rldp-http-proxy -p 8080 -c 3333 -C global.config.json
That makes TON Proxy a better section to document than an old hard-coded HTTP gateway example. If you want a readable public name, combine TON Proxy with TON DNS. If you want a direct content address, use tonstorage://.
TON Storage node vs TON node server
A TON Storage node and a general TON node server are not the same thing. A full node or liteserver stores blockchain state and serves blockchain data. An archive node stores full history. A validator signs blocks. By contrast, storage-daemon is the service that stores and distributes TON Storage bags.
If your goal is file hosting, bag distribution, or decentralised asset delivery, start with TON Storage. If your goal is RPC, historical blockchain queries, or validation, you need a full node, liteserver, archive node, or validator instead.