No description
  • Rust 92.2%
  • Nix 7.8%
Find a file
2026-05-21 19:40:55 +02:00
assets chore(readme): new image to include new feature 2026-05-20 17:13:37 +02:00
doc feat(docs): some basic examples and readme 2026-05-17 12:21:42 +02:00
nix feat(ui): some logo, and visual stufz 2026-05-18 13:11:13 +02:00
src feat(app): Quit on Switch 2026-05-19 18:49:32 +02:00
.envrc feat(nix): first and dirty nix setup 2026-05-17 12:08:30 +02:00
.gitignore feat(nix): first and dirty nix setup 2026-05-17 12:08:30 +02:00
Cargo.lock feat(app): Quit on Switch 2026-05-19 18:49:32 +02:00
Cargo.toml chore(bump): version 0.4.0 2026-05-19 18:49:52 +02:00
flake.lock feat(nix/app): fix the nix code and app 2026-05-17 19:53:22 +02:00
flake.nix feat(nix/auth): fix nix and polkit 2026-05-18 10:44:54 +02:00
LICENSE feat(nix): first and dirty nix setup 2026-05-17 12:08:30 +02:00
README.md chore(readme): minor tweaks 2026-05-21 19:40:55 +02:00
rustfmt.toml feat(toml): rustfmt 2026-05-17 12:04:33 +02:00

byt

Keyboard-driven VPN switcher for Linux.


byt swaps between NetworkManager-managed VPNs (WireGuard, OpenVPN) and Tailscale from a small Iced GUI or the command line.

Note

This is a very new project, you might stumble upon some bugs. I rarely use OpenVPN for example, so it's minimally tested. Feel free to contribute if you find anything wrong.

Features

  • Iced GUI with keyboard navigation in mind
  • WireGuard and OpenVPN via NetworkManager (D-Bus, polkit-authenticated)
  • Tailscale via systemd
  • Mutual exclusion: activating one VPN deactivates the others
  • Import provider configs: byt import path/to/provider.conf
  • Live state via NetworkManager D-Bus signals, no polling
  • Single-instance lock

Requirements

  • Linux with systemd
  • NetworkManager
  • For OpenVPN: the NetworkManager-openvpn plugin
  • For Tailscale (optional): tailscale and tailscaled
  • A running polkit authentication agent (most desktops include one)

Usage

byt                  # open the GUI
byt status           # print current VPN state
byt import foo.conf
byt --help

Keys

Key Action
or k j move selection
x disconnect
i import config
d delete config
r refresh
q or Esc quit

Install

Nix

nix run github:cnsta/byt

NixOS module:

# flake inputs
byt.url = "github:cnsta/byt";

# system config
imports = [ inputs.byt.nixosModules.default ];
programs.byt.enable = true;

From source

cargo build --release

Sample configs in doc/examples/ if you want to try the import flow without real provider files.

Showcase

showcase

How it looks as of v0.4.0.