Everything in Unix is a file, except for the filesystem itself. Until now.

Manage files without holding on to them.

C4 is a file management system that decouples organization from storage. A c4m file describes your entire filesystem in plain text — without any of the file content itself.

Start with a directory.

$ ls project/
README.md main.go src/
$ c4 id project/ > project.c4m

The c4m file is just text.

$ wc -l project.c4m
4 project.c4m
$ cat project.c4m
-rw-r--r-- 2026-03-24T10:00:00Z 312 README.md c45xZeXw... -rw-r--r-- 2026-03-24T10:00:00Z 1204 main.go c43zYcLn... drwxr-xr-x 2026-03-24T10:00:00Z ... src/ c47mNqPv... -rw-r--r-- 2026-03-24T10:00:00Z 847 handler.go c44RSteu...

One line per file. Permissions, timestamp, size, name, and a permanent identity.

Something changed. See it instantly.

# a week of work later...
$ c4 explain diff project.c4m project/
Comparing project.c4m (4 files) against project/ (5 files): 1 modified main.go 1,204 → 1,380 bytes 1 added src/util.go 294 bytes 3 files unchanged.

No need to have both versions on disk. The c4m file remembers what was there.

cd into a text file. Browse it like a directory.

$ cd project.c4m
project:/ $ ls
README.md main.go src/
project:/ $ cd src
project:/src/ $ cat handler.go
package api import "net/http" func Handle(w http.ResponseWriter, r *http.Request) { ...

The files aren't on disk. Content is pulled from the store when you need it.

Send the description. Sync only what's different.

$ ls -lh project.c4m
-rw-r--r-- 312B project.c4m
# 312 bytes describes the whole project. Send it anywhere.
$ scp project.c4m server:
project.c4m 100% 312 0.0KB/s 00:00
# The server already has most of the files. Sync only what's missing.
$ c4 explain diff project.c4m server:/data/project/
1 file different: src/util.go (294 bytes) 4 files already match.

The c4m file travels instantly. Content follows only when needed, from any source that has it.

The description is a view

A c4m file is a window into a project. Have many views — snapshots, versions, organizations. Switch between them instantly because views are tiny.

Pull from any source

Identities come from the content, not a system. A local drive, NAS, cloud bucket, or colleague's machine — any source with the right content works.

Indelible metadata

Link anything to a file by its identity. The file can move, be renamed, archived. The link holds — it points to what the file is, not where it was.

Plain text is the superpower

grep, diff, awk, email, git — they all work on c4m files. The text format is within 2% of binary after compression. It's not a compromise.

Open source Zero dependencies SMPTE ST 2114 standardized Cross-language verified

Install

Homebrew macOS / Linux — includes c4 + c4sh
brew install Avalanche-io/tap/c4
Go
go install github.com/Avalanche-io/c4/cmd/c4@latest
Python pip
pip install c4py
JavaScript npm
npm install @avalanche-io/c4

See c4toolkit for binary downloads and the full version matrix.

The toolkit

c4

Go

The CLI. Describe directories, diff c4m files, reconcile filesystems.

Shell integration. cd project.c4m and ls just works.

c4py

Python

Scan, diff, verify in Python. Zero dependencies.

Git for large files. No repo bloat, no server.

c4ts

TypeScript

Browser + Node.js. WebCrypto. Zero dependencies.

Native Swift for Apple platforms.

Embed file identification in any application.