Build status-go
December 22, 2025 ยท View on GitHub
Quick start
make statusgo
Run status-backend
make status-backend
Once that is completed, you can start it straight away by running
./build/bin/status-backend --address=localhost:12345
This will provide full API at http://localhost:12345.
Checkout status-backend docs for more details.
Building with your IDE
status-go can be build as a regular Go project, but requires to pre-generate some files first:
make status-go-deps- install required toolsmake generate- compile protobuf files, build SQL migrations, generate mocks
Building with Docker
docker build .
Building using Nix shell
It is advised but not required to use Nix shell before executing other make targets. Nix shell will ensure that all dependencies are installed. You can enter the development shell by using either of two:
make shell
nix develop --extra-experimental-features 'nix-command flakes'
Build a library for the current platform
make statusgo-library # Build static library
make statusgo-shared-library # Build shared library
Build status-go with nix
The flake.nix file exposes multiple status-go packages that can be built using Nix. To view the available packages for different architectures, run:
nix flake show
To build a specific package, use:
nix build '#name-of-the-package'
For example:
nix build '#status-go-library'
This flake includes a dependency on nwaku, which is pinned to a specific commit to ensure reproducibility and control over its version.
Maintainers are responsible for tracking updates to nwaku and updating the pinned commit accordingly when new versions are released.
Continuous Integration (CI) will validate whether the status-go packages build successfully with Nix, and report the result on pull requests.
Debugging
Android debugging
In order to see the log files while debugging on an Android device, do the following:
- Ensure that the app can write to disk by granting it file permissions. For that, you can for instance set your avatar from a file on disk.
- Connect a USB cable to your phone and make sure you can use adb. Run
adb shell tail -f sdcard/Android/data/im.status.ethereum.debug/files/Download/geth.log
Linting
make lint
Testing
Next, run unit tests:
make test
Unit tests can also be run using go test command. If you want to launch specific test, for instance RPCSendTransactions, use the following command:
go test -v ./api/ -testify.m ^RPCSendTransaction$
Or use make test-single:
make test-single PKG=./messaging/controller/processor TEST=^TestSDSWrappedMessages$
Note -testify.m as testify/suite is used to group individual tests.
To run a single test in a test suite (e.g. TestTransferringKeystoreFiles, which is part of SyncDeviceSuite):
go test -v ./server/pairing -test.run TestSyncDeviceSuite -testify.m ^TestTransferringKeystoreFiles$
Note: TestSyncDeviceSuite is not the name of the test suite, but the name of the test function that runs the SyncDeviceSuite suite.