Quick Start
For the fastest development setup:-
Clone the repository with submodules:
-
Install Rust and setup for your platform:
-
Install Node.js/npm via Volta and build dependencies:
- Start developing!
Detailed Setup by Platform
Linux Development
Ubuntu/Debian
Fedora/RHEL
Nix Devshell
The recommended approach on Linux:macOS Development
iOS Development Setup
Additional iOS requirements:.xcconfig files to add your Apple Developer Team ID and provisioning profile names.
Windows Development
Prerequisites Installation
-
Install Visual Studio 2022
- Download Build Tools for Visual Studio 2022 or Visual Studio Community
- Select “Desktop development with C++” workload
- Ensure Windows 10/11 SDK is selected
-
Install Git for Windows
- Download from git-scm.com
- This provides Git Bash and Unix utilities
-
Install Rust
-
Install Zig
- Download from ziglang.org/download
- Extract and add to PATH
-
Install Volta
- Download MSI from volta-cli/volta releases
- Run installer
-
Install Go
- Download installer from golang.org
- Run installer
-
Install Protobuf
- Download from GitHub releases
- Extract and add
bin/to PATH
Setup in Git Bash
Android Development
Using Container (Recommended)
This is the easiest and most reliable method:Manual Setup on Linux
Development Workflow
Running the Daemon
Linux/macOS:Running the Desktop GUI
With the daemon running, start the Electron app:Running the CLI
Common Development Commands
Rust:Environment Variables
Development-Specific Variables
Editor/IDE Setup
VS Code
Recommended extensions:- rust-analyzer
- ESLint
- Prettier
- TypeScript and JavaScript Language Features
IntelliJ/Android Studio
For Android development, open theandroid/ directory as a project.
Xcode
For iOS development, openios/MullvadVPN.xcodeproj.
Git Workflow
Post-Checkout Hook
Automatically update Rust toolchain when version changes:Submodule Updates
When pulling changes that update submodules:Commit Signing
All merge commits to main must be GPG signed. Individual commits in feature branches don’t require signing unless they modify security-critical files.Troubleshooting
”command not found” errors
Ensure all tools are in your PATH:Rust toolchain issues
Node/npm version issues
Permission denied when running daemon
The daemon must run as root/SYSTEM:- Linux/macOS: Use
sudo - Windows: Use PsExec to get SYSTEM shell
Submodule not found
Build fails with “protoc: not found”
Install protobuf compiler and ensure it’s in PATH:Android build fails on ARM64 Linux
Follow the 2-stage build process described in the Building guide - build proto files on x64 first.macOS: bash version too old
Next Steps
- Read the Building guide for detailed build instructions
- Explore the Repository Structure to understand the codebase
- Check out the security documentation
- Review contribution guidelines