v0.2.0 — Modernization release
Large overhaul bringing gfile back to a modern stack after a long maintenance gap.
New wire protocol, substantially faster transfers, and a restructured codebase.
⚠️ Breaking changes. v0.2.0 is not backward-compatible with v0.1.x:
- Wire protocol: a v0.1.x peer cannot talk to a v0.2.0 peer. Both sides must upgrade.
- Go package layout:
pkg/session/*was removed and replaced bypkg/transfer/{sender,receiver}. External importers will need to update.- CLI framework: migrated from
urfave/clitocobra; flag / subcommand syntax may differ. Seegfile --help.- Go 1.12 → 1.26.2
- pion/webrtc v2 → v4
Protocol (see PROTOCOL.md)
- Framed control / data channels with versioning and proper dispatch
- Streaming zstd compression (off by default for already-compressed payloads)
- Multi-PC mode:
--connections N(1..16) stripes a transfer across N parallel peer connections, working around the per-datachannel throughput ceiling on high-bandwidth / high-latency links
Performance
Same host, Darwin 24.6 arm64, 500 MB incompressible payload, median of 3 runs:
| Config | Throughput | vs v0.1.0 |
|---|---|---|
single-PC, --loopback |
~103 MB/s | ~93× |
multi-PC --connections 2, --loopback |
~180 MB/s | ~163× |
multi-PC --connections 4, --loopback |
~241 MB/s | ~219× |
Full details in PR #12.