S5 v1: Rewrite it in Rust (Large Grant Proposal)

Final Grant Progress Report: S5 Network

What progress was made on your grant this month?

This month I focused on polishing and releasing s5-rs crates for S5 v1.0, ensuring comprehensive documentation and robust testing.

  • Shipped v1.0.0-beta.1: Published the full suite of S5 crates to crates.io.

  • FUSE Integration: Implemented a functional FUSE driver (s5_fuse), allowing users to mount S5 file systems directly on their OS.

  • FS Internals: Added automatic sharding for large directories and Garbage Collection (GC) to s5_fs.

  • Core Refactor: Locked down the s5_core APIs (blob stores, importers, registry) for the v1 release.

  • Bindings & Vup Web: The JS/Dart bindings and Vup Web migration are now done!

Detail tasks worked on this month per milestone

Milestone Task Status Commits Notes
2025-11-25 Stable release of s5 rust crates Completed 857e6e3…3d4515d All crates published to crates.io.
2025-11-25 JS & Dart bindings via UniFFI Completed 3d4515d…079b4ca Published on npm and pub.dev. Using wasm-bindgen and flutter_rust_bridge directly instead of UniFFI because they are more reliable and mature
2025-11-25 Vup Web Migration to s5-rust Completed 515b3c3 Needs a Remote S5 Node to work, see README for instructions

Link to an easy to test version or a demo video.

(Includes s5_core, s5_fs, s5_node, s5_cli, s5_blobs, s5_registry, s5_fuse, and store backends)


cargo install --git https://github.com/s5-dev/s5-rs s5_cli

s5 --help

  • Testing: The workspace includes 22 integration tests and unit tests across all crates. Validate with:

cargo test --workspace

Provide an overall summary of everything achieved during this grant.

I completely re-architected and rewrote the S5 Network in Rust, moving from a prototype to a stable foundation.

  • Rust Rewrite: Delivered a modular implementation of the S5 protocol (s5_core, s5_node).

  • Iroh Integration: Replaced the legacy WebSocket protocol with Iroh for robust P2P networking and NAT traversal.

  • Advanced File System: Built s5_fs, a secure, end-to-end encrypted filesystem with snapshots and sharding.

  • CLI & Tooling: Built s5_cli, featuring the s5 tree command for inspecting data structures and s5_fuse for mounting.

  • Sia Integration: Shipped a renterd-backed s5_store_sia backend that exposes Sia as a first-class Store, including direct BlobLocation::SiaFile links so S5 clients or CDNs can download directly from Sia hosts.

  • Documentation: Wrote READMEs for all 14 crates, 4 end-to-end guides (workflows, friend/community storage, decentralized build cache), plus a full CLI and configuration reference.

See docs/guides/s5-workflows.md for detailed workflows.

If there were challenges you experienced and/or any work you weren’t able to complete, list it here.

  • WASM Integration: Generating bindings for the web (WASM) proved more challenging than expected due to tokio dependencies in s5_core and s5_blobs that don’t compile for wasm32-unknown-unknown. While iroh and irpc work in WASM, core crates depend on tokio, redb, and fs4 which are not WASM-compatible. I am currently refactoring these into a s5_client_core to isolate WASM-compatible logic, which caused a slight delay in the final bindings and Vup Web migration.

What lessons have you learned as a result of this grant?

  • Rust Reliability: Rust was the perfect choice for S5. Its type system and safety guarantees allowed me to build complex concurrent logic with confidence, resulting in a highly stable and performant system.

  • P2P: Leveraging Iroh was a better choice than maintaining a custom networking stack.

  • FFI: API design needs to account for FFI boundaries early on to avoid friction.

What are you most proud of about your work on this grant?

I’m really happy with how s5_fs turned out. It supports end-to-end encryption, efficient sync, and automatic sharding, but still feels fast and usable. Seeing it work with the FUSE driver and s5 tree command is a highlight.

2 Likes