Skip to main content

What is WireGuird?

WireGuird is a Linux GTK GUI client for WireGuard that provides a graphical interface for managing VPN tunnels. Written in Go using GTK+3, it brings a familiar desktop experience to WireGuard management on Linux systems, closely matching the look and feel of the official Windows WireGuard client.
WireGuird version 1.1.0 is tested on Ubuntu 23.04, 22.10, 22.04 LTS, 20.04 LTS, 18.04 LTS, and Linux Mint 21.1.

Key Features

System Tray Integration

Visual connection status with color-coded icons: red when connected to a tunnel, black when disconnected.

Native WireGuard Control

Controls WireGuard directly through wg-quick commands for reliable tunnel management.

Tunnel Management

Lists and manages all tunnels from /etc/wireguard/ with support for importing .conf and .zip files.

Multiple Tunnels

Optional support for running multiple active tunnels simultaneously.

Real-time Statistics

Live display of transfer statistics, handshake times, and connection details.

Built-in Editor

Edit tunnel configurations directly within the application with syntax highlighting.

How It Works

Architecture

WireGuird acts as a graphical frontend to the standard WireGuard tools on Linux:
  1. Tunnel Discovery: Scans /etc/wireguard/ for .conf files (gui/gui.go:20)
  2. Connection Control: Executes wg-quick up and wg-quick down commands (gui/tunnels.go:232, 286)
  3. Status Monitoring: Uses the WireGuard control library (wgctrl) to fetch real-time tunnel statistics (gui/gui.go:49)
  4. Configuration Management: Parses and validates .conf files using the INI format (gui/tunnels.go:926)

System Tray Behavior

The application features intelligent system tray integration:
  • Disconnected State: Black “wireguard_off” icon
  • Connected State: Red “wg_connected” icon
  • Start on Tray: Optional setting to launch minimized to system tray
  • Quick Access: Show/Hide window and Quit options from tray menu
The system tray uses Ayatana AppIndicator for broad compatibility across different Linux desktop environments.

Tunnel Configuration Format

WireGuird works with standard WireGuard configuration files. Each tunnel is a .conf file in /etc/wireguard/ with the following structure:
[Interface]
PrivateKey = <your-private-key>
Address = 10.0.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = <peer-public-key>
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Real-time Monitoring

When a tunnel is active, WireGuird displays comprehensive connection details:

Interface Information

  • Status: Active/Inactive state
  • Public Key: Interface’s public key (derived from private key)
  • Listen Port: UDP port for incoming connections
  • Addresses: IP addresses assigned to the interface
  • DNS Servers: DNS servers configured for the tunnel

Peer Information

  • Public Key: Remote peer’s public key
  • Allowed IPs: IP ranges routed through the tunnel
  • Endpoint: Remote server address and port
  • Latest Handshake: Time since last successful handshake
  • Transfer Statistics: Received and sent bytes in human-readable format
Statistics update every second when the window has focus, providing real-time visibility into your VPN connection (gui/tunnels.go:833).

Settings & Customization

WireGuird includes several configurable options:

Multiple Active Tunnels

Enable running multiple WireGuard tunnels simultaneously. When disabled, activating a new tunnel automatically disconnects any active tunnels (gui/tunnels.go:249).

Start on Tray

Launch the application minimized to the system tray instead of showing the main window (main.go:147).

Check for Updates

Automatically check for new releases from the GitHub repository. Checks run 60 seconds after launch and then every 24 hours (gui/gui.go:81-99).
Settings are stored in ./wireguird.settings as JSON. The application requires read/write permissions for this file (settings/settings.go:12).

Use Cases

WireGuird is ideal for:
  • Desktop Users: Those who prefer GUI applications over command-line tools
  • Multiple VPN Management: Users who need to switch between different WireGuard configurations frequently
  • Visual Feedback: Anyone who wants clear visual indicators of VPN connection status
  • Quick Access: Users who want system tray integration for fast VPN control

Technical Stack

  • Language: Go (Golang)
  • UI Framework: GTK+3 via gotk3 bindings
  • System Tray: Ayatana AppIndicator
  • WireGuard Control: golang.zx2c4.com/wireguard/wgctrl
  • Configuration Parsing: gopkg.in/ini.v1
WireGuird requires root/sudo privileges to manage WireGuard tunnels since it executes wg-quick commands that modify network interfaces.

Next Steps

Installation

Install WireGuird on your Linux system

Quick Start

Get up and running in 5 minutes

Build docs developers (and LLMs) love