Skip to main content
This guide covers common issues encountered during Mullvad VPN development and their solutions.

Build Issues

Cargo Build Failures

”failed to run custom build command”

Cause: Missing system dependencies or protobuf compiler. Solution:

”could not find wintun.dll

Platform: Windows Solution:

Linker errors on Windows

Cause: Missing Visual Studio Build Tools or wrong environment. Solution:
  1. Install Visual Studio 2022 Build Tools
  2. Source the vcvars script:

Node/NPM Issues

”command not found: volta” or “wrong Node version”

Solution: Install volta and let it manage Node.js versions:

”Cannot find module” or npm install fails

Solution:

Cross-compilation Issues

ARM64 build fails on x64 Linux

Solution:

Runtime Issues

Daemon Won’t Start

”Permission denied” or “Address already in use”

Cause: Daemon must run as root/administrator. Solution:

Daemon fails with “cannot connect to system service”

Cause: RPC socket path mismatch or permissions. Solution:

GUI Issues

GUI shows “Lost contact with system service”

Cause: Daemon not running or crashed. Solution:
  1. Check if daemon is running:
  2. Check daemon logs:
    • Linux/macOS: /var/log/mullvad-vpn/daemon.log
    • Windows: C:\ProgramData\Mullvad VPN\daemon.log
  3. Restart the daemon

GUI won’t start in development mode

Solution:
Check console for errors. Common issues:
  • Daemon not running
  • Wrong MULLVAD_PATH environment variable
  • Missing dependencies

Tunnel Issues

”Failed to set up tunnel” or connection timeouts

Debugging steps:
  1. Enable verbose logging:
  2. Check firewall isn’t blocking:
  3. Test API connectivity:

macOS: Offline detection stuck

Known issue: macOS offline detection can be unreliable, especially after sleep. Workaround:

Platform-Specific Issues

Windows

”Failed to initialize split tunneling”

Cause: Driver not loaded or incompatible. Solution:
  1. Check driver is loaded:
  2. Reinstall the driver (requires admin):

BSOD or driver crashes

Cause: Split tunnel driver issue. Workaround: Build without split tunneling or use older driver version. Report the issue with:
  • Windows version
  • Driver version
  • Crash dump

macOS

”Full Disk Access required” for split tunneling

Cause: macOS 10.15+ requires FDA permission. Solution:
  1. Go to System Preferences → Security & Privacy → Privacy → Full Disk Access
  2. Add mullvad-daemon
  3. Restart the daemon

High CPU usage

Cause: Bug in Electron or daemon monitoring. Solution:
  1. Update to latest Electron version
  2. Check for daemon log spam
  3. Profile with Activity Monitor or Instruments

Linux

”Operation not permitted” with cgroups

Cause: Insufficient permissions or cgroups not available. Solution:

GUI crashes immediately on startup

Cause: Missing icon theme or AppArmor profile. Solution:

Debugging Tools

Environment Variables

Use these environment variables for debugging: Firewall Debugging:
DNS Debugging:
WireGuard:
API Debugging (dev builds only):
Backtrace on Crash:
MULLVAD_BACKTRACE_ON_FAULT causes heap allocation in signal handlers (undefined behavior). Use with caution!

Logging

Increase log verbosity:
Log locations:
  • Linux/macOS: /var/log/mullvad-vpn/daemon.log
  • Windows: %PROGRAMDATA%\Mullvad VPN\daemon.log
Frontend logs:
  • Open DevTools in GUI (Ctrl+Shift+I / Cmd+Option+I)
  • Check Console tab for JavaScript errors

Testing API Connectivity

Capturing Network Traffic

Getting Help

If you’re still stuck:
  1. Check existing issues: GitHub Issues
  2. Search discussions: GitHub Discussions
  3. Read documentation: Check docs/ folder in repo
  4. Report a bug: Include:
    • OS and version
    • Mullvad version
    • Steps to reproduce
    • Relevant logs
    • Expected vs actual behavior
When reporting issues, run mullvad-problem-report to generate a problem report with sanitized logs.

Next Steps

Build Instructions

Complete build setup guide

Known Issues

Platform-specific limitations and issues

Release Process

How to create a release

Architecture

Understanding the codebase