A terminal UI (TUI) WiFi manager for Linux that talks directly to NetworkManager over D-Bus.
╭─ wirfi — wlan0 ──────────────────────────────────────────────────────────────╮
│ ▌ ▂▄▆█ MyHomeNetwork ● 2.4G WPA2 │ MyHomeNetwork │
│ ▂▄▆█ OfficeWifi ● 5G WPA2 │ │
│ ▂▄ NeighborNet 2.4G WPA2 │ Signal ▂▄▆█ 95% │
│ ▂ GuestNetwork 2.4G Open │ Band 2.4 GHz — 2412 M │
│ │ Security WPA2 (RSN) │
│ │ BSSID AA:BB:CC:DD:EE:FF│
│ │ Max rate 300 Mb/s │
│ │ │
│ │ ● Connected │
│ │ IP 192.168.1.73/24 │
│ │ Gateway 192.168.1.1 │
│ │ DNS 8.8.8.8 │
│ │ │
│ │ Enter edit password · Tab QR│
│ ↑↓/jk nav · Enter connect · d disconnect · f forget · Tab QR · i ifaces · q │
╰──────────────────────────────────────────────────────────────────────────────╯
- Scan for nearby WiFi access points sorted by signal strength
- Connect to new networks with password entry
- Reconnect to previously saved networks with a single keypress
- Disconnect or Forget any saved network
- QR code — generate a scannable WiFi QR code from the stored password so phones can join instantly
- Interface browser — list all network devices (WiFi, Ethernet, Bluetooth…) with state and IP info
- Multi-adapter support — pick which WiFi interface to use when more than one is present
- Credential cache — passwords are saved locally so saved networks reconnect without retyping
- Signal strength bars (
▂▄▆█), band (2.4 GHz / 5 GHz), and security type (WPA2 / WPA / Open) shown inline
- Linux
- NetworkManager running and managing your WiFi device
- A terminal emulator (any modern one works)
- Rust 1.85+ (edition 2024) — only needed if building from source
cargo install wirfigit clone https://github.com/Arekkazu/wirfi.git
cd wirfi
cargo build --release
# binary is at ./target/release/wirfiwirfiIf you have multiple WiFi adapters an interface selector appears first. Otherwise wirfi goes straight to the network list and starts scanning.
Logs are written to /tmp/wirfi.log.
| Key | Action |
|---|---|
↑ / k |
Move up |
↓ / j |
Move down |
Enter |
Connect (or edit password for saved networks) |
d |
Disconnect from selected network |
f |
Forget saved profile for selected network |
Tab |
Show WiFi QR code for selected network |
i |
Open interface browser |
r |
Refresh / re-scan |
q / Ctrl-c |
Quit |
| Key | Action |
|---|---|
| Type | Enter password |
Enter |
Confirm and connect |
Esc |
Cancel, back to list |
| Key | Action |
|---|---|
Esc / q |
Back to network list |
| Key | Action |
|---|---|
↑ / k |
Move up |
↓ / j |
Move down |
Enter |
Switch to selected WiFi adapter |
r |
Reload interface list |
Esc / q |
Back to network list |
Passwords entered through wirfi are cached locally so that saved networks can be reconnected without re-entering the password. The cache is stored at:
$XDG_DATA_HOME/wirfi/cache.json
# defaults to ~/.local/share/wirfi/cache.json
The file is created with permissions 0600 (owner-readable only). wirfi also reads the password directly from NetworkManager's stored connection profiles when available, so a freshly connected network will have its QR code available immediately.
wirfi communicates with NetworkManager entirely through its D-Bus API using the zbus crate. No root privileges are required beyond what NetworkManager already grants to the active user session (typically managed by polkit).
The TUI is built with ratatui and runs on the async tokio runtime. Scans and connection attempts run in a background worker so the UI stays responsive.
MIT — see LICENSE.