Dependencies for Amnezia VPN Client: Complete Build and Runtime Guide
The Amnezia VPN client manages all third-party libraries through Conan and requires CMake, Qt 6.10+, and platform-specific packages like OpenVPN, WireGuard implementations, and XRay bindings to build and run across desktop and mobile platforms.
The amnezia-client repository uses a sophisticated dependency management system to support multiple VPN protocols simultaneously. Understanding these dependencies is essential for developers building from source or contributing protocol implementations. The project centralizes all runtime library declarations in dev/conanfile.py and orchestrates builds through CMake.
Runtime Dependencies by Platform
The Conan package manager handles all third-party libraries, with platform-specific subsets defined in dev/conanfile.py.
Cross-Platform Core Libraries
Every target platform requires these foundational packages:
libssh@amnezia– SSH protocol implementation for management channelsopenssl– Cryptographic primitives and TLS supportzlib– Compression for network traffic and payload optimization
Desktop Service Dependencies
Windows, Linux, and macOS builds include specialized tunnel drivers and VPN protocol implementations:
awg-windows/awg-go– Amnezia WireGuard implementation (Windows binary vs. Go implementation for Unix)tap-windows6– Legacy TAP driver for Windows OpenVPNwin-split-tunnel– Windows kernel driver for selective traffic routingwintun– Modern Wintun driver for WireGuard on Windowsamnezia-xray-bindings– XRay protocol integration for censorship resistancetun2socks– Layer-3 SOCKS proxy tunnelingopenvpn– Standard OpenVPN protocol supportv2ray-rules-dat– GeoIP and domain routing rules database
iOS and macOS Network Extensions
Network Extension (NE) targets use framework-based dependencies:
awg-apple– WireGuard implementation packaged as Apple frameworkshev-socks5-tunnel– SOCKS5 tunnel implementation embedded as a frameworkopenvpnadapter– OpenVPN adapter specifically for Network Extensions
Android Runtime Libraries
Android builds rely on mobile-optimized packages:
amnezia-libxray– XRay core compiled for Android NDKawg-android– WireGuard implementation for Androidopenvpn-pt-android– Pluggable transport OpenVPN for Android
Build System Prerequisites
According to dev/README.md, the build environment requires specific tools before Conan can fetch dependencies.
Essential Development Tools
- CMake – Generates native build systems (Ninja, Make, or MSVC projects)
- C/C++ compiler – GCC, Clang, or Microsoft Visual C++ depending on host platform
- Conan – Package manager that resolves and downloads the runtime libraries listed above
- Qt 6.10 or later – UI framework requiring Core, Qt 5 Compatibility, and Remote Objects modules
Optional Packaging Tools
For creating distributable installers:
- Qt Installer Framework – Cross-platform installer generation
- WiX Toolset – Windows Installer XML toolchain for
.msicreation
Installing and Managing Dependencies
The build workflow separates dependency acquisition from compilation.
Fetching Conan Packages
From the repository root, install all platform-specific dependencies:
conan install . --output-folder=build --build=missing
This command processes dev/conanfile.py, downloading binaries for awg-windows, openvpn, amnezia-xray-bindings, and other declared packages into the build folder.
Configuring with CMake
After Conan installation, link the fetched libraries:
mkdir -p build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --parallel
The dev/CMakeLists.txt configuration automatically locates Qt, OpenSSL, and Conan-provided packages during the configuration phase.
Adding New Third-Party Libraries
To integrate a new dependency like spdlog:
-
Edit
dev/conanfile.pyto add the requirement:def requirements(self): # existing dependencies... self.requires("spdlog/1.12.0") -
Re-run the install command to fetch the new package:
conan install . --output-folder=build --build=missing -
Link in
dev/CMakeLists.txt:find_package(spdlog REQUIRED) target_link_libraries(amnezia-client PRIVATE spdlog::spdlog)
Key Configuration Files
These files define how dependencies flow through the amnezia-client build system:
dev/conanfile.py– Central manifest declaring all Conan packages by platform and feature setdev/CMakeLists.txt– Root build configuration that finds Qt, OpenSSL, and Conan librariesdev/recipes/– Directory containing custom Conan recipes for specialized packages liketap-windows6andawg-androiddev/THIRD_PARTY_LICENSES.md– Comprehensive license attributions for all bundled components
Summary
- The amnezia-client uses Conan as its package manager, with all runtime libraries declared in
dev/conanfile.py. - Platform-specific dependencies include
awg-windows/awg-apple/awg-androidfor WireGuard,openvpnfor OpenVPN support, andamnezia-xray-bindingsfor XRay protocols. - Universal dependencies
libssh@amnezia,openssl, andzlibare required on every supported platform. - The build toolchain requires CMake 3.16+, Qt 6.10+, a C++17 compiler, and Conan 2.0+ to compile successfully.
- Custom Conan recipes in
dev/recipes/handle specialized VPN drivers and platform-specific tunnel implementations.
Frequently Asked Questions
What package manager does the Amnezia VPN client use?
The amnezia-client project uses Conan exclusively to manage C++ dependencies. The dev/conanfile.py file defines requirements for WireGuard implementations, OpenVPN, XRay bindings, and cryptographic libraries, which Conan downloads and caches before CMake configures the build.
Does Amnezia VPN client require Qt to compile?
Yes, Qt 6.10 or later is mandatory. The build specifically requires the Core module, Qt 5 Compatibility layer, and Remote Objects for cross-platform UI and inter-process communication. Qt paths must be discoverable by CMake during the configuration phase.
How do I add a new third-party library to the Amnezia VPN build?
Add self.requires("package/version") to the requirements() method in dev/conanfile.py, then re-run conan install . --output-folder=build --build=missing. Finally, update dev/CMakeLists.txt to locate the package using find_package() and link it to the amnezia-client target.
What are the Windows-specific dependencies for Amnezia VPN?
Windows builds require awg-windows (WireGuard), tap-windows6 and wintun (TUN/TAP drivers), and win-split-tunnel for selective routing. These are managed as Conan packages alongside universal dependencies like openssl and zlib defined in the root conanfile.py.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →