Skip to content

Repository files navigation

WireGuard library for Go

Go Reference

Important

This project is a fork of the original wireguard-go project with some modifications. All credit goes to the original wireguard-go authors.

Warning

Code added in this fork on top of the original wireguard-go project has not been reviewed by a third party yet. The Amnesia client is currently experimental.

Things done

  • replaced the built-in TUN and conn implementations with reusable gonnect/tun and batchudp libraries
  • support on-the-fly attach/detach/swap operations for Bind and Tun instances
  • added usage examples
  • added Device configuration methods matching UAPI get/set options
  • added multi-controller peer and transport APIs with a guide
  • added the device.DeviceAPI interface and independently closable wrappers with tracked resource ownership
  • added leveled logging
  • implemented amneziawg-go-compatible obfuscation, including typed AWG 3.1 configuration fields
    • added support for per-peer obfuscation options, migration notes, and receive-profile guidance in ARCHITECTURE.md
  • added amnesia, a wgo subpackage that imports Amnezia service keys, self-hosted guest vpn:// keys, and native WireGuard/AmneziaWG configs into backend-neutral profiles for device
  • added more end-to-end and compatibility tests with other WireGuard implementations
  • added self-hosted Amnezia import e2e tests that parse server-exported WireGuard and AmneziaWG vpn:///.conf guest inputs and verify ping and HTTP tunnel access through wgo
  • added performance tests with a comparison against other WireGuard implementations
  • WASM builds supported

TODO

Contributors

Languages