11 KiB
🛠️ Status Desktop Build Guide
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.
📑 Table of Contents
- 🛠️ Status Desktop Build Guide
1️⃣ Prerequisites
Windows
Install Chocolatey
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'))
Install Required Packages
Run with Administrator privileges:
choco install make cmake mingw wget
Install Microsoft Visual C++ Build Tools
You can install them from the Microsoft website or run the Install-VC-BuildTools from the setup script scripts/windows_build_setup.ps1.
Install Go 1.26
Download and install Go 1.26 from the official website.
Install Nim 2.2.x
Download and install Nim 2.2.x from the official website.
Install protobuf
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 script
scripts/windows_build_setup.ps1, which is used to install dependencies on CI machines. Feel free to use it as inspiration for the needed versions.
Linux
Ubuntu
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-compiler
Install Go 1.26:
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 | bash
Add 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@latest
Fedora
Install required packages:
sudo dnf install pcsc-lite-devel openssl-devel protobuf-devel protobuf-compiler
Install nvm and Node.js as per the Ubuntu instructions above.
macOS
Install Homebrew
Install Homebrew if not already installed.
Install Required Packages
brew install cmake pkg-config go qt protobuf
Install additional packages if you are planning to build DMG
brew install nvm yarn fileicon
Export GITHUB_USER and GITHUB_TOKEN environment variables
status-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=yourgithubname
Install Node.js
Tip
You can skip this step if not planning to build a DMG
Create NVM's working directory:
mkdir ~/.nvm
Add 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@latest
Install additional dependencies:
npm install fileicon
brew install coreutils
Install Python Dependencies
Tip
You can skip this step if not planning to build a DMG
If using Python ≥ 3.12:
python3 -m pip install setuptools --break-system-packages
2️⃣ Install Qt
Windows & Linux
Install Qt 6.11.0 using the Qt Online Installer.
Linux (Alternative)
You can use any newer 6.11.x version available in your system's package manager.
Ubuntu
sudo apt install qt6-base-dev qt6-declarative-dev qt6-tools-dev qt6-multimedia-dev qt6-svg-dev qt6-webengine-dev
Fedora
sudo 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-devel
3️⃣ Configure Environment
Windows
Set environment variables:
$env:QTBASE = "C:\Qt\6.11.0"
$env:QTDIR = "C:\Qt\6.11.0\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.11.0\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
Linux
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.11.0/gcc_64"
export PATH="${QTDIR}/bin:${PATH}"
4️⃣ Build the App
📝 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-desktop
Install some status-go dependencies:
make status-go-deps
Make sure you have ~/go/bin in your PATH:
echo "export PATH=\"$HOME/go/bin:\$PATH\"" >> ~/.zshrc
Update all submodules and build the dependencies:
make update
Tip: 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
🎉
Build Configuration Options
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
- 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. 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 - VCINSTALLDIR (path) - Visual Studio compiler installation path. Defaults to
C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\
Pro tips
Working with VS Code
To have nim code parsing, set the environment variables before opening your IDE. E.g. run ./env.sh code . in the source root folder.
Data 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"
🐞 Troubleshooting
Qt Not Found
Make sure your QTDIR and PATH are correctly set. You can also try:
export QTDIR=/path/to/Qt/6.11.0/gcc_64
export PATH=$QTDIR/bin:$PATH
Application doesn't build
Get more log output:
make run V=1
📬 Need Further Help?
If you get stuck or something doesn't work:
- Ask in
#feedback-desktopchannel on Status - Open an issue on GitHub