ferry — zsh ~/projects/ferry
~ $ ferry --help

ferry: move a folder to a server and know it arrived

One binary, one config line. Uploads what changed, checks what is served against what is on disk, and re-sends what does not match. No daemon, no account.

Install

# macOS / Linux
curl -fsSL https://ferry.example/install.sh | sh

# or with cargo
cargo install ferry-cli

A session

session · 24 Sep 2026, 21:14exit 0
ferry $ ferry push ./dist --to prod
reading   ferry.toml … prod = ftps://server.example/projects/site
scanning  ./dist … 47 files, 1.2 MB
diffing   against last manifest … 6 changed, 41 unchanged
upload   index.html            12.1 KB   ok
upload   assets/app.7f3c.js    88.0 KB   ok
upload   assets/app.7f3c.css   14.7 KB   ok
upload   thumbs/hero.webp      61.3 KB   ok
upload   thumbs/second.webp    58.9 KB   served 0 B — resending
upload   thumbs/second.webp    58.9 KB   ok (2nd try)
upload   sitemap.xml            1.1 KB   ok
verify    47/47 served bytes match
done      6 uploaded, 1 retried, 0 failed — 4.8 s

ferry $ ferry status prod
prod      last push 4.8 s ago · manifest 47 files · healthy

Numbers

Binary size2.9 MB
Dependencies0 runtime
Protocolsftps · sftp · s3
Config1 file

Flags

--to <target>a target from ferry.toml; defaults to the first one
--dry-runprint the plan and upload nothing
--no-verifyskip the served-bytes check (faster, less honest)
--forceignore the manifest and send everything
--jobs <n>parallel uploads, default 4

See also

ferry.toml reference · changelog · source · report a bug