atp turns every file into a fountain of interchangeable RaptorQ symbols (RFC 6330). Any K of them, plus a little slack, rebuild the original. Which packets die stops mattering, so loss costs bandwidth instead of round trips. It outruns tuned rsync by 2.9–4.8× on small files, holds line rate on clean gigabit, and refuses to land a single unverified byte.
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/atp/main/install.sh | bash- 946
- 4.8
- 230+
- 0
Mbit/s sustained · effectively line rate
× vs tuned rsync · at least 2.9× in every regime
Append-only · failed hypotheses stay on the record
SHA-256 + Merkle on every transfer · fails closed
rsync, scp, and sftp all ride a single TCP stream, and TCP reads every lost packet as congestion. Throughput falls off roughly with 1/(RTT·√loss): on an 80 ms link, a 2% loss rate can cost you 10× your throughput, or all of it.
RaptorQ turns a file into a stream of fungible symbols, like water droplets from a fountain. Any K of them fill your glass. BitTorrent can strand you at 99% hunting one rare chunk; a fountain has no rarest chunk to hunt.
A tiny ordered control plane carries the manifest and feedback. A fire-hose data plane carries symbols. TCP-style reliability never fights the fountain code, and the fountain never has to reimplement ordering for the metadata that genuinely needs it.
Carmack’s objection was fair: the kernel knows things user code can’t. So atp measures what it can actually observe and picks its path per transfer.
Clean link? Paced stream
A BBR-style delivery-rate sampler paces a reliable source stream: per-packet delivered counters, a PROBE_BW-style gain cycle, a measured 2 MiB flow window. 946 Mbit/s on a 1 Gbit path, with zero repair symbols sent.
Lossy link? Fountain spray
Give it a loss hint and round-0 repair overhead is sized from that hint. Feedback stays bounded: a few NeedMore rounds, never a per-loss conversation.
2,000 tiny files? One wire entry
Small trees get packed so tiny files skip the per-file round-trip floor. The Merkle commitment still covers every logical file on both ends.
Seen it before? Send the delta
FastCDC chunking plus IBLT set reconciliation finds what changed, with traffic proportional to the delta. A rolling-hash diff works below chunk level. rsync's best trick, kept.
Hermetic network namespaces, netem impairments on both ends, SHA-256 verification of every single transfer, medians of 3 to 5 reps, and an rsync configured for maximum speed. Where rsync still wins, the same table says so.
A single TCP stream cannot express this at all. Every machine that holds the file feeds the same receiver at once, each spraying a disjoint slice of one fountain. Kill a donor mid-transfer and watch what happens.
Security is an explicit axis, not a default you discover later. Each tier gets benchmarked only against the crypto-equivalent rsync setup; anything else would be a strawman.
Lab plaintext
No crypto at all, for benchmarks and airgapped labs. The flag name is deliberately embarrassing to type in production.
--rq-allow-unauthenticated-labSymbol-authenticated
Per-symbol HMAC over raw UDP. Forged payloads are dropped before they ever reach the decoder.
--rq-auth-key-hex $(atp rq-keygen)QUIC + TLS 1.3
Real X.509 verification through rustls: chain, hostname, expiry. All of it fails closed, and no insecure skip-verify escape hatch exists to fat-finger.
--transport quicEvery tier shares one invariant: stage, hash-verify, commit. Corrupt or partial data never lands in the destination, and exit 0 always means verified. On hostile networks, use the QUIC tier; the HMAC tier authenticates symbols, not the control stream.
The installer offers an agent skill for Claude Code and Codex that teaches your agents to run atp well, so you never have to learn the flags yourself.
One flag away
Take the skill with --skill (or say yes at the interactive prompt). It carries transport policy, peer profiles, troubleshooting playbooks, and a smoke test.
Fleet install
atp has to sit on both ends, so the skill ships fleet-install.sh to roll it across every ssh-reachable machine you already use.
Reports, not logs
JSON on stdout, diagnostics on stderr, exit 0 only after verification. feedback_rounds tells your agent exactly what the link did.
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/atp/main/install.sh | bash -s -- --skillOne static binary, no daemon required. atp is the standalone transfer CLI of the Asupersync runtime, built on the same cancel-correct machinery documented across this site.
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/atp/main/install.sh | bashirm https://raw.githubusercontent.com/Dicklesworthstone/atp/main/install.ps1 | iexcargo install --git https://github.com/Dicklesworthstone/asupersync asupersync --bin atp --features atp-cliStill reach for rsync when…
You’re pushing huge single encrypted files over pristine fast links. Kernel TCP still beats userspace QUIC there by about 1.5×.
You need --exclude, --delete, or mirror semantics. atp is a mover, not a mirror.
You can’t put a binary on both ends. atp has to run on each side.
These losses are printed in the README’s tables too, right next to the wins.