The following is a conceptual diagram of the modular layers:
This diagram is arranged such that each layer depends only on the layers underneath it.
IO API is a low level API to deal with files and directories.
Serialization API is an opinionated wrapper around Scala Pickling. The responsibility of the serialization API is to turn values into JSON.
Util APIs provide commonly used features like logging and internal datatypes used by sbt.
sbt’s library management system is based on Apache Ivy, and as such the concepts and terminology around library management system is also influenced by Ivy. The responsibility of the library management API is to calcuate the transitive dependency graph, and download artifacts from the given repositories.
Incremental compiler of Scala is so fundamental, that we now seldom think of it as a feature of sbt. There are number of subprojects/classes involved that are actually internal details that we should use this opportunity to hide.
This is the part that’s exposed to
The responsibility of the module is to load the build files and plugins,
and provide a way for commands to be executed on the state.
This might remain at sbt/sbt.
The sbt launcher provides a generic container that can load and run programs resolved using the Ivy dependency manager. sbt uses this as the deployment mechanism, but it can be used for other purposes.
Currently developed in sbt/sbt-remote-control. sbt Server provides a JSON-based API wrapping functionality of the commandline experience.
One of the clients will be the “terminal client”, which subsumes the commandline sbt shell. Other clients that are planned are integration with the IDEs.
This website’s source.