Vortix

Crates.io Downloads CI License: MIT macOS Linux Rust GitHub Sponsors PRs Welcome GitHub Stars

Terminal UI for WireGuard and OpenVPN with real-time telemetry and leak guarding.

Vortix Demo

Why Vortix?

I wanted a single interface to:

  • See connection status, throughput, and latency at a glance
  • Detect IPv6/DNS leaks without running separate tools
  • Switch between VPN profiles without remembering CLI flags

Existing options (wg show, NetworkManager, Tunnelblick) either lack real-time telemetry or require a GUI.

FeatureVortixGUI ClientsCLI-only
Memory usage~15MB200-500MB~5MB
Startup time<100ms2-5sInstant
Real-time telemetry
Leak detectionSome
Kill switchManual
Keyboard-driven
Works over SSH

Features

  • WireGuard & OpenVPN — Auto-detects .conf and .ovpn files
  • Advanced Telemetry — Real-time throughput, latency, jitter, and packet loss
  • Geo-Location — Instant detection of your exit IP's city and country
  • Leak detection — Monitors for IPv6 leaks and DNS leaks in real-time
  • Kill Switch — Built-in firewall management for maximum security
  • Interactive Import — Easily add new profiles directly within the TUI
  • Config Viewer — Inspect profile configurations directly within the TUI
  • Keyboard-driven — No mouse required

Requirements

macOS

  • macOS 12+ (uses ifconfig, netstat, wg, ps, pfctl)
  • Rust 1.75+ (for building from source)
  • WireGuard: brew install wireguard-tools
  • OpenVPN: brew install openvpn

Linux

  • Linux kernel 3.10+ (kernel 5.6+ recommended for native WireGuard; older kernels require wireguard-tools)
  • iproute2 (for ip addr interface detection; pre-installed on most distros)
  • iptables or nftables (for kill switch; prefers iptables when both are available)
  • Rust 1.75+ (for building from source)

Ubuntu/Debian:

sudo apt install wireguard-tools openvpn iptables iproute2

Fedora/RHEL:

sudo dnf install wireguard-tools openvpn iptables iproute

Arch Linux:

sudo pacman -S wireguard-tools openvpn iptables iproute2

DNS detection uses resolvectl (systemd-resolved) as the primary method, with nmcli (NetworkManager) and /etc/resolv.conf as fallbacks. Non-systemd distros (Alpine, Void, Gentoo OpenRC) will use the /etc/resolv.conf fallback automatically.

Installation

From crates.io (Recommended):

cargo install vortix

Quick install (Binary):

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/Harry-kp/vortix/releases/latest/download/vortix-installer.sh | sh

Static binary (Linux - works on any distro):

Download the x86_64-unknown-linux-musl release from the releases page. This is a fully static binary with no runtime dependencies.

From source:

git clone https://github.com/Harry-kp/vortix.git
cd vortix
cargo install --path .

Profiles are stored in ~/.config/vortix/profiles/ with chmod 600.

Keybindings

KeyAction
TabCycle Focus (All Panels)
1-9Connect to Quick-Slot 1-9
EnterConnect / Toggle Profile
dDisconnect Active Session
rReconnect Active Session
iImport Profile (Direct)
vView Profile Configuration
yCopy Public IP to Clipboard
KToggle Kill Switch (Shift+K)
zToggle Zoom View (Panel)
xOpen Action Menu (Contextual)
bOpen Bulk Menu
DelDelete Profile (Sidebar)
qQuit Application

How It Works

Telemetry: A background thread polls system network stats every second for throughput (macOS: netstat -ib, Linux: /proc/net/dev). Network quality (latency, jitter, loss) is calculated using multi-packet ICMP probes. Public IP, ISP, and Geo-location data are fetched via ipinfo.io/json.

Security (Kill Switch & Leak Detection):

  • Kill Switch: Platform-native firewall integration. macOS uses PF (Packet Filter) via pfctl. Linux supports both iptables (with a dedicated VORTIX_KILLSWITCH chain) and nftables (with an atomic vortix_killswitch table) for clean teardown. Automatically blocks all non-VPN traffic when connection drops.
  • IPv6 Leak: Active monitoring via api6.ipify.org. Any IPv6 traffic detected while VPN is active triggers a leak warning.
  • DNS Leak: Monitors DNS configuration to ensure nameservers align with the secure tunnel (macOS: scutil --dns / networksetup, Linux: resolvectl / nmcli / /etc/resolv.conf).

WireGuard Integration: macOS resolves interface names via /var/run/wireguard/*.name. Linux uses kernel WireGuard interfaces directly (wg0, wg1, etc.). Both platforms parse wg show for handshake timing, transfer stats, and endpoint metadata.

OpenVPN Integration: Tracks session uptime and connection status via ps proc parsing. Interface detection uses ifconfig on macOS and ip addr on Linux.

Platform Notes

FeaturemacOSLinux
Kill switchpfctl (PF)iptables or nftables
Network statsnetstat -ib/proc/net/dev
Interface detectionifconfig + /var/run/wireguard/ip addr + wg show
DNS detectionscutil --dns, networksetupresolvectl, nmcli, /etc/resolv.conf
Default VPN ifaceutun0wg0
Tested distrosmacOS 12+Ubuntu, Fedora, Arch

Development

cargo build         # Build binary
cargo test          # Run unit/integration tests
cargo clippy        # Enforce code quality (Fail-fast via pre-commit)

Featured In

Star History

Star History Chart