This is a stduy notes for Bloop and Metals.


Bloop is a Scala build server and CLI tool that compiles, tests and runs Scala code. The CLI tool uses Naigun server protocol, Metals uses Build Sever Protocol to send reqeusts to Bloop. Bloop is optimiazed to run concurrent requests executes actions as pure functions. It can be shared by different clients, outlive build clients for improved performance.

sbt uses sbt-bloop plugin to export build definitions to Bloop configuration files. sbt bloopInstall exports projects for the Compile, Test and IntegrationTest configurations.

Metals, as an IDE plugin, use BSP to establish a long-lived build session to compile, test and run Scala code.


Metals is a Scala language server that has rich IDE features. Intall Metals as an VS Code plugin, just open a sbt project, then import build and start coding.

However, using it is almost invisible and often you need to remove .metals or .bloop or project/target folder to clean cache. Sometimes rung sbt clean or restart VS code to make it work correctly.