Lightweight, keyboard-driven Linux network TUI. Pure IWD, systemd-networkd, and systemd-resolved stack with zero NetworkManager dependency.
  • Rust 97.8%
  • Nix 2.2%
Find a file
2026-09-25 01:31:08 +00:00
assets feat(docs,ui): add documentation, updated screenshot asset, MIT license, and footer polish 2026-09-10 17:20:55 +03:00
src feat(docs,ui): add documentation, updated screenshot asset, MIT license, and footer polish 2026-09-10 17:20:55 +03:00
.gitignore feat(network): add IWD association and networkd link monitoring 2026-09-10 02:47:21 +03:00
Cargo.lock feat(network): add IWD association and networkd link monitoring 2026-09-10 02:47:21 +03:00
Cargo.toml feat(network): add IWD association and networkd link monitoring 2026-09-10 02:47:21 +03:00
flake.lock chore(flake): weekly lockfile update 2026-09-25 01:31:08 +00:00
flake.nix feat(network): add IWD association and networkd link monitoring 2026-09-10 02:47:21 +03:00
LICENSE docs: add professional README, screenshot asset, and MIT license 2026-09-10 17:17:03 +03:00
README.md feat(docs,ui): add documentation, updated screenshot asset, MIT license, and footer polish 2026-09-10 17:20:55 +03:00
shell.nix feat: add interactive network TUI and Nix dev shell 2026-07-19 04:15:37 +03:00

netui

Rust edition License Nix

A lightweight, keyboard-driven Terminal User Interface (TUI) network manager built with Rust and Ratatui, engineered strictly for pure IWD + systemd-networkd + systemd-resolved stacks with zero NetworkManager dependency.

netui screenshot

Core Architecture

netui keeps each responsibility small and explicit:

  • Wi-Fi association and scanning: direct IWD D-Bus integration through net.connman.iwd.
  • Interface and link tracking: systemd-networkd D-Bus data, supplemented by sysfs where appropriate.
  • DNS and DNS-over-TLS: systemd-resolved through org.freedesktop.resolve1.
  • Profile management: an in-memory session store designed for declarative, NixOS-friendly systems.

The application does not require or invoke NetworkManager.

Features

  • Dual-pane layout for active connections and network interfaces.
  • Keyboard-first navigation, connection actions, and session-profile editing.
  • Direct IWD scanning and association with non-fatal handling for disabled Wi-Fi adapters.
  • Privacy-first address formatting: link-local IPv6 (fe80::/10) addresses are always hidden to avoid EUI-64 MAC-address leakage.
  • Live IPv6 display toggle with only non-link-local IPv6 addresses shown when enabled.
  • Clean [LOOP] classification and neutral loopback state for loopback interfaces.
  • DNS-over-TLS policy control through systemd-resolved.
  • Clamped single-line status footer with responsive, styled keybind badges.
  • Backend errors are contained in the TUI state rather than leaking D-Bus failures into the terminal.

Keybindings

Key Action
q / Esc / Ctrl+C Quit
Tab Switch pane
↑ / ↓ or j / k Navigate items
Enter Activate / connect selected item
e Edit session profile
d Forget selected Wi-Fi network
6 Toggle IPv6 display

Building And Installation

Nix flakes

Run the application directly from the repository:

nix run

Enter the development shell and run from Cargo:

nix develop -c cargo run

Cargo

Install the Rust toolchain and D-Bus development headers, then build an optimized binary:

cargo build --release

The binary is written to target/release/netui.

Runtime prerequisites

netui is intended for systems running:

  • iwd
  • systemd-networkd
  • systemd-resolved

The application uses the system D-Bus. Wi-Fi association requires an active IWD service; DNS-over-TLS controls require an active systemd-resolved service.

License

netui is distributed under the MIT License.