wg-easy
WireGuard VPN server with a web interface for adding and removing clients.
- Replaces
-
Paid VPN services, such as NordVPN.
All open-source alternatives to NordVPN
- Difficulty
-
Difficulty: Easy
1 service, 2 volume mounts, no env values to set, host access: cap_add. Heuristic score 2 of 11: easy.
- Stack
TypeScript (language)
- Deployment
docker_compose
- Requirements
Not stated.
- License
-
AGPL-3.0(OSI-approved open source) - Business model
-
Unknown
The README at the pinned commit does not state a business model, so it stays unknown.
Source: github.com/wg-easy/wg-easy/blob/a9ee474/README.md, read on .
- Repository
GitHub stats
- Stars
- 27,235
- Forks
- 2,593
- Open issues and pull requests
- 51
- Last push
- 2026-10-22
- Latest release
- v15.4.0
- Released
- 2026-08-14
From the GitHub API on . These numbers are a snapshot, not live. GitHub detected the license as AGPL-3.0.
Compose file
volumes:
etc_wireguard:
services:
wg-easy:
#environment:
# Optional:
# - PORT=51821
# - HOST=0.0.0.0
# - INSECURE=false
image: ghcr.io/wg-easy/wg-easy:15
container_name: wg-easy
networks:
wg:
ipv4_address: 10.42.42.42
ipv6_address: fdcc:ad94:bacf:61a3::2a
volumes:
- etc_wireguard:/etc/wireguard
- /lib/modules:/lib/modules:ro
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
# - NET_RAW # ⚠️ Uncomment if using Podman
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv6.conf.all.forwarding=1
- net.ipv6.conf.default.forwarding=1
networks:
wg:
driver: bridge
enable_ipv6: true
ipam:
driver: default
config:
- subnet: 10.42.42.0/24
- subnet: fdcc:ad94:bacf:61a3::/64
From the app's own repository: github.com/wg-easy/wg-easy/blob/a9ee474/docker-compose.yml.
Compose file from the app repository.
Install
- Docker with the Compose plugin (github.com/wg-easy/wg-easy/blob/a9ee474/docs/content/examples/tutorials/basic-installation.md)
A host with Docker and the Docker Compose plugin. This entry runs from a compose file.
- Save the compose file as docker-compose.yml (github.com/wg-easy/wg-easy/blob/a9ee474/docker-compose.yml)
Use the compose file shown above.
- What the compose file check ran with (github.com/wg-easy/wg-easy/blob/a9ee474/docs/content/examples/tutorials/basic-installation.md)
The compose file check ran on this file alone. The folder held only this file. The basic installation guide tells the reader to download docker-compose.yml from the repository and run docker compose up -d in the same folder.
- Start it (github.com/wg-easy/wg-easy/blob/a9ee474/docs/content/examples/tutorials/basic-installation.md)
docker compose up -d - Open the app (github.com/wg-easy/wg-easy/blob/a9ee474/docker-compose.yml)
Open http://localhost:51821. The compose file publishes host port 51821 for the wg-easy service.
Compose file check: config_ok on 2026-10-22.
Gotchas and maintenance
Gotchas
- The compose file publishes host ports. Host ports: 51820/udp (wg-easy), 51821 (wg-easy). A port without a host address listens on all host network interfaces. (github.com/wg-easy/wg-easy/blob/a9ee474/docker-compose.yml, checked 2026-10-22)
- The compose file mounts host folders. Host paths mounted into containers: /lib/modules at /lib/modules (wg-easy). (github.com/wg-easy/wg-easy/blob/a9ee474/docker-compose.yml, checked 2026-10-22)
- Some services get elevated host access. wg-easy adds Linux capabilities. (github.com/wg-easy/wg-easy/blob/a9ee474/docker-compose.yml, checked 2026-10-22)
Signals
- Open issues and pull requests: 51
- Last push: 2026-10-22 (0 days before this page was built)
- Latest release: v15.4.0 on 2026-08-14 (69 days before this page was built)