This episode covers WireGuard beyond Linux: WireGuard-Go as the userspace implementation, the WireGuardNT driver for Windows, Android and iOS apps with QR code configuration import, and battery optimization techniques such as PersistentKeepalive.

WireGuard was not born for the Linux kernel alone — it was designed to run anywhere. When you install WireGuard on Windows, macOS, Android, or iOS, the connection established is still the same single protocol as the Linux server at the office. The only difference is the transport layer underneath.
Episode 16 covers WireGuard-Go as the userspace implementation, the WireGuardNT driver for Windows, the mobile experience on Android and iOS including QR code configuration import, and strategies for keeping device battery life healthy.
The focus of this episode is the real end-user experience: how easy it is to set up a tunnel, how frugal it is on battery, and how consistent configuration is across devices. These three decide whether a VPN technology can be used by many people, not just by Linux-savvy you.
WireGuard-Go is a WireGuard implementation written in Go that runs in userspace, without relying on a kernel module. It is the foundation for platforms without a native kernel implementation, and also the automatic fallback path when a kernel module is unavailable.
sudo wireguard-go wg0The wireguard-go wg0 command creates the wg0 interface in userspace. Subsequent configuration still uses wg as usual. Note that packet processing in userspace is generally slower than kernel-space — a reasonable trade-off for portability.
WireGuard-Go is used by default on platforms such as macOS and FreeBSD, and by the Android and iOS apps in their early versions. For high-performance scenarios on Linux, the kernel module remains the primary choice.
The choice between userspace and kernel also appears on the server: if you run a distribution with an old kernel or limited space for modules, WireGuard-Go can be a safe path, at the price of lower throughput as we will see in episode 15.
Windows uses a native driver named WireGuardNT, developed directly by the WireGuard team. This driver removes the need for TAP adapters like the ones OpenVPN uses, and integrates with the official desktop app.
The user experience on Windows is similar to Linux: create a tunnel from a configuration file, and read peer status from the app interface. WireGuardNT 1.0 was a major milestone that stabilized the Windows experience after years of development.
This Windows experience matters in office environments, because the majority of end-user devices run Windows. With a native driver, IT teams do not have to rely on additional adapters or fragile configuration.
The most practical way to set up a configuration on a phone is a QR code. On the server side, create the client configuration file and render it as a QR:
cat wg0-client.conf
qrencode -t ansiutf8 < wg0-client.confqrencode -t ansiutf8 displays the QR code right in the terminal. Scan it with the WireGuard app on Android or iOS, and the tunnel is ready to use. Make sure the wg0-client.conf file does not contain parts that mobile apps do not support.
A phone configuration should be minimal and complete at the same time:
[Interface]
Address = 10.0.0.5/32
PrivateKey = <kunci privat ponsel>
DNS = 1.1.1.1
[Peer]
PublicKey = <kunci publik server>
Endpoint = 203.0.113.5:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25The DNS field above determines the resolver the tunnel uses — important for a full tunnel on mobile devices so DNS does not leak to the origin network.
WireGuard is very frugal compared with other VPNs, but too-frequent keepalives can drain the battery. Common strategies:
PersistentKeepalive = 25 while on Wi-Fi.Modern devices also optimize WireGuard packet processing in the kernel or driver, so CPU load stays low while the tunnel is active.
Also pay attention to official app updates, which are released regularly: battery and stability fixes often arrive through these updates. Make sure devices stay on the latest version to get both security fixes and efficiency.
The biggest advantage you feel here: the wg0.conf file you wrote in episode 3 is almost identical on every platform. There is no per-vendor dialect like in IPsec. When moving from a Linux laptop to a phone, just change a few lines and send it via QR code.
The tool ecosystem such as wg-dashboard and Netmaker also uses this format: they generate configuration that can be used directly on any device. This is the strength of a single configuration format design.
For those of you building services, a uniform configuration format also means easier integration: a config-generation flow on the server can directly produce valid files for all devices, without needing platform-specific branches.
Small differences still exist, such as DNS support or certain features not used by every platform. Know these limits before distributing configuration so the user experience stays smooth.
Episode 16 completed the cross-platform topic: WireGuard-Go for userspace, WireGuardNT for Windows, Android and iOS apps with QR code import, and battery strategies with tuned keepalives.
Key takeaways:
DNS field is important for mobile full tunnels.In episode 17 we cover Docker and container networking — running WireGuard inside a container with the NET_ADMIN capability and the /dev/net/tun device, the sidecar pattern, and making WireGuard an overlay network between hosts.