_/\/\/\/\/\/\__/\/\___________________________
_/\/\__________/\/\______/\/\/\______/\/\/\___
_/\/\/\/\/\____/\/\____/\/\__/\/\__/\/\__/\/\_
_/\/\__________/\/\____/\/\__/\/\__/\/\__/\/\_
_/\/\__________/\/\/\____/\/\/\______/\/\/\___
______________________________________________
Dependencies: Floo β
(zero) β
Rathole ββββββββββββββββββββββββββββ (27+ crates)
FRP βββββββββββββββββββββββββββββββββ (34+ packages)
Binary Size: Floo β 671 KB total (394 KB + 277 KB) β
Rathole ββββ ~2-4 MB total
FRP ββββββββββββββββββββββββββββββββ ~24+ MB total
Throughput: Floo ββββββββββββββββββββββββββββββ 29.4 Gbps β
Rathole ββββββββββββββββββ 18.1 Gbps
FRP ββββββββββ 10.0 Gbps
Secure, high-performance tunneling in Zig. Expose your home services or access remote ones.
| I want to... | Example | Time |
|---|---|---|
| Expose my home Emby/Plex | expose-home-server/ |
5 min |
| Access cloud database | access-cloud-database/ |
5 min |
| Expose Emby + SSH | expose-multiple-services/ |
10 min |
| Through corporate proxy | through-corporate-proxy/ |
5 min |
Nightly builds (updated automatically):
floo-aarch64-macos-m1.tar.gz- Apple Siliconfloo-aarch64-linux-rpi.tar.gz- Raspberry Pifloo-x86_64-linux-haswell.tar.gz- Modern Linux
Or build: zig build -Doptimize=ReleaseFast
Each example has complete setup guide + configs. Just copy, edit, run!
| Feature | Floo | Rathole | FRP |
|---|---|---|---|
| Language | Zig | Rust | Go |
| Dependencies | 0 β | 27+ crates | 34+ packages |
| Max Throughput (M1) | 29.4 Gbps β | 18.1 Gbps | 10.0 Gbps |
| vs Rathole | +62% faster | baseline | -45% slower |
| vs FRP | +194% faster | +81% faster | baseline |
| Encryption | Noise XX + PSK | Noise NK, TLS, WS | TLS |
| Ciphers | 5 AEAD (AEGIS, AES-GCM, ChaCha20) | ChaCha20-Poly1305 | TLS standard |
| TCP Forwarding | β | β | β |
| UDP Forwarding | β | β | β |
| Multi-Service | β Per tunnel | β Per tunnel | β Per process |
| Parallel Tunnels | β Round-robin (1-16) | πΆ Not documented | β Connection pool |
| Token Auth | β Per-service + default | β Per-service + default | β Global + OIDC |
| Hot Config Reload | β SIGHUP (both) | β Dynamic services | β Admin API |
| Heartbeat | β Configurable | β Configurable | β Configurable |
| Auto-Reconnect | β Exponential backoff | β Exponential backoff | β Reconnection |
| Built-in Diagnostics | β
--doctor, --ping |
πΆ Logging only | β Dashboard, Prometheus |
| Config Format | TOML | TOML | TOML, INI, YAML |
| CLI Overrides | β Port, host, target, proxy | πΆ Limited | β Via flags |
| IPv6 Support | β | β | β |
| Proxy Client | β SOCKS5, HTTP CONNECT | β SOCKS5, HTTP | β HTTP, SOCKS5 |
| Compression | β Planned | β | β |
| HTTP Features | β | β | β Virtual hosts, auth |
| P2P Mode | β | β | β XTCP, STCP |
| Load Balancing | β Round-robin tunnels | πΆ Not documented | β Multiple backends |
| Binary Size | 394 KB + 277 KB β | ~1-2 MB each | ~12-13 MB compressed |
| Platform | macOS, Linux (Windows planned) | Linux, macOS, Windows | All platforms |
- π Noise XX + PSK - Mutual authentication with 5 AEAD ciphers
- π Reverse tunneling - Expose local services through public server
- β‘ Forward tunneling - Access remote services securely (like SSH -L)
- π Proxy support - SOCKS5 and HTTP CONNECT for corporate networks
- π Built-in diagnostics -
--doctorand--pingcommands - π§ Hot config reload - Update settings without restart (SIGHUP)
- π Auto-reconnect - Exponential backoff, heartbeat supervision
Note: All features verified against source repositories (Rathole v0.5.0, FRP v0.65.0). Benchmarks measured on identical hardware (Apple M1 MacBook Air) using
iperf3with single stream. Dependencies counted from Cargo.toml/go.mod. Binary sizes measured from compiled/released artifacts.
Benchmark (Apple M1 MacBook Air):
Raw loopback ββββββββββββββββββββββββββββββββββββββββββββββββββββ 99.8 Gbps
Floo (plaintext) ββββββββββββββββββ 34.8 Gbps
Floo (AEGIS-128L) βββββββββββββββ β 29.4 Gbps
Floo (AEGIS-256) βββββββββββββ 24.5 Gbps
Rathole ββββββββββ 18.1 Gbps
Floo (AES-128-GCM) βββββββββ 17.9 Gbps
Floo (AES-256-GCM) ββββββββ 15.8 Gbps
FRP βββββ 10.0 Gbps
Floo (ChaCha20) ββ 3.53 Gbps
βββββββ΄ββββββ΄ββββββ΄ββββββ΄ββββββ΄ββββββ΄ββββββ΄ββββββ΄ββββββ΄βββββΊ
0 10 20 30 40 50 60 70 80 90 100 Gbps
- AEGIS ciphers deliver the best encrypted performance (29.4 Gbps)
- Floo outperforms alternatives by 62% (vs Rathole) with AEGIS-128L
- Hardware acceleration (ARM crypto extensions) makes encryption nearly free
- Even AES-GCM maintains competitive throughput vs. plaintext alternatives
Homebrew (macOS):
brew tap YUX/floo
brew install flooAUR (Arch Linux):
yay -S floo
# or
paru -S flooAPT (Debian/Ubuntu):
# Add repository
curl -fsSL https://yux.github.io/floo-apt/pubkey.gpg | sudo gpg --dearmor -o /usr/share/keyrings/floo.gpg
echo 'deb [signed-by=/usr/share/keyrings/floo.gpg] https://yux.github.io/floo-apt stable main' | sudo tee /etc/apt/sources.list.d/floo.list
# Install
sudo apt update
sudo apt install flooSnap (Universal Linux):
sudo snap install flooNote: Package manager releases will be available after v0.1.2 is tagged. See packaging/README.md for maintainer instructions.
wget https://github.com/YUX/floo/releases/download/nightly/floo-aarch64-macos-m1.tar.gz
tar xzf floo-*.tar.gz
cd floo-*/
./flooc --version
./floos --versionRequirements: Zig 0.15.x
git clone https://github.com/YUX/floo
cd floo
zig build -Doptimize=ReleaseFast
./zig-out/bin/floos --versionfloos floos.toml # Start server
floos --doctor floos.toml # Validate config
floos --ping floos.toml # Test service reachability
floos -p 9000 floos.toml # Override portflooc flooc.toml # Start client
flooc --doctor flooc.toml # Validate config and connectivity
flooc --ping flooc.toml # Measure tunnel latency
flooc -r server.com:8443 --ping # Quick test
flooc -x socks5://proxy:1080 # Through proxySee examples/ for complete usage guides.
./flooc --ping flooc.toml # Test connectivity
# Check: firewall, correct IP, server running# Verify PSK and cipher match EXACTLY in both configs
grep "psk\|cipher" floos.toml flooc.toml# Server heartbeat_interval (30s) < Client timeout (40s)
grep "heartbeat" floos.toml flooc.tomlFull troubleshooting: See example READMEs
Reverse mode (expose home service):
# Server (public)
[server.services.emby]
mode = "reverse"
local_port = 8096 # Users connect here
# Client (home)
remote_host = "server.ip"Forward mode (access remote service):
# Server (remote)
[server.services.db]
target_port = 5432 # Server connects here
# Client (local)
local_port = 5432 # You connect hereSee examples/ for complete configurations.
zig build test # Run tests
zig fmt src/*.zig # Format code
zig build release-all # Cross-compile
./run_benchmarks.sh # Benchmark suite- Windows support
- Compression
- io_uring backend (Linux)
- QUIC/DTLS for UDP
- Prometheus metrics
Pull requests welcome!
- Format:
zig fmt src/*.zig - Test:
zig build test - Document changes
- Ensure benchmarks don't regress
MIT - See LICENSE file
- Examples:
examples/ - Issues: https://github.com/YUX/floo/issues
- Releases: https://github.com/YUX/floo/releases
Built with β€οΈ in Zig