Terminal UI for WireGuard and OpenVPN with real-time telemetry and leak guarding.
Terminal UI for WireGuard and OpenVPN with real-time telemetry and leak guarding.
Terminal UI for WireGuard and OpenVPN with multi-tunnel control, real-time telemetry, and leak guarding.
See multi-connection, leak detection, split-tunnel, and profile-management demos
Multi-connection
Leak detection
Split tunnel
Profile management
Vortix gives WireGuard and OpenVPN users one keyboard-driven view of their tunnels and the network around them. It is useful when plain wg-quick or openvpn provides too little visibility, while a full desktop VPN client is too heavy or tied to one provider.
Vortix orchestrates the system wg, wg-quick, and openvpn implementations; it does not implement either VPN protocol itself.
Install the protocol tools first:
# macOS
brew install wireguard-tools openvpn
# Ubuntu / Debian
sudo apt install wireguard-tools openvpn
# Fedora
sudo dnf install wireguard-tools openvpn
Then install Vortix using your preferred channel:
| Channel | Install |
|---|---|
| Homebrew | brew install Harry-kp/tap/vortix |
| Arch Linux | sudo pacman -S vortix |
| Cargo | cargo install vortix |
| npm | npm install -g @harry-kp/vortix |
| Nix | nix profile install github:Harry-kp/vortix |
| Shell installer | curl --proto '=https' --tlsv1.2 -LsSf https://github.com/Harry-kp/vortix/releases/latest/download/vortix-installer.sh | sh |
| Static Linux binary | Download the musl archive from Releases |
Import a profile and connect:
vortix import ./work.conf # .conf, .ovpn, URL, or directory
sudo vortix # interactive dashboard
# Or stay in the CLI
sudo vortix up work
vortix status
sudo vortix down work
Tunnel and firewall changes require root. Read-only commands such as list, show, and status do not. If sudo vortix cannot find a Cargo-installed binary on Linux, link it once with sudo ln -s ~/.cargo/bin/vortix /usr/local/bin/vortix.
See the usage guide for command and keybinding references.
| Area | What Vortix provides |
|---|---|
| Protocols | WireGuard .conf and OpenVPN .ovpn / .conf profiles |
| Multi-tunnel | Concurrent tunnels, default-route ownership, split routes, conflict checks, and per-profile state |
| Telemetry | Throughput, latency, jitter, packet loss, public IP, ISP, and location |
| Security Guard | IPv4/IPv6 exposure, active DNS policy, encryption posture, and kill-switch state |
| Kill switch | off, block-on-drop, and vpn-only, using PF on macOS or atomic nftables on Linux |
| Automation | Human output, a versioned JSON envelope, NDJSON watch streams, and shell completions |
| Diagnostics | Event logs, session journals, per-process socket audit, and vortix report |
| Appearance | Seven built-in themes, including terminal-native light/dark colors |
| macOS | Linux | |
|---|---|---|
| VPN tools | Homebrew wireguard-tools, openvpn |
Distribution wireguard-tools, openvpn |
| Kill switch | PF (pfctl) |
nftables (nft) |
| DNS integration | System Configuration | systemd-resolved, NetworkManager, resolvconf, or /etc/resolv.conf fallback |
| CI coverage | macOS | Ubuntu and Fedora |
macOS is the primary development platform. Linux is tested continuously, but distributions vary in resolver, firewall, kernel, and privilege configuration. Reports from other distributions are valuable—include vortix report when possible.
Source builds require Rust 1.85 or newer. Linux kernel 5.6 or newer is recommended for native WireGuard.
Vortix runs privileged only because tunnel, route, DNS, and firewall mutation require it. The privileged path is intentionally narrow:
wg, wg-quick, and openvpn binaries.Kill-switch rules survive a Vortix restart within the same boot, but the OS may flush them during reboot. Re-arm vpn-only after each boot.
For the trust boundaries and threat analysis, read the privileged-helper threat model.
…
Every command supports --json; watch commands emit NDJSON. Run vortix --help for authoritative options.
Common TUI keys:
| Key | Action | Key | Action |
|---|---|---|---|
j / k |
Move through profiles | c / Enter |
Connect or disconnect |
Tab / Shift-Tab |
Move between panels | x |
Context action menu |
b |
Bulk action menu | p |
Switch color theme |
i |
Import profile | K |
Cycle kill-switch mode |
/ |
Search profiles | ? |
Full in-app help |
q |
Quit | z |
Zoom focused panel |
| Guide | Covers |
|---|---|
| Usage | TUI keys, CLI commands, JSON, multi-tunnel behavior, and automation |
| Configuration | Paths, files, themes, settings, DNS integration, and precedence |
| Troubleshooting | Startup, permissions, DNS, WireGuard, OpenVPN, firewall, and reporting |
| Migration | Upgrade and profile-storage changes |
| Manual test backlog | Real-kernel and real-terminal checks not covered by automation |
| Guide | Covers |
|---|---|
| Contributing | Development workflow and contribution entry points |
| CI parity | The exact checks to run before pushing |
| Architecture migration | Control-plane boundaries and migration direction |
| Privileged-helper threat model | Authority, ownership, replay, and recovery invariants |
| Project board | Active and planned work |
Contributions and real-world testing are welcome:
Development starts with cargo build, cargo test, and the full CI parity suite before pushing. Nix users can run nix develop for the project shell.
awesome-rust · awesome-ratatui · awesome-tuis · Arch Linux extra · Terminal Trove · LinuxLinks · Orhun Parmaksız's spotlight · RustNation UK talk deck · JustTUI
mercury — keyboard-first API client for the terminal. 5 MB, 50 ms startup. · afk — menu bar break reminder, 2.8 MB.
No open issues yet, or sync has not completed.