Official IVPN Desktop app
IVPN for Desktop (Windows/macOS/Linux)
IVPN for Desktop is the official IVPN app for desktop platforms. Some of the features include: multiple protocols (OpenVPN, WireGuard), Kill-switch, Multi-Hop, Trusted Networks, AntiTracker, Custom DNS, Dark mode, and more. IVPN Client app is distributed on the official site www.ivpn.net.

About this Repo
This is the official Git repo of the IVPN for Desktop app.
The project is divided into three parts:
- daemon: Core module of the IVPN software built mostly using the Go language. It runs with privileged rights as a system service/daemon.
- UI: Graphical User Interface built using Electron.
- CLI: Command Line Interface.
Installation
These instructions enable you to get the project up and running on your local machine for development and testing purposes.
Requirements
Windows
Go 1.26+; Git; npm; Node.js (22.12.0); nsis3; Visual Studio 2022 with 'Windows 10 SDK 10.0.19041.0', 'Windows 11 SDK 10.0.22000.0', 'MSVC v143 C++ x64 build tools', 'C++ ATL for latest v143 build tools'; gcc compiler (e.g. MSYS2 MinGW-w64 UCRT).
Additional requirements for ARM64 builds: Visual Studio 2022 individual components (VS Installer > Modify > Individual components):
- 'MSVC v143 - VS 2022 C++ ARM64 build tools (Latest)'
- 'C++ ATL for latest v143 build tools (ARM64/ARM64EC)' - required for native DLL (IVPN Helpers Native) ARM64 build
llvm-mingw-YYYYMMDD-ucrt-x8664.zip) - required for CGO cross-compilation of the daemon (wifiNotifier) targeting ARM64; set the LLVMMINGW environment variable to its root folder.
macOS
Go 1.26+; Git; npm; Node.js (22.12.0); Xcode Command Line Tools. To compile the OpenVPN/OpenSSL binaries locally, additional packages are required:
brew install autoconf automake libtool To compile liboqs, additional packages are required:
brew install cmake ninja openssl@1.1 wget doxygen graphviz astyle valgrind
pip3 install pytest pytest-xdist pyyaml
Linux
Go 1.26+; Git; npm; Node.js (22.12.0); gcc; make; FPM; curl; rpm; libiw-dev.
To compile liboqs, additional packages are required: sudo apt install astyle cmake gcc ninja-build libssl-dev python3-pytest python3-pytest-xdist unzip xsltproc doxygen graphviz python3-yaml valgrind
Additional requirements for ARM64 cross-compilation (on x86_64 host):
sudo apt-get install gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu sudo dpkg --add-architecture arm64 && sudo apt-get update sudo apt-get install libssl-dev:arm64 liblz4-dev:arm64 liblzo2-dev:arm64 libpam0g-dev:arm64
Compilation
Windows
Instructions to build installer of IVPN Client (daemon + CLI + UI): Use Developer PowerShell for VS 2022 (required for building native sub-projects).
git clone https://github.com/ivpn/desktop-app.git
cd desktop-app/ui/References/Windows
Compile all binaries (no signing, no installer)
.\build.bat
Build unsigned installer
.\package-release.ps1
Compiled installer can be found at: ui/References/Windows/bin
macOS
Instructions to build DMG package of IVPN Client (daemon + CLI + UI):
git clone https://github.com/ivpn/desktop-app.git
cd desktop-app/ui/References/macOS
Build for Apple Silicon (arm64):
ARCHTARGET=arm64 ./build.sh -c <APPLEDevID_CERTIFICATE>
Build for Intel (x86_64):
ARCHTARGET=x8664 ./build.sh -c <APPLEDevIDCERTIFICATE>
Compiled DMG files can be found at: ui/References/macOS/_compiled/
IVPN-X.X.X-arm64.dmgโ Apple Silicon (M1/M2/M3)IVPN-X.X.X.dmgโ Intel (x86_64)
Linux
# get sources
git clone https://github.com/ivpn/desktop-app.git
cd desktop-app
Base package (daemon + CLI):
# native build (host architecture)
./cli/References/Linux/build.sh
ARM64 cross-compile (on x86_64 host)
ARCH_TARGET=arm64 ./cli/References/Linux/build.sh
Compiled DEB/RPM packages can be found at cli/References/Linux/outbin/<arch>/ Note: You can refer to manual installation guide for Linux.
Graphical User Interface (UI):
# native build
./ui/References/Linux/build.sh
ARM64 cross-compile
ARCH_TARGET=arm64 ./ui/References/Linux/build.sh
Compiled DEB/RPM packages can be found at ui/References/Linux/outbin/<arch>/ Note: It is required to have installed IVPN Daemon before running IVPN UI.
Versioning
Project is using Semantic Versioning (SemVer) for creating release versions.
SemVer is a 3-component system in the format of x.y.z where:
x stands for a major version y stands for a minor version z stands for a patch
So we have: Major.Minor.Patch
Contributing
If you are interested in contributing to IVPN for Desktop project, please read our Contributing Guidelines.
Security Policy
If you want to report a security problem, please read our Security Policy.
License
This project is licensed under the GPLv3 - see the License file for details.
Authors
See the Authors file for the list of contributors who participated in this project.
Acknowledgements
See the Acknowledgements file for the list of third party libraries used in this project.