sbt is built as a collection of highly modular components organized into separate projects. This modular architecture allows each component to evolve independently while maintaining clean boundaries between different concerns.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.
Core Architecture Principles
sbt 2.x is split across multiple GitHub repositories:- sbt/io - File I/O utilities and abstractions
- sbt/zinc - Incremental Scala compiler (see Zinc Incremental Compiler)
- sbt/sbt - The main build tool implementation
Main Modules
Core Modules
main
main
The central module that brings together all components. Located in
main/, it contains:Keys.scala- Defines all built-in setting and task keysDefaults.scala- Default implementations of built-in tasksMain.scala- Entry point and main loop- Build definitions and project loading
- Internal implementation in
sbt/internal/
main/src/main/scala/sbt/tasks
tasks
The task execution engine that powers sbt’s parallel task execution. Located in
tasks/.Core components:Execute.scala- Task graph executionConcurrentRestrictions.scala- Parallel execution controlsCompletionService.scala- Async task completionResult.scala- Task result types
main-settings
main-settings
Settings system implementation in
main-settings/. Handles:- Setting initialization and composition
- Scope resolution
- Setting delegation
main-command
main-command
Command-line interface and command processing in
main-command/. Provides:- Command parsing
- Built-in commands
- Tab completion infrastructure
- Interactive shell
main-actions
main-actions
High-level build actions in
main-actions/. Implements:- Compilation actions
- Test execution
- Publishing
- Other common build operations
Protocol and Communication
protocol
protocol
Data type definitions and communication protocols in
protocol/.Uses Contraband to define:- Build Server Protocol (BSP) types in
sbt.internal.bsp - Internal protocol messages
- JSON serialization formats
protocol/src/main/contraband-scala/sbt/internal/bsp/Internal Utilities
Theinternal/ directory contains utility modules:
| Module | Purpose | Location |
|---|---|---|
| util-core | Core utilities and basic abstractions | internal/util-core |
| util-logging | Logging infrastructure with multiple appenders | internal/util-logging |
| util-control | Control flow utilities | internal/util-control |
| util-complete | Tab completion implementation | internal/util-complete |
| util-cache | Caching utilities | util-cache |
| util-tracking | File change tracking | util-tracking |
| util-position | Source position tracking | internal/util-position |
| util-relation | Relational data structures | internal/util-relation |
| util-logic | Logic programming utilities | internal/util-logic |
| util-scripted | Scripted test framework | internal/util-scripted |
Library Management
Dependency Resolution
Dependency Resolution
sbt uses Coursier (since sbt 1.3) for dependency resolution and artifact retrieval:
lm-core- Core library management abstractionslm-coursier- Coursier integrationlm-ivy- Legacy Apache Ivy support
Zinc Integration
zinc-lm-integration
zinc-lm-integration
Bridges Zinc incremental compiler with library management in
zinc-lm-integration/.Key components:ZincComponentCompiler.scala- Compiles compiler bridgesZincComponentManager.scala- Manages Zinc componentsZincLmUtil.scala- Utility functions
- Compiler bridge compilation and caching
- Scala instance creation
- Component resolution through library management
Testing
testing
testing
Test framework integration in
testing/. Provides:- Test framework discovery
- Test execution infrastructure
- Integration with JUnit, ScalaTest, specs2, etc.
scripted-sbt
scripted-sbt
Scripted testing framework for sbt plugins in
scripted-sbt/.Allows plugin authors to write integration tests that:- Set up test projects
- Run sbt commands
- Verify expected outcomes
Other Modules
| Module | Purpose |
|---|---|
| run | Forked process execution for run tasks |
| worker | Worker process for isolated task execution |
| core-macros | Macro definitions used by sbt |
| sbt-remote-cache | Remote build cache support |
| buildfile | Build file definitions |
| client | Client-server communication |
| sbt-app | Application packaging |
| launcher-package | sbt launcher |
Technology Stack
sbt uses several specialized libraries:
- Contraband - Type-safe data definitions with binary compatibility
- sjson-new - JSON serialization with pluggable backends
- Coursier - Modern dependency resolution
- Gigahorse - HTTP client for remote operations
- Zinc - Incremental Scala compilation
Module Dependencies
The module dependency structure flows roughly as:Source Code Organization
Each module typically follows this structure:src/main/scala/- Main Scala source codesrc/main/scala/sbt/- Public APIsrc/main/scala/sbt/internal/- Internal implementationsrc/test/scala/- Unit testssrc/main/contraband-scala/- Generated code from Contraband (protocol module)
Next Steps
Zinc Compiler
Learn about sbt’s incremental compilation engine
Build Server Protocol
Understand BSP integration in sbt
Contributing
Guidelines for contributing to sbt
Tech Stack
Deep dive into libraries and tooling