decds
A Distributed Erasure-Coded Data Storage System
decds is a command-line utility and library, written in Rust, for reliably storing and recovering arbitrary-size data blob using Merkle Tree-based cryptographic commitments (with BLAKE3 hash function) and Random Linear Network Coding (RLNC)-based erasure coding. It allows you to break large data blobs into smaller, verifiable, and reconstructible Proof-Carrying Chunks (PCC), ensuring data integrity and availability even in the presence of partial data loss.

This design collects some inspiration from https://arxiv.org/pdf/2506.19233.
[!TIP] How to use
decds? Watch hands-on experience @ https://youtu.be/vpxDwGcd55Q.
Features
A simple command-line interface tool to perform operations like breaking data blob, verifying proof-carrying chunks, and repairing blob from sufficient number of proof-carrying chunks.
- Data Splitting:
- Erasure Coding (RLNC): Zero pads arbitrary sized original data blob to be a multiple of 10MB, if not already. Divides zero-padded blob into fixed-size (= 10MB) chunksets. Then it splits each chunkset into 10 chunks, each of 1MB, on which Random Linear Network Coding is applied, generating 16 erasure-coded chunks from each chunkset. This allows reconstruction of the chunkset even if a some chunks are lost or corrupted - we need at least 10 valid chunks per chunkset for successful recovery.
- Merkle Trees: Builds binary Merkle tree (using BLAKE3 hash function) over erasure-coded chunks, generates inclusion proofs for each chunk, ensuring data integrity and verifiable retrieval. Each chunk carries proof of its inclusion in its chunkset and the overall blob.
- Data Verification: Provides a mechanism to verify the integrity of individual chunks against the original blob root commitment and corresponding chunkset commitment. These commitments are stored in
metadata.commitfile - which is the source of truth fordecdsCLI tool. - Data Repairing: Enables the reconstruction of original data blob from at least 10 valid erasure-coded chunks, for each chunkset. All the chunksets must be recoverable to be able to reconstruct whole blob.
Prerequisites
Rust stable toolchain; see https://rustup.rs for installation guide. MSRV for this crate is 1.85.0.
# While developing this library, I was using
)
Testing
It features comprehensive tests to ensure functional correctness of data dissemination and reconstruction.
[!NOTE] There is a help menu, which introduces you to all available commands; just run
$ makefrom the root directory of this project.
; ; ; ; ;
)
)
)
; ; ; ; ;
For testing functional correctness of decds CLI, run following command on Unix-like environment.
# I've tested it on major Linux distributions and MacOS
Code Coverage
To generate a detailed code coverage report in HTML format, use cargo-tarpaulin:
# Install cargo-tarpaulin if not already installed
This will create an HTML coverage report at tarpaulin-report.html that you can open in your web browser to view detailed line-by-line coverage information for all source files.
||
||
||
||
||
||
||
||
||
Installation
For hands-on experience, install decds on your $HOME/.cargo/bin.
# ------------------------------ System-wide installation ------------------------------
RUSTFLAGS='-C target-cpu=native'
# Or, first clone and then install it yourself.
# Now, try following, assuming $HOME/.cargo/bin is on your $PATH.
# For uninstalling `decds` executable from your system.
# ----------------------------- Using from build directory -----------------------------
# Use executable from build directory
Usage
The decds CLI provides three main commands: break, verify, and repair.
break
)
Have a look at following terminal recording of playing with decds. You can check out a bash script, showing similar commands @ decds-hands-on-linux.

[!TIP] Don't like GIF? See it on https://youtu.be/vpxDwGcd55Q or locally play the video from assets directory.
After recording a terminal session with asciinema @ https://github.com/asciinema/asciinema, I use ./scripts/asciinema_pipeline.sh to productionize it.