Tomo

Real-time, two-way file sync between two machines over SSH — with full file history as a first-class feature.

Edit source on your Mac; it lands on your Linux GPU box in milliseconds. The server's build artifact flows back. Every save is versioned. One command — tomo sync user@host /path — records the peer, pushes a static binary, and starts syncing. tomo restore is undo for your filesystem.

$ curl -fsSL https://tomo-sync.dev/install.sh | sh

or build from source — github.com/jakequist/tomo

Rust MIT single static binary no server install no root · no daemon
dev@laptop — ~/proj

Built for the edit-here, build-there loop

Six claims, each true today on Linux↔Linux.

// latency

Milliseconds, both ways

The live sync path always ships the latest bytes immediately. Sync latency is never sacrificed for history.

// history

Every save versioned

Content-addressed store: FastCDC chunking + BLAKE3 + zstd in one SQLite file. A one-char edit to a 10 MiB file stores ~1% new bytes.

// conflicts

Conflicts never block

Vector clocks decide causality; both sides converge to the same deterministic winner with no negotiation. The loser is always preserved and recoverable.

// bootstrap

Zero-friction bootstrap

Tomo pushes its own static binary over SFTP (SHA-256 verified) and runs it over the same SSH connection. No install on the server, no root, no daemon.

// durability

Crash-safe by construction

Staging plus atomic rename everywhere. kill -9 at any instant leaves no partial file at any final path — proven in the acceptance suite.

// deploy

Single static binary

Fully static musl builds — no glibc roulette, no OpenSSL (rustls), SQLite bundled. Nothing to install beyond the one file.

How it works

A pure state machine at the core, real I/O at the edges.

01
Pure sync engine. (index, event) → (index′, actions) — no I/O, clocks, or threads in the core crate. Exhaustively property-tested.
02
Vector clocks, never wall time. Index entries are multi-value registers; absorbing a version is a lattice join. Survives a peer whose clock is three years wrong.
03
One SSH connection. No listening ports. Tomo starts the remote process over SSH and speaks a binary wire protocol over its stdio — like rsync -e ssh.
04
Adaptive capture. Versions every save under light load, coalesces checkpoint-style under storms. Big content ships as chunks interleaved with live changes.
An honest note on platforms. Tomo is v0 feature-complete and fully tested on Linux↔Linux today — all 15 end-to-end scenarios pass. macOS support is in final validation: the FSEvents watcher backend is in place and awaits Mac hardware in the release matrix. This page won't oversell it.
15/15 end-to-end acceptance scenarios · 340 tests · property-tested core · MIT
Read the design on GitHub →