a client for vpngate.net
  • Go 96.6%
  • Just 1.8%
  • Nix 1.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
renovate[bot] 9a329a7ba4
fix(deps): update module golang.org/x/net to v0.62.0 (#220)
* fix(deps): update module golang.org/x/net to v0.62.0

* chore: update vendorHash in flake.nix

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-11-01 09:08:18 -05:00
.github/workflows chore(deps): update cachix/install-nix-action digest to 75c75c3 (#215) 2026-11-01 09:02:28 -05:00
cmd feat: improve daemon and connection reliability 2026-10-03 11:03:47 -04:00
docs chore(deps): update stefanzweifel/git-auto-commit-action digest to d0b0110 (#217) 2026-11-01 09:02:20 -05:00
pkg feat: improve daemon and connection reliability 2026-10-03 11:03:47 -04:00
test_data Add parsing tests (#17) 2021-01-30 18:38:52 -05:00
tools/gendocs docs: generate per-command CLI reference into docs/cli/ 2026-07-22 00:15:15 -04:00
.envrc record new demo gif 2026-07-27 20:01:37 -04:00
.gitignore feat: improve daemon and connection reliability 2026-10-03 11:03:47 -04:00
.goreleaser.yaml feat: improve daemon and connection reliability 2026-10-03 11:03:47 -04:00
AGENTS.md feat: improve daemon and connection reliability 2026-10-03 11:03:47 -04:00
CHANGELOG.md chore(release): prepare v0.8.0 2026-10-03 11:08:01 -04:00
flake.lock record new demo gif 2026-07-27 20:01:37 -04:00
flake.nix fix(deps): update module golang.org/x/net to v0.62.0 (#220) 2026-11-01 09:08:18 -05:00
go.mod fix(deps): update module golang.org/x/net to v0.62.0 (#220) 2026-11-01 09:08:18 -05:00
go.sum fix(deps): update module golang.org/x/net to v0.62.0 (#220) 2026-11-01 09:08:18 -05:00
justfile feat: improve daemon and connection reliability 2026-10-03 11:03:47 -04:00
LICENSE Update LICENSE (#29) 2021-04-04 10:38:39 -04:00
main.go Add initial prototype (#1) 2020-12-31 02:56:01 -05:00
README.md docs: clarify winget install source 2026-10-03 12:23:52 -04:00
renovate.json Change Renovate schedule to 1st day of the month 2026-06-06 07:29:01 -04:00
vpngate.gif record new demo gif 2026-07-27 20:01:37 -04:00

vpngate

This is a client for vpngate.net.

vpngate

This client fetches the list of available relay servers provided by vpngate.net, and allows you to filter and connect to a server of your liking.

You can check out your current IP address and region at https://ipinfo.io/json, or run the following:

curl ipinfo.io

Requirements

  • OpenVPN
  • macOS, Linux, or Windows

Install

Check out vpngate-mac for a native macOS Client

You can install vpngate in a few different ways, and it will differ slightly depending on your OS.

Homebrew (macOS and linux)

vpngate can be installed with homebrew (if on macOS, ensure that xcode is installed before installing homebrew by running xcode-select --install).

brew install openvpn davegallant/public/vpngate

Windows

vpngate can be installed with winget, which also installs OpenVPN as a dependency:

winget install davegallant.vpngate --source winget

The --source winget flag skips the Microsoft Store source, which can fail with a certificate error (0x8a15005e).

After installing, open a fresh terminal — the vpngate command won't be found in shells that were already open when the install modified PATH.

Alternatively, install OpenVPN from the official website, then manually download and extract the Windows release from the relevant Github release.

Once the release is extracted, open Command Prompt as Administrator, and run vpngate.exe from the location where it was extracted.

image image

Build from source

Ensure that go is installed.

CGO_ENABLED=0 go install github.com/davegallant/vpngate@latest

Ensure that the go bin path is discoverable:

echo 'export PATH=$PATH:$HOME/go/bin' >> ~/.profile
source ~/.profile

Usage

For full usage instructions, see the cli docs.

If on macOS, you may need to add openvpn to your PATH (if you installed it with brew): export PATH=$(brew --prefix openvpn)/sbin:$PATH

Examples

Run in the background, then check on it, tail its log, or disconnect later. status, logs, and disconnect need sudo too, since the daemon's state is only readable by the user that ran connect -d (root):

sudo vpngate connect -d --country Japan
sudo vpngate status
sudo vpngate logs -f
sudo vpngate disconnect

List Japanese servers sorted by lowest ping:

vpngate list --country Japan --sort ping

List high-scoring US servers as JSON:

vpngate list --country us --min-score 1000000 --output json

Connect to a random server with quality filters:

sudo vpngate connect --random --country Japan --max-ping 100 --min-score 500000

Refresh the cached server list before listing:

vpngate list --refresh

Bypass the cache entirely:

vpngate list --no-cache

Inspect or clear the cache:

vpngate cache path
vpngate cache clear

Notes

  • I do not maintain any of the servers on vpngate.net (connect to these servers at your own discretion)
  • Many of the listed servers claim to have a logging policy of 2 weeks