Snuba development environment

This section explains how to run Snuba from source. To set up ClickHouse, Redis, and Kafka, see Getting started with Snuba.

Prerequisites

Set up the Sentry development environment first.

Install uv. devenv sync no longer installs it:

brew install uv

If you use Homebrew on an Apple Silicon Mac, make the Homebrew development packages visible to the Rust build:

export CPATH=/opt/homebrew/include
export LIBRARY_PATH=/opt/homebrew/lib

Install and run

Clone the repository:

git clone git@github.com:getsentry/snuba.git
cd snuba

Set up the environment. direnv allow puts .venv and rustup on your PATH. devenv sync installs rustup, cmake, and protobuf from Brewfile, syncs the Python virtual environment, and installs the pre-commit hooks:

direnv allow
devenv sync

Build rust_snuba. devenv sync skips it because the build is slow:

make install-rs-dev

To rebuild rust_snuba on every change, run make watch-rust-snuba instead.

Start the Snuba API, which serves queries:

snuba api

Start the API and the consumers that ingest data from Kafka:

snuba devserver

Run tests

Run the Python unit and integration tests:

make test

Run the Rust tests:

make test-rust

Run Sentry tests against Snuba

Make sure no Snuba container is running:

docker ps -a | grep snuba

Start your local Snuba API:

git checkout your-snuba-branch
snuba api

In another terminal, update Sentry and start Snuba’s dependencies:

cd ../sentry
git checkout master
git pull
devservices up
devservices toggle snuba local

Then run the Sentry tests that cover your change. For example, the Sentry tests under tests/snuba/ query Snuba:

.venv/bin/pytest tests/snuba

These tests do not use Kafka, for performance. The Snuba test suite covers the Kafka paths.