abxfs-rs
An independent implementation of the ABX FS content layer in Rust:
FastCDC chunking, FastLZ, chunk ids, chunk and entry node trees, file and directory CIDs, and IPFS
CIDs. It plans a folder offline, reads published content back from chain, and checks that what is on
chain matches a folder on disk. It writes nothing; publishing is done with the official
abxfs CLI.
Check a folder
Pick a folder to compute its ABX FS root here, with the same Rust code compiled to WebAssembly. Then ask a chain whether that exact tree is stored. The files never leave this browser; a chain check sends only content ids (the root, the file CIDs and the chunk ids) to a public RPC endpoint, which the result names.
Planning here runs on a single thread, and this page plans folders of up to 64 MiB, 5,000 files and 32 directory levels. For anything larger, use the command line.
Root
| Path | Size | Type | File CID |
|---|
The folder picker does not report empty directories, which the official CLI includes in a folder's root. Drag the folder in instead when it holds empty directories. Symlinks are never followed, as in the CLI.
Look up a root
Paste a directory or file root to list what a chain holds under it: every file with its size, type and file CID. Only small contract reads are made; file contents are not downloaded.
Root
| Path | Stored size | Type | CID |
|---|
Same ids as the official tools
The reference outputs come from Art Blocks' own code: the official CLI's folder scan and the
@artblocks/abxfs-sdk 0.2.0 offline planner. abxfs-rs reproduces every id in them, on
three folders, each with and without FastLZ: every chunk id, backend and hash, every node id and
byte, every file and directory CID, every IPFS CID, and the totals. Both the native build and
this WebAssembly build pass all six sets.
| Folder | Files | Root (FastLZ) |
|---|---|---|
| abx.thebenmeadows.com | 63 | 0x959aeb7c…e9d45a |
| find3r, as published | 23 | 0x49a02353…3b822d13 |
| Edge cases (empty, 24,575-byte, 3 MiB of zeros, Unicode names, 2,000 files) | 2,022 | 0x1027316f…1166d6f1 |
Reading is checked the same way: trees read by abxfs-rs read from Base and Base Sepolia
are byte-identical to the official abxfs read, including a 5.3 MB file of 216 chunks
and a gzip-encoded file. Every id is recomputed from the bytes as they arrive.
Speed
Measured on an Apple Silicon Mac, release build, three runs each, November 6, 2026.
| Task | Official | abxfs-rs |
|---|---|---|
Plan the 2,022-file edge folder (SDK offline planner vs abxfs-rs plan) | 0.62 to 0.70 s | 0.03 to 0.06 s |
Read a 5.3 MB file from Base Sepolia, sepolia.base.org | 8.6 s | 3.1 s |
Planning runs files and chunks in parallel. Reading batches its calls through Multicall3 and
reads chunk bytes straight from their SSTORE2 contracts, so it is not limited by the RPC's
eth_call gas cap.
Use
cargo install --git https://github.com/mdws-org/abxfs-rs abxfs-rs plan ./site # every id, offline abxfs-rs plan ./site --json # the full plan as JSON abxfs-rs read 0xROOT --chain base --out ./copy abxfs-rs verify 0xROOT ./site --chain base # exit 0 only on a full match
Chains: base, base-sepolia, ethereum, sepolia,
arbitrum-one, arbitrum-sepolia; --rpc takes your own endpoint.
Source and issues: github.com/mdws-org/abxfs-rs.