Installing

April 30, 2026 ยท View on GitHub

Download pre-built binaries for a release

There are pre-built binaries of the last released version of Mozilla VPN for Windows, Mac, Linux, Android iOS and Wasm.

Table Of Contents

Linux

Flatpak

The Mozilla VPN client supports building and distribution via flatpak, and is available on Flathub at org.mozilla.vpn.

Building the Flatpak

The flatpak manifests for the latest stable release can be found at flathub/org.mozilla.vpn, and this project also contains a manifest for local development in the linux/flatpak directory.

To build the flatpak package, start by installing the org.flatpak.Builder app:

flatpak install -y flathub org.flatpak.Builder

Add the Flathub repo user-wide:

flatpak remote-add --if-not-exists --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo

Then build the project manifest and install it:

flatpak run org.flatpak.Builder --force-clean --sandbox --user --install --install-deps-from=flathub --ccache build-flatpak linux/flatpak/org.mozilla.vpn.yml

Once installed, the Mozilla VPN client can be run using the org.mozilla.vpn app identifier:

   flatpak run org.mozilla.vpn

Debian & Ubuntu (.deb)

Supported on Ubuntu 22.04+, Linux Mint 20+, and Debian 11+.

sudo install -d -m 0755 /etc/apt/keyrings
wget -q https://packages.mozilla.org/apt/repo-signing-key.gpg -O- | sudo tee /etc/apt/keyrings/packages.mozilla.org.asc > /dev/null

Verify the key fingerprint matches 35BAA0B33E9EB396F59CA838C0BA5CE6DC6315A3:

gpg -n -q --import --import-options import-show /etc/apt/keyrings/packages.mozilla.org.asc | awk '/pub/{getline; gsub(/^ +| +$/,""); if(\$0 == "35BAA0B33E9EB396F59CA838C0BA5CE6DC6315A3") print "\nThe key fingerprint matches ("\$0").\n"; else print "\nVerification failed: the fingerprint ("\$0") does not match the expected one.\n"}'

Add the repository and install:

echo "deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc] https://packages.mozilla.org/apt mozilla main" | sudo tee -a /etc/apt/sources.list.d/mozilla.list > /dev/null
sudo apt-get update && sudo apt-get install mozillavpn

Manual .deb download

Past releases are available at archive.mozilla.org. Download the .deb for your release and install with:

sudo dpkg -i mozillavpn-<version>.deb

Fedora (.rpm)

RPM packages are available at archive.mozilla.org. Download the .rpm for your release and install with:

sudo dnf install ./mozillavpn-<version>.rpm

From Source

Clone the repository and install build dependencies.

# For Debian-ish
sudo apt-get install devscripts equivs
mk-build-deps --install --remove linux/debian/control
# For Fedora-ish
sudo dnf builddep --define "_version 0" linux/mozillavpn.spec

Then install the Python build dependencies:

pip install -r requirements.txt

Then configure and build:

cmake -S . -B build -GNinja -DCMAKE_INSTALL_PREFIX="/"
cmake --build build
sudo cmake --install build

The built binary is at build/src/mozillavpn. Note that wireguard-tools is also required at runtime. You can run the app with mozillavpn Alternatively, you can use two terminals to run the daemon manually sudo mozillavpn linuxdaemon and separately mozillavpn

Android

Google Play

We are in the Google Play Store older versions can be fetched from archive.mozilla.org.

Non Google Play devices

Using APK file

For devices that do not support Google-Play Services, a non-GPS build can be downloaded from archive.mozilla.org or GitHub releases. Look for the android directory (if you are using archive.mozilla.org) and select the mozillavpn-foss-* APK file that matches your device's architecture.

Verify certificate hash before installing (optional)

This is the SHA-256 fingerprint of the certificate used to sign the Apk's 33:5D:AB:EB:46:9D:40:D7:77:90:31:D9:AE:E3:B8:56:8E:01:DB:52:BF:C3:C1:AF:60:40:B5:39:9A:51:7A:3C

You can use the following command to retrieve the signing certificate fingerprint of the file: apksigner verify -v --print-certs ./path/to/mozillavpn-foss.apk

To verify the authenticity of the downloaded APK, ensure that the field Signer #1 certificate SHA-256 digest matches the certificate hash above.

Using Obtainium

