Skip to content
lance0Public

About

A modern iperf3 alternative with a live TUI, multi-client server, and QUIC support. Built in Rust.

Topics

Resources

Contributing

Security policy

Stars

584 stars

Watchers

2 watching

Forks

Latest commit

 

History

874 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

xfr

xfr logo

A modern iperf3 alternative with a live TUI, multi-client server, MPTCP, and QUIC support. Built in Rust.

Crates.io CI License Ko-fi

Documentation · Installation · Releases · Known issues

Quick Start

cargo install xfr            # Rust 1.88+; or brew install xfr
xfr serve                    # On the server
xfr 192.168.1.1              # On the client: TCP, 10 seconds
xfr 192.168.1.1 -P 4         # Four parallel streams
xfr 192.168.1.1 -u -b 1G     # UDP at 1 Gbps

Use the same xfr version on both peers for all current features. xfr uses its own protocol and does not connect to iperf3 servers. Allow port 5201 for TCP and UDP; see firewall requirements for older peers and client source ports.

TUI Preview

xfr live TUI: real-time throughput graph, per-second stats, and settings

Features

  • Live client TUI with throughput graphs and per-stream statistics.
  • Multi-client server with an optional dashboard: xfr serve --tui.
  • TCP, UDP, QUIC, and Linux MPTCP; parallel streams and bidirectional tests.
  • Plain text, JSON, streaming JSON, and CSV output for automation.
  • Saved configuration, LAN discovery, result comparison, and optional Prometheus metrics.
  • Push final client results to a Prometheus Pushgateway or vmagent: xfr <host> --push-gateway <url>.
  • Both TUIs report status through OSC 7501; unsupported terminals ignore it.

See the iperf3 comparison and migration guide.

Installation

cargo install xfr                       # Default features
cargo install xfr --features prometheus # Add metrics support
brew install xfr                       # macOS/Linux

The lance0/tap/xfr tap remains available; see the Homebrew installation options.

All installation channels and shell completions, including release binaries, Docker, AUR, Termux, Nix, pkgsrc, and source builds.

Platform Support

Release binaries cover Linux x86_64/ARM64, macOS Apple Silicon, and Android ARM64. macOS Intel can build from crates.io; NetBSD has a community pkgsrc package. Native Windows remains experimental; WSL2 is recommended.

CI covers Ubuntu, macOS, and Windows. Packaging and CI coverage do not establish runtime qualification for every platform or transport. See platform details and limitations.

Real-World Use Cases

Task Command or guide
Measure a VPN tunnel xfr 10.8.0.1 -t 30s
Download or test both directions xfr <host> -R / xfr <host> --bidir
Detect UDP congestion xfr <host> -u -b 500M -t 60s
Find a path's UDP payload limit xfr <host> --probe-mtu; UDP sizing
Exercise multiple paths/streams xfr <host> -P 8 -t 30s; MPTCP
Compare before and after Save with -o before.json / -o after.json, then xfr diff before.json after.json --threshold 5
Find servers on the LAN xfr discover
Automate tests and collect metrics Scripting, Docker, CI/CD, Prometheus
Look up flags xfr --help, xfr serve --help, CLI reference

Press ? / F1 for TUI help. Client keys include s for settings, t for themes, and p to pause/resume traffic. See client keys, server keys, and themes.

Set defaults in ~/.config/xfr/config.toml, in /etc/xfr/config.toml for the whole system, or in any file passed with --config; CLI values override them. Sharing a host with iperf3? See running next to iperf3. See configuration and precedence, metrics, and the CLI reference.

TCP and UDP bulk payloads are plaintext. QUIC encrypts traffic but verifies peer identity only when a PSK is configured. Prefer --psk-file to placing a key in command arguments or environment variables. Read the transport security details, authentication requirements, and security policy before exposing a server.

For connection failures, throughput tuning, and UDP loss, start with troubleshooting and known issues.

Documentation

The documentation index covers installation, features, automation, architecture, development, release history, and demo sources.

See Also

  • Terminal Trove — xfr listing and discovery
  • AUR — community Arch Linux package
  • pkgsrc — community NetBSD package

Acknowledgments

Special thanks to Matthieu Baerts (matttbe), Linux kernel MPTCP co-maintainer, for extensive testing, detailed bug reports with packet traces, and feature suggestions including MPTCP support, kernel TCP pacing, zero-copy IO, and high stream-count hardening. xfr is significantly better because of his contributions.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

About

A modern iperf3 alternative with a live TUI, multi-client server, and QUIC support. Built in Rust.

Topics

Resources

Contributing

Security policy

Stars

584 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages