Make S3 yourprimary storage.

ZeroFS serves S3-compatible buckets as POSIX filesystems over NFS and 9P, or as raw block devices over NBD. Data is compressed and encrypted before upload. Warm reads come from local cache in microseconds.

$ curl -sSfL https://sh.zerofs.net | sh
Quickstart →

or via Docker · GitHub Action

8,6621
POSIX suite tests in CI
1.6 µs2
Random reads, warm cache
0.83 ms3
Mean small-write latency
16 EiB4
Maximum filesystem size
1 pjdfstest runs on every change. A few cases needing semantics NFS/9P can't express are excluded; the list is public in the repo.  2 SQLite bench, random reads on ZeroFS served from local cache. A raw S3 round-trip is 50–300 ms.  3 File appends over NFS, ZeroFS bench suite; data at rest in S3.  4 Addressable by design: 64-bit inode and size fields, 32 KiB chunks.
02Protocols

Files over NFS and 9P, block devices over NBD.

All three servers run in one userspace process against the same bucket. Clients mount it with the NFS and 9P support already in Linux, the NFS clients other systems ship, or nbd-client for block devices.

File · everywhere

NFS

macOS, Linux, Windows, and the BSDs mount it over their own NFS support, with nothing extra installed on the client. The server stays in userspace.

# mounts from any major OS
mount -t nfs 127.0.0.1:/ /mnt/zerofs
File · precise

9P

9P follows POSIX more closely than NFS, and fsync returns only after data reaches stable storage. The bundled FUSE client mounts without root and reconnects on its own.

# bundled FUSE client, no root
zerofs mount 127.0.0.1:5564 /mnt/zerofs
Block · raw

NBD

Raw block devices stored in the bucket hold ext4 filesystems, ZFS pools, or VM boot disks. New devices are picked up at runtime, with no server restart.

# attach a block device
nbd-client 127.0.0.1 10809 /dev/nbd0 -N vol1
Runs onAmazon S3Google Cloud StorageAzure BlobAny S3-compatible storelocal disk
03Geo-distribution

A ZFS mirror across three S3 regions.

Each ZeroFS instance exposes one S3 region as a block device. To ZFS they are plain disks, so a mirror that spans continents is set up like any other pool.

If a region becomes unreachable, the pool degrades and the data stays available from the other two.

04Capabilities

Eight properties of the storage engine.

04.1

Always encrypted

Every block is encrypted with XChaCha20-Poly1305 before upload. The data key is wrapped with a key derived from your password using Argon2id. There is no unencrypted mode.

04.2

Compression

Data is compressed with zstd or lz4 before encryption. The codec can change at any time without migration, since the codec of existing data is detected on read.

04.3

Caching

Configurable memory and disk caches hold recently used blocks. Warm reads return in microseconds. A raw S3 round trip takes 50 to 300 milliseconds.

04.4

Checkpoints

Named checkpoints capture the filesystem at a point in time. Any of them can be opened read-only with a single flag at startup.

04.5

Read replicas

One instance writes while read-only instances serve the same bucket. Replicas pick up the writer's changes automatically and return EROFS on writes.

04.6

TRIM support

Discard from any filesystem or zpool deletes the corresponding chunks from the LSM tree. Compaction then reclaims the space in S3, so freed blocks come off the bill.

04.7

Standalone compactor

Compaction can run as a separate process on its own machine. A spot instance in the bucket's region avoids egress fees and keeps the load off the serving path.

04.8

Separate WAL store

With the WAL enabled, fsync latency is the latency of the WAL's backing store. The WAL can live on local NVMe or S3 Express One-Zone while data stays in the main bucket.

05Web UI

One config section adds a web console.

Enable [servers.webui] and the same process serves a console: a file manager running 9P over WebSocket, a dashboard streaming stats over gRPC-web, and a terminal that boots a Linux VM rooted on the mount.

127.0.0.1:8080
ZeroFS web file manager browsing the Linux 6.17 source tree with an inline file preview ZeroFS dashboard with live throughput, IOPS, operation counters, and garbage-collection stats Linux VM booting in the browser with its root filesystem mounted from ZeroFS

Drag-and-drop uploads work for files and entire folders, written to the bucket over 9P.

06Recordings

Four recorded terminal sessions.

These are asciinema recordings of real terminal sessions, rendered as text rather than video. Playback caps idle pauses at two seconds and changes nothing else.

kernel-build — asciinema

The Linux kernel compiles in 16 seconds on ZFS over a ZeroFS NBD volume.

It's a filesystem. It just happens to live in S3.

$ curl -sSfL https://sh.zerofs.net | sh