Contributions are welcome and greatly appreciated! There are many ways to contribute to the sbt ecosystem depending on your interests and skill level.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/sbt/sbt/llms.txt
Use this file to discover all available pages before exploring further.
Ways to Contribute
Help Users
- Answer questions on Stack Overflow
- Help on Scala Discord
- Fix build problems at work or online
Documentation
- Fix documentation errors
- Add examples and clarifications
- Visit sbt/website
Code
- Patch the core
- Create plugins
- Review pull requests
Ecosystem
- Create plugins extending sbt
- Migrate builds to sbt 2.x
- Garden the issue tracker
- Report issues
Ideas and Proposals
For enhancement ideas or general discussions:- Follow the sbt 2.0 RFC process
- Start a GitHub Discussion
Large changes should be discussed before implementation to ensure alignment with project goals and avoid wasted effort.
Pull Request Requirements
Before Working on a PR
Confirm the issue is valid
Before working on a pull request, confirm with a Maintainer that a contribution is wanted for the issue.
Reproduce the problem
Confirm that you can reproduce the reported problem using GitHub Actions or your computer.Given the wide user base and long history, not all reported issues are valid or relevant.
AI-Assisted Contributions
AI tools can help create pull requests, but strict rules apply:Requirements
Human Verification (REQUIRED)
Human Verification (REQUIRED)
All AI-generated code must be fully verified with human-in-the-loop.
- Actually run sbt to test your changes
- Understand every line of generated code
- Do not blindly trust AI output
- Final responsibility lies with you
Disclosure (REQUIRED)
Disclosure (REQUIRED)
All AI usage in any form must be disclosed.State in your PR description that you used AI tools. Include a “Generated-by” tag in your commit message:or
License Compliance
License Compliance
- No third-party materials in output, OR
- Included materials comply with Apache License-compatible open source licenses
Code Understanding
Code Understanding
Review and understand all AI-generated code before including it.Blindly copy-pasting introduces security and stability risks.
Getting Started
Fork the repository
Create a fork of the sbt repository.
Enable workflows
Go to the Actions tab in your fork and enable workflows.This lets you run CI tests on your forked repository.
Clone your fork
Clone the forked repository to create a local copy.
Branch to Work Against
sbt uses two branches for development:| Branch | Purpose |
|---|---|
| develop | Development branch for sbt 2.x (next major series) |
| 1.x.x | Stable branch for current sbt 1.x releases (e.g., 1.12.x) |
- develop for new features and bug fixes targeting sbt 2.x
- stable branch for backports to sbt 1.x
The default branch set on GitHub should be used for bug fixes. For backports, use the latest stable branch.
Pull Request Guidelines
Before submitting a PR, verify it meets these requirements:Testing
Confirm problem reproduction
Confirm problem reproduction
Reproduce the problem prior to making code changes.
Include tests
Include tests
Add tests to your pull request:
- Scripted tests (for integration)
- Unit tests (for isolated logic)
- Screenshots from manual testing (if applicable)
Code Quality
Follow commit message guidelines
Follow commit message guidelines
See Commit Message Guideline below.
Follow coding style
Follow coding style
Sign the CLA
Sign the CLA
Sign the Scala Contributor License Agreement.
Apache header on new files
Apache header on new files
Add Apache headers to all new files:
PR Scope
CI and Compatibility
Pass all CI tests
Pass all CI tests
Maintainers will not merge PRs that:
- Fail CI tests (without good justification)
- Regress linting
Maintain binary compatibility
Maintain binary compatibility
Maintainers will not merge PRs that break binary compatibility (“bincompat”).Run from sbt shell:sbt MUST maintain backward binary compatibility across minor releases.
JDK version support
JDK version support
Test with the oldest supported JDK version (currently JDK 17).You can use any supported JDK version to run tests, but verify compatibility with JDK 17.
Merging
Maintainers may use Squash and Merge, combining your PR into one commit regardless of commit count.During review, you can keep a commit history for easier tracking.
Commit Message Guideline
Follow this template:Format Rules
-
(Optional) Subject should start with
[2.x]for develop branch or[1.x]for sbt 1.x -
Type prefix: Subject should start with:
fix- Bug fixfeat- New featurerefactor- Code refactoringtest- Test changesci- CI/CD changesdeps- Dependency updates
- Imperative mood: Use “Fix foo”, “Add bar” (not “Fixed” or “Adds”)
- Problem section: Summarize current understanding of the issue
- Solution section: Summarize your approach to fixing it
- No at-mentions: Do not at-mention people in commit messages
- Generated-by tag: Include for Gen-AI tools
Building sbt Locally
Build just sbt
For changes contained only in sbt/sbt (not submodules):Build sbtn (native client)
Testing
sbt uses multiple testing methodologies:Unit Tests
Unit Tests
Scripted Tests
Scripted Tests
Manual Tests
Manual Tests
Test using locally built sbt on real projects.See Manual tests documentation.
Always add tests. For small-scope changes, prefer Hedgehog. For changes requiring file coordination and tasks, use scripted tests.
Tech Stack
sbt uses specialized libraries and tooling:- Contraband - Type-safe data definitions
- Coursier - Dependency management (since sbt 1.3)
- sjson-new - JSON serialization
- Gigahorse - HTTP client
- Zinc - Incremental Scala compilation
Reporting Issues
Open a GitHub issue when you’re 90% sure it’s an actual bug.Preliminaries
Search existing issues
Search Stack Overflow and GitHub Issues to see if your bug was already reported.
What to Report
Developers need three things: steps, problems, and expectations.Steps (Most Important)
Steps (Most Important)
Exact steps to reproduce the problem on our computers.Provide:
- Method of running sbt
build.sbtthat caused the problem- sbt and Scala versions
- Sample Scala code (for incremental compilation issues)
- Minimized reproduction (reduce non-essential factors)
Problems
Problems
Describe what you think is the problem.
- Include stack traces for compilation errors
- Provide raw information (more is better)
- What might be “obvious” to you may be intentional behavior
Expectations
Expectations
Describe what you think should have happened.
Notes (Optional)
Notes (Optional)
Add analysis, context, or additional observations.
Subject
A descriptive subject is better but don’t worry too much:- Good: “StackOverflowError while name hashing is enabled”
- Acceptable: “sbt crashes”
Formatting
Format code and console outputs:Resources
Development Environment
Setup guide for sbt development
Coding Style
Style guide and best practices
Profiling
Performance profiling guide
Architecture
Understanding sbt’s architecture
Community
- Scala Discord - sbt channel
- Stack Overflow - Q&A
- GitHub Discussions - Ideas and proposals
- GitHub Issues - Bug reports