This guide provides step-by-step instructions to build Status Desktop from source on Windows, Linux, and macOS.
If you're looking for instructions to build Status Mobile instead, go here.
- 🛠️ Status Desktop Build Guide
Install Chocolatey by running the following command in an Administrator PowerShell:
Set-ExecutionPolicy Bypass -Scope Process -Force; `
[System.Net.ServicePointManager]::SecurityProtocol = `
[System.Net.ServicePointManager]::SecurityProtocol -bor 3072; `
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))Run with Administrator privileges:
choco install make cmake mingw wgetYou can install them from the Microsoft website or run the Install-VC-BuildTools from the setup script scripts/windows_build_setup.ps1.
Download and install Go 1.24 from the official website.
Download and install Nim 2.2.x from the official website.
Install scoop if you don't have it already. Then run:
scoop bucket add extras
scoop install --global protobuf@3.20.1
⚠️ Note: There is a scriptscripts/windows_build_setup.ps1, which is used to install dependencies on CI machines. Feel free to use it as inspiration for the needed versions.
Install required packages:
sudo apt update
sudo apt install libpcsclite-dev build-essential mesa-common-dev libglu1-mesa-dev libssl-dev cmake jq libxcb-xinerama0 protobuf-compilerInstall Go 1.24:
Download and install from the official website.
Install nvm (Node Version Manager):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bashAdd the following to your .bashrc or .zshrc:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"Install Node.js (LTS version):
nvm install --lts
nvm alias default lts/*
npm install -g npm@latestInstall required packages:
sudo dnf install pcsc-lite-devel pcre-devel openssl-devel protobuf-devel protobuf-compilerInstall nvm and Node.js as per the Ubuntu instructions above.
Install Homebrew if not already installed.
brew install cmake pkg-config go@1.24 qt protobuf Install additional packages if you are planning to build DMG
brew install nvm yarn fileiconstatus-desktop uses Homebrew to download precompiled binary packages ("bottles") from GitHub.
Sometimes, Homebrew can hit GitHub's API rate limits, causing builds to fail.
To avoid this, you can generate a GitHub personal access token and export it in your environment:
export GITHUB_TOKEN=github_pat_YOURSUPERSECRETTOKENDONOTSHARE
export GITHUB_USER=yourgithubnameTip
You can skip this step if not planning to build a DMG
Create NVM's working directory:
mkdir ~/.nvmAdd the following to your shell profile (~/.zshrc, ~/.bash_profile, etc.):
export NVM_DIR="$HOME/.nvm"
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"
[ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm"Install Node.js (LTS version):
nvm install --lts
nvm alias default lts/*
npm install -g npm@latestInstall additional dependencies:
npm install fileicon
brew install coreutilsTip
You can skip this step if not planning to build a DMG
If using Python ≥ 3.12:
python3 -m pip install setuptools --break-system-packagesInstall Qt 6.9.2 using the Qt Online Installer.
You can use any newer 6.9.x version available in your system's package manager.
sudo apt install qt6-base-dev qt6-declarative-dev qt6-tools-dev qt6-multimedia-dev qt6-svg-dev qt6-webengine-devsudo dnf install qt6-qtbase-devel qt6-qtbase-private-devel qt6-qt5compat-devel qt6-qtsvg-devel qt6-qtdeclarative-devel qt6-qtwebchannel-devel qt6-qtwebengine-devel qt6-qtwebsockets-develSet environment variables:
$env:QTBASE = "C:\Qt\6.9.2"
$env:QTDIR = "C:\Qt\6.9.2\msvc2022_64"
$env:GOPATH = "C:\Program Files\Go\bin"
$env:VCINSTALLDIR = "C:\BuildTools\VC"Add the following paths to your PATH environment variable:
C:\ProgramData\chocolatey\bin
C:\ProgramData\scoop\shims
С:\Users\{your_username}\go\bin
C:\Program Files\Go\bin
C:\nim-2.2.6\bin
C:\Users\{you_username}\.nimble\bin
C:\Qt\6.9.2\msvc2022_64\bin
C:\BuildTools\VC\Tools\MSVC\14.44.35207\bin
C:\ProgramData\mingw64\mingw64\bin
C:\Program Files\CMake\bin
C:\Qt\Tools\Ninja
C:\Program Files\7-Zip
If you installed Qt via your system's package manager, additional environment configuration may not be necessary.
Otherwise, set those environment variables:
export QTDIR="/path/to/Qt/6.9.2/gcc_64"
export PATH="${QTDIR}/bin:${PATH}"📝 Note: On Windows, all commands should be executed under Git Bash. .
Clone the repository:
git clone https://github.com/status-im/status-app.git
cd status-desktopInstall some status-go dependencies:
make status-go-depsMake sure you have ~/go/bin in your PATH:
echo "export PATH=\"$HOME/go/bin:\$PATH\"" >> ~/.zshrcUpdate all submodules and build the dependencies:
make updateTip: Nim takes a long compile. Try using the
-j8flag where 8 is the number of cores you want to allocate
Build and run the app:
make run🎉
The following environment variables can be used to customize the build:
- INCLUDE_DEBUG_SYMBOLS (0,1) - Configure nim to include the debug symbols for desktop platforms.
- KDF_ITERATIONS (number) - Configure the KDF_ITERATIONS to use for the DB encryption
- KEYCARD_QT_SOURCE_DIR (path) - Point the build system to a local keycard-qt folder. Defaults to a new clone of the latest master in the
status-keycard-qtbuild folder. - MONITORING (true,false) - Enable/disable qml monitoring tools. The monitoring tools provide a suite of qml introspection tools to debug data transformations. Defaults to
false - NIM_SDS_SOURCE_DIR (path) - Point the build system to a local nim-sds folder. Defaults to
$(GIT_ROOT)/../nim-sds - PRODUCTION_PARAMETERS (string) - Configure the production arguments for nim compilation. Defaults to
-d:production - QMAKE (path to executable) - Point the build system to a different qt installation. Defaults to env configuration
- QML_DEBUG (true,false) - Enable qml debugger and profiler. Needs DOtherSide recompilation. Defaults to
false - QML_DEBUG_PORT (number) - Configure the qml debugger port. Defaults to
49152 - QT_ARCH (string) - Configure the Qt architecture for macOS cross-compilation. Can be used to compile Intel builds on ARM64 OS. Defaults to
$(shell uname -m) - REBUILD_NIM (true,false) - Force nim recompilation
- REBUILD_UI (true,false) - Force qrc recompilation
- STATUS_KEYCARD_QT_SOURCE_DIR (path) - Point the build system to a local status-keycard-qt folder. Defaults to
vendor/status-keycard-qt - USE_STATUS_KEYCARD_QT (0,1) - Toggle to switch between
status-keycard-goandstatus-keycard-qt. Defaults to0 - VCINSTALLDIR (path) - Visual Studio compiler installation path. Defaults to
C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\
To have nim code parsing, set the environment variables before opening your IDE. E.g. run ./env.sh code . in the source root folder.
The developer builds (using make run) compiled with make will generate and use the Status data folder at the root of the source tree as the user folder.
The release binaries (CI or make pkg) will use a user location to create and load user data.
For testing purposes, you can use a custom data folder by passing the -d flag. For example:
make run ARGS="-d=./dir"Make sure your QTDIR and PATH are correctly set. You can also try:
export QTDIR=/path/to/Qt/6.9.2/gcc_64
export PATH=$QTDIR/bin:$PATHGet more log output:
make run V=1If you get stuck or something doesn't work:
- Ask in
#feedback-desktopchannel on Status - Open an issue on GitHub