OpenLogs

All tools

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)

Read from github.com/wg-easy/wg-easy/blob/a9ee474/LICENSE

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

wg-easy/wg-easy

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

Config check passed docker compose config exited 0 on this exact file on 2026-10-22.
docker-compose.yml Version 1
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

  1. 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.

  2. 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.

  3. 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.

  4. Start it (github.com/wg-easy/wg-easy/blob/a9ee474/docs/content/examples/tutorials/basic-installation.md)
    docker compose up -d
  5. 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

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)