Skip to content

Latest commit

 

History

History
383 lines (261 loc) · 11.2 KB

File metadata and controls

383 lines (261 loc) · 11.2 KB

🛠️ 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

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.24

Download and install Go 1.24 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.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 | 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 pcre-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@1.24 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.9.2 using the Qt Online Installer.

Linux (Alternative)

You can use any newer 6.9.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.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

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.9.2/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 -j8 flag 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
  • 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-qt build 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-go and status-keycard-qt. Defaults to 0
  • 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.9.2/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: