Local-first file transfer

Move files across your LAN without a cloud in the middle.

FileFerry is a single binary named `ferry`. Today it transfers files and directories over native QUIC with manifest-backed skip and resume, including mDNS peer discovery, direct-address fallback, and long-running daemon receive mode. Richer trust UX and the TUI are the next native slices.

Designed for the terminal

Native discovery

mDNS discovery lets you send to stephen-mbp or a fingerprint prefix instead of a raw IP address. Observed peers merge by fingerprint; aliases stay lookup hints.

Native QUIC fast path

QUIC via quinn powers the current direct-address fast path. The first implementation uses one bidirectional stream per transfer session while the protocol settles.

Resumable manifests

Every transfer carries a BLAKE3-hashed manifest. Existing files skip, partial files resume from a verified offset, anything else starts fresh.

Scriptable by default

Human progress in the terminal, --json for newline-delimited events to stdout, documented exit codes for cron and CI.

Headless receive mode

ferry daemon keeps a direct receiver alive across sessions and persists its resolved listen/destination settings in daemon.toml.

Trust groundwork

Persistent identities and a trust store exist today. Fingerprint confirmation and transfer-path TOFU enforcement are still planned hardening work.

TUI is planned

A ratatui interface with peers, queue, picker, and log panes is on the roadmap. The current crate contains state tests, not the finished interactive app.

What the workflow looks like

Both the discovered-peer and direct-address flows below run today.

# Receive in the foreground today
ferry recv --listen 0.0.0.0:53318 --dest ~/Downloads/ferry
ferry daemon --listen 0.0.0.0:53318 --dest ~/Downloads/ferry

# Send through discovery today
ferry send stephen-mbp ./vacation.zip

# Or send directly today
ferry send 192.168.1.42:53318 ./vacation.zip

# Scripted today: newline-delimited JSON on stdout
ferry --json send 192.168.1.42:53318 ./backup.tar.zst | jq .

Status at a glance

FileFerry is pre-1.0. The native LAN binary is the focus. The public website you are reading is part of Phase 3.

Phase 1 — Direct QUIC

Done Direct-address QUIC transfer with TLS, BLAKE3, temp-file finalize, loopback smoke.

Phase 2 — Manifest & resume

Done Directory walks, multi-file sessions, path safety, skip, resume from verified offsets.

Phase 3 — Public website

Active The ferry-site crate, built with Leptos and Axum. Deployed self-hosted behind Caddy on Ubuntu.

Phase 4 — Discovery & registry

Core path done Native mDNS announce/browse, registry merge, trust-store groundwork, and peer-targeted send are in.

Local-first, by design