Released 5.0.0

CloudXFile

A block-based storage format, with snapshots and a fsck.

Year
2026
Area
Storage, Backend
Stack
C# · .NET 10 · xUnit · Docker · GitHub Actions

The problem

Archive formats assume they are dealing with files. What was needed was a container that reasoned in blocks, survived interrupted writes and could tell on its own whether it is sound.

Constraints

  • No in-place mutation: write a new generation and promote it.
  • Crash safety: a process killed halfway must not leave the container worse than before.
  • Independent verification: a fsck that reconstructs rather than trusting the index.
  • Measurable performance on volumes of tens of GB, not on two-file fixtures.

Architecture

  • Superblock with a backup copy, incremental index, reserved area hosting the index.
  • Pallet → box → entry hierarchy; one entry takes a whole block.
  • Journal for compound operations, with copy-on-write for touched blocks.
  • Selectable compression codecs, with throughput measurements to pick the defaults.

Decisions that matter

From format to storage

5.0.0 moves the project from 'format describing files' to 'storage exposing volumes'. That is an identity change, not a refactor: APIs and tests were rewritten around that boundary.

Single writer, by construction

Concurrency was already serialised by accident. It was made explicit: one writer, declared rules, instead of a lock that worked by coincidence.

fsync is not a barrier on macOS

A wrong assumption found by crash tests: on macOS fsync does not offer the guarantee it offers on Linux. The barrier was made explicit where it matters.

Where it got to

Version 5.0.0 with a block-based core, fsck with repair, snapshot chains and an independent code audit.