Obtainium is an handy tool for installing and updating Android apps directly from their release channels (GitHub releases, websites, etc.). You can download Obtainium from the official website or from F-Droid.

Install procedure:

  • Install and open Obtainium
  • Tap "Add app"
  • Search for "mozilla vpn"
  • Select GitHub source and tap "Search"
  • Select "mozilla-mobile/mozilla-vpn-client" and tap "Pick"
  • Tap "Add"
  • Select the "mozillavpn-foss-*" build and tap "Continue" (Obtainium will automatically choose the correct packages for your device architecture)
  • Wait for the download to complete, then tap "Install" and select the mozilla-vpn-foss* file again
  • Mozilla VPN is now installed

From Source

Please install miniconda.

$ conda env create -f env-android.yml
$ conda activate vpn-android
# Optional: If another aarch then arm64-v8a is needed do:
$ conda env config vars set ANDROID_ARCH=x86
# Valid architecture values: `x86`, `x86_64`, `armeabi-v7a` `arm64-v8a`.
# Optional: If another QT Version is needed do: 
$ conda env config vars set QT_VERSION=1.2.3
# Re-Activate the ENV to apply changes. 
$ conda deactivate
$ conda activate vpn-android

# Setup the Android SDK and NDK for the current Conda env.
$ ./scripts/android/conda_setup_sdk.sh
# Setup the Conda env to fetch and use QT
$ ./scripts/android/conda_setup_qt.sh
$ conda deactivate
$ conda activate vpn-android

Trigger a build with:

$ ./scripts/android/cmake.sh -d 

Windows

Windows 10&11 x64

Get the installer of the latest release here, you can find past versions on archive.mozilla.org.

Windows 11 aarch64

[!INFO] We don't consider those builds rock-stable

We don't have any stable arm64 builds yet, you can however help us test by grabbing the latest release from archive.mozilla.org. Look for windows MozillaVPN-aarch64.msi

From Source

Have miniconda installed.

[!INFO] You may need to enable powershell scripts. You can call Set-ExecutionPolicy -ExecutionPolicy Unrestricted

$ cd mozilla-vpn-client
$ conda env create -f env-windows.yml
$ conda activate vpn
# Download the Windows SDK using Xwin
$ ./scripts/windows/conda-setup-xwin-sdk.ps1
# Setup the conda env to use a prebuild Qt from Moz-CI
$ ./scripts/windows/conda_setup_win_qt.ps1
# Reactivate the env to apply the changes:
$ conda deactivate
$ conda activate vpn

# Configure
$ cmake -S . -B build -GNinja

# Compile
$ cmake --build build

macOS

Get the installer of the latest release here, you can find past versions on archive.mozilla.org.

From Source

Install Xcode - https://developer.apple.com/xcode/

Before you start this process, open Xcode, go to settings, accounts, and sign in with your Apple ID. If you are a Mozilla developer, this is an Apple ID associated with your LDAP account.

$ cd mozilla-vpn-client
$ conda env create -f env-apple.yml
$ conda activate vpn
$ ./scripts/macos/conda_setup_qt.sh
# Reactivate the env to apply the changes:
$ conda deactivate
$ conda activate vpn

# Configure
$ cmake -S . -B build -GNinja -DCODE_SIGN_IDENTITY=<signing identity>

# Compile
$ cmake --build build
# Run 
$ open ./build/src/Mozilla\ VPN.app

Many features of the Mozilla VPN project depend on having a valid code signature. To determine the codesigning identities available to you, you can use the security tool on the command line as follows:

user@example ~ % security find-identity -v -p codesigning                
  1) AAAABBBBCCCCDDDDEEEEFFFFAAAABBBBCCCCDDDD "Apple Development: Jane Doe (XXXXXXXXXX)"
     1 valid identities found

Thus, to configure the project to use the above codesigning identity, we can provide the argument -DCODE_SIGN_IDENTITY=AAAABBBBCCCCDDDDEEEEFFFFAAAABBBBCCCCDDDD

To distribute a signed application for installation on other machines, an embedded provisioning profile is also required. The path to the provisioning profile can be specified with the argument -DCODE_SIGN_PROFILE=<path/to/embedded.provisionprofile>. When this argument is unset, an attempt will be made to automatically lookup the provisioning profile from the ~/Library/Developer/Xcode/UserData/Provisioning\ Profiles directory.

Building the installer

Use the --target macpkg to build the MacOS installer.

This will produce an macOS installer package at build-macos/macos/pkg/MozillaVPN.pkg

Building with Xcode

Use the same configure command above and use -GXcode as the CMake generator:

cmake -S . -B build-macos -DCMAKE_PREFIX_PATH=<Qt unzipped path>/macos/lib/cmake/ -GXcode

This will generate an Xcode project file at build-macos/Mozilla VPN.xcodeproj which can be opened by Xcode:

open build-macos/Mozilla\ VPN.xcodeproj

Once Xcode has opened the project, select the mozillavpn target and start the build.

iOS

Get the latest release in the Apple App Store.

From Source

Install Xcode - https://developer.apple.com/xcode/

Before you start this process, open Xcode, go to settings, accounts, and sign in with your Apple ID. If you are a Mozilla developer, this is an Apple ID associated with your LDAP account.

[!CAUTION] _Xcode 26 has changed where iOS SDKs are stored. Symbolic links must be created so qt-cmake can find the SDK. (If a future version of qt-cmake changes how it looks for iOS SDKs, this section can be removed.)

$ cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
$ ln -s iPhoneOS.sdk iPhoneOS26.0.sdk # (for iOS 26.0 - change the version number for other SDK versions)

Important: The specific iOS SDK versions must also be downloaded via Xcode. Creating a symbolic link will not download the SDK automatically.

If the macOS conda environment has not already been installed, install it:

$ conda env create -f env-apple.yml -n vpn
$ conda activate vpn
# Setup QT
$ ./scripts/macos/conda_setup_qt.sh
# Check for correctness:
$ which qt-cmake # should be ~/miniconda3/envs/vpn/bin/qt-cmake

qt-cmake -S . -B build-ios \
    -GXcode -DQT_HOST_PATH_CMAKE_DIR=~/Qt/6.10.1/macos/lib/cmake \
    -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.0.sdk

(Older qt-cmake versions used the -DQT_HOST_PATH=~/Qt/6.6.3/macos flag rather than QT_HOST_PATH_CMAKE_DIR shown here. If having issues, try the older format.)

If you get the error No CMAKE_Swift_COMPILER could be found., include the flag with the direct path the Swift compiler:

qt-cmake -S . -B build-ios -GXcode -DQT_HOST_PATH_CMAKE_DIR=~/Qt/6.10.1/macos/lib/cmake -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.0.sdk -DCMAKE_Swift_COMPILER=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc

This will generate an Xcode project file at build-ios/Mozilla VPN.xcodeproj which can be opened by Xcode:

open build-ios/Mozilla\ VPN.xcodeproj

Once Xcode has opened the project, select the mozillavpn target and start the build.

Tips:

  • If you can't see a simulator target in the Xcode interface, look at Product -> Destination -> Destination Architectures -> Show Both
  • Due to lack of low level networking support, it is not possible to turn on the VPN from the iOS simulator in Xcode.

WASM

WASM builds allow running the VPN client UI in a browser, primarily for development and testing purposes. Try it in the browser

From Source

Install miniconda, then create and activate the WASM conda environment:

conda env create -f env-wasm.yml
conda activate vpn

Install EMSDK and Qt for WASM:

./scripts/wasm/conda_setup_emsdk.sh
./scripts/wasm/conda_setup_qt.sh
# Re-activate to apply changes
conda deactivate && conda activate vpn

Configure and build:

qt-cmake -S . -B build-wasm -GNinja \
    -DCMAKE_BUILD_TYPE=MinSizeRel \
    -DBUILD_TESTS=OFF
cmake --build build-wasm

You will find the index.html in ./build-wasm/wasm-build/index.html

Troubleshooting

git clean if you're having build troubles

It's easy for your local build to get messed up. When in doubt do a git clean to blow away all generated files. Running git clean -xfdi . from the root of the folder provides you an interactive space where you can review everything that's going to be deleted. You may want to exclude .vscode or .env that you've set-up just the way you like.

did you activate your conda environment?

You'll need to run conda activate vpn (or vpn-android for Android) every time you open a new terminal. If you forget and then run cmake the build can get confused / stuck. git clean, make sure conda environment is activated, try again.

ask for help

We are on a mission to make building easy. If you've tried the above two steps, don't get stuck ask for help.