Roadmap
VPN Works is the VPN, rebuilt as an operating system: a kernel, drivers for each way out, and plugins as apps. Nine releases are out. What comes next is in the order it’s planned, without dates: each release ships when its tests pass, and not before.

Out Now
0.3.0, the platform. VPN Works rebuilt as one core with plugins. One vpnw binary in place of five; a WebAssembly plugin host with Observer, Advisor and Guard plugins, signed and sandboxed; Trace and Learn moved out of the core as built-in plugins. What moved where
0.4.0, WireGuard paths. A program goes through a WireGuard tunnel that vpnw runs itself: no root, no kernel module, no network interface. Names are looked up through the tunnel, the policy still checks every address, and the program never starts on a dead tunnel. WireGuard paths
0.4.1, fixes. The sandbox’s two IPv6 escape tests run on every push now, on a Linux machine that has IPv6: all 17 ways out are blocked. Recording the figures also caught a race in closing plugins, which is fixed. What 0.4.1 changed
0.5.0, Ledger. Two built-in plugins: an Observer that seals each run’s events into a hash-chained file as they happen, and an Advisor, run with vpnw verify, that names the line anyone changed and says when a run was cut short. Every plugin can now ask for a file of its own to append to. Ledger in 0.5.0
0.6.0, Lab. The fault kit every tunnel must pass before it ships, in the tests: a peer that goes silent, lost handshakes, the tunnel sent to an impostor, a slow path, and a DNS server that lies. The WireGuard path handles all 18 cases. Four fixes came out of it, among them a refusal of loopback and cloud metadata addresses through any tunnel. Lab in 0.6.0
0.7.0, Exit. vpnw exit, the server end of a path, on a machine with fixed addresses. Each client leaves from an address of its own, and every request is decided again at the exit with the client’s own policy, by the same code. Plugins run there too. Exit in 0.7.0
0.8.0, Tunnel plugins. A new kind of plugin hands the kernel WireGuard configs and says how long to keep each; the kernel still runs every tunnel, where every byte of traffic stays. The built-in rotate moves through a folder of configs, every so often and whenever one stops answering, and nothing ever goes around the tunnels. Tunnel plugins in 0.8.0
0.9.0, egress budgets. The Guard interface gains byte budgets: a Guard lets a connection through with a budget, and the kernel counts every byte and cuts the connection at the budget, with a record of why. The built-in Budget plugin is an allowlist of hosts, each with bytes up, bytes down and connections. Exits take in changes to their clients without a restart. Budgets in 0.9.0
0.10.0, signed ledgers. The kernel holds a signing key, one per machine, and signs each of Ledger’s checkpoints and its end; Ledger asks for signatures through a new sign permission and never sees the key. Anyone with the public key can check a ledger with vpnw verify --key, and a ledger written again after a checkpoint fails at that checkpoint. Signed ledgers in 0.10.0
Next
Each release pauses for a look before the next one starts, and what comes after 0.10.0 is chosen after a look at it. Tunnel plugins for particular VPN providers can follow rotate.
After That
Sealing on macOS. On macOS, vpnw can route but not seal: a program that ignores proxy settings isn’t stopped. Linux has the kernel features that make sealing cheap; macOS needs another way.
Gateway mode. One policy for every device behind a machine, taking connections from the system’s routing instead of from proxy settings. This is also where VPN Works needs a second kind of enforcement, at the level of packets, so it can carry UDP as well as TCP.
Scope as an Advisor for gateway mode. Least-privilege rules learned per person from the gateway’s own traffic.
Open Questions
- Files. vpnw limits the network only. A sealed program can read whatever your user can read. A file-system layer would close that, and keep the signing key out of the program’s reach too; it’s not scheduled yet.
Something you’d want on this list, or want sooner? Write.