Hello! We're glad and grateful that you're interested in contributing to scouter 🎉! Below you will find the general guidelines for setting up your environment and creating/submitting pull requests and issues.
Documentation issues, bugs, and feature requests are all welcome! We want to make scouter as useful as possible, so please let us know if you find something that doesn't work or if you have an idea for a new feature. To create a new issue, click here and select the appropriate issue template.
There's always something to improve in scouter, and we want to make it as easy as possible for you to contribute. We welcome all contributions, big or small, and we appreciate your help in making scouter better. The following sections will guide you through the process of contributing to scouter.
Scouter uses a Rust backend and exposes a Python API via PyO3. For Python environment management, scouter leverages uv.
- Install Rust and Cargo by following the instructions here.
- Install uv by following the instructions here.
- Install Python 3.10 or higher (e.g.
uv python install 3.12). - Install Docker (needed for PostgreSQL and server integration tests).
Ensure everything works:
From the root directory, start the server to verify your setup:
$ make start.serverTo make sure the Python client is working, run the unit tests:
$ cd py-scouter
$ make setup.project
$ make test.unitThe above will set up the Python environment, build the Python wheel, and run the unit tests.
You're now ready to start contributing!
Feel free to explore the makefile and codebase to get a better sense of how tests and lints are run, but the above commands should be enough to get you started.
- Create a new branch for your addition
- General naming conventions (we're not picky):
/username/<featureName>: for features/username/<fixName>: for general refactoring or bug fixes
- General naming conventions (we're not picky):
- Test your changes:
- Testing Rust changes:
- Make sure you are in the
scouterroot directory - Run
cargo fmt --allto format the code - Run
cargo clippy --workspace --all-targets --all-features -- -D warningsto run the linter - Run
make test.unitto run unit tests (no Docker needed) - Run
make test.needs_sqlfor SQL, server, and drift executor tests (requires Docker)
- Make sure you are in the
- Testing Python changes:
- Make sure you are in the
py-scouterdirectory - Run
make setup.projectto rebuild the Python wheel after any Rust changes - Run
make formatto format the code - Run
make lintsto run the linter - Run
make test.unitto run the Python unit tests
- Make sure you are in the
- Testing Rust changes:
- Submit a Draft Pull Request early and mark it
WIPso a maintainer knows it's not ready for review just yet. - Move the
pull_requestout of draft state.- Make sure you fill out the
pull_requesttemplate (included with everypull_request)
- Make sure you fill out the
- Request review from one of our maintainers (this should happen automatically via
.github/CODEOWNERS). - Get approval. We'll let you know if there are any changes needed.
- Merge your changes into scouter!
- Be Kind
- Working with us should be a fun learning opportunity (for all parties!), and we want it to be a good experience for everyone. Please treat each other with respect.
- If something looks outdated or incorrect, please let us know! We want to make scouter as useful as possible.
- Own Your Work
- Creating a PR for scouter is your first step to becoming a contributor, so make sure that you own your changes.
- Our maintainers will do their best to respond to you in a timely manner, but we ask the same from you as the contributor.
- We've added agent resources (CLAUDE.md, .claude/skills/, .github/instructions/) to help you understand and navigate the codebase. AI code assistants are absolutely fine to use — the only rule is that code you submit is code you understand and stand behind.