So you're interested in contributing to Sourcebot. Great! If you have any questions, don't hesitate to reach out on our Discord.
First thing to know is that Sourcebot is not a side-project - it is a product of a company based in San Francisco who builds and maintain it professionally. For this reason, Sourcebot follows the open core business model, which splits the codebase into two parts: core and ee, which each have their own license:
- core code is licensed under the Functional Source License, a mostly permissive non-compete license that converts to Apache 2.0 or MIT after two years. Code shipped in core (without ee) forms the Sourcebot Community Edition (CE).
- ee (enterprise) code is licensed under the Sourcebot Enterprise License, a commercial license that covers our enterprise offering. Usage of ee code requires a valid license key. Code shipped in core and ee forms the Sourcebot Enterprise Edition (EE).
You can take a look at the root LICENSE.md for a breakdown of what code is core or ee.
For contributing, the breakdown is as follows:
- core : you're free to contribute, but you can't take this and use it to compete with us. You can, however, otherwise use it however you want. Your changes will convert to Apache 2.0 after two years.
- ee : you can also contribute, but Sourcebot retains all rights to your modifications and patches. Your contributions can only be used in production by those with a valid Enterprise license.
We want to make it easy to contribute to Sourcebot. Here are the most common types of changes that get merged:
- Bug fixes
- Improvements to our code host integrations
- Additional LLM providers
- Documentation improvements
However, any UI or core product feature must go through a design review with the core team before implementation. If you're unsure if your PR would be accepted, ask a maintainer.
Note
PRs that ignore these guardrails will likely be closed.
Want to take on an issue? Leave a comment and a maintainer may assign it to you unless it is something we are already working on.
-
Install
go,
docker, and
NodeJS. Note that a NodeJS version of at least
24is required. -
Install ctags (required by zoekt)
// macOS: brew install universal-ctags // Linux: snap install universal-ctags
-
Install corepack:
npm install -g corepack
-
Install
yarn:npm install --global yarn
-
Clone the repository with submodules:
git clone --recurse-submodules https://github.com/sourcebot-dev/sourcebot.git
-
Run
maketo build zoekt and install dependencies:cd sourcebot makeThe zoekt binaries and web dependencies are placed into
binandnode_modulesrespectively.Note:
makeshould also be run whenever switching between branches to ensure all dependencies are upto date. -
Start the development Docker containers for PostgreSQL and Redis.
docker compose -f docker-compose-dev.yml up -d
-
Generate the database schema.
yarn dev:prisma:migrate:dev
-
Create a copy of
.env.developmentand name it.env.development.local. Update the required environment variables. -
If you're using a declarative configuration file, create a configuration file and update the
CONFIG_PATHenvironment variable in your.env.development.localfile. -
Start Sourcebot with the command:
yarn dev
A
.sourcebotdirectory will be created and zoekt will begin to index the repositories found in theconfig.jsonfile. -
Start searching at
http://localhost:3000.
All PRs must reference an existing issue. Before opening a PR, open an issue describing the bug or feature. This helps maintainers triage and prevents duplicate work. PRs without a linked issue may be closed without review.
- Use
Fixes #123orCloses #123in your PR description to link the issue - For small fixes, a brief issue is fine - just enough context for maintainers to understand the problem
- Keep pull requests small and focused
- Explain the issue and why your change fixes it
- Before adding new functionality, ensure it doesn't already exist elsewhere in the codebase
- Update
CHANGELOG.mdwith an entry under[Unreleased]linking to your PR. New entries should be placed at the bottom of their section. If your change touchespackages/mcp, updatepackages/mcp/CHANGELOG.mdinstead.
If your PR includes UI changes, please include screenshots or videos showing the before and after. This helps maintainers review faster and gives you quicker feedback.
For non-UI changes (bug fixes, new features, refactors), explain how you verified it works:
- What did you test?
- How can a reviewer reproduce/confirm the fix?
Long, AI-generated PR descriptions and issues are not acceptable and may be ignored. Respect the maintainers' time:
- Write short, focused descriptions
- Explain what changed and why in your own words
- If you can't explain it briefly, your PR might be too large
PR titles should follow conventional commit standards:
feat:new feature or functionalityfix:bug fixdocs:documentation or README changeschore:maintenance tasks, dependency updates, etc.refactor:code refactoring without changing behaviortest:adding or updating tests
You can optionally include a scope to indicate which package is affected:
feat(web):feature in the web packagefix(worker):bug fix in the worker package (backend/)