Skip to content
CAI
Software that uses CAICheck a score

build-server-protocol/build-server-protocol

57.8

Adequate · 20 September 2026

6.1k

lines of production code

Scala

with Kotlin

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is the official Build Server Protocol (BSP) specification and its associated tooling, designed to standardize communication between build tools and IDEs. It provides a Smithy-based code generation pipeline that automatically produces type-safe client and server libraries for Java and Scala, ensuring strict synchronization with the protocol definition. The project also includes a comprehensive test kit for validating BSP implementations and a documentation website built with Docusaurus.

How it got here

2018–2019 — Build system migration and code generation

7 changes.

The project migrated its build infrastructure from sbt to Bazel and replaced hand-written BSP libraries with a Smithy-based code generation pipeline to ensure specification synchronization. This period also involved expanding test coverage through a new mock server and property-based testing infrastructure, alongside rebuilding the documentation website using Docusaurus.

2022–2024 — Bazel migration and Smithy codegen

7 changes.

The project standardized its build infrastructure by migrating from sbt to Bazel across all modules, including the website, tools, and client libraries. Concurrently, the code generation pipeline was rewritten in Kotlin using Smithy as the canonical source of truth, enabling support for new language targets and protocol extensions.

Features

This change introduces the visual identity for the new BSP website by adding a custom logo (bsp-logo.svg) and a stylesheet (custom.css). The stylesheet defines specific styling for hyperlinks, including underlining and distinct colors for visited and unvisited states, while the SVG asset provides the graphical brand element.

website/static · high confidence

Add new Smithy traits for set, data, and JSON-RPC variants

The spec-traits module now includes implementations for several new Smithy traits: SetTrait, DataTrait, JsonNotificationTrait, JsonRequestTrait, JsonRpcTrait, and UntaggedUnionTrait. These are registered via the standard Java Service Provider interface (META-INF/services/software.amazon.smithy.model.traits.TraitService) so that the Smithy model can recognize and process these custom annotations. This change extends the available trait vocabulary for API specifications, allowing models to explicitly mark sets, data structures, and specific JSON-RPC request/notification patterns.

spec-traits · high confidence

New BSP testkit with mock server and property generators

The testkit module now provides a complete infrastructure for testing BSP implementations, including a mock server (MockServer) and a test client (TestClient) that communicate via standard BSP streams. It introduces Scalacheck-based generators and shrinkers for all BSP4j data types (Bsp4jGenerators, Bsp4jShrinkers, Bsp4jArbitrary), enabling property-based testing of build server interactions. The testkit also includes utility generators for URIs, paths, and class names, and is built using Bazel with dependencies on BSP4J, LSP4J JSON-RPC, Gson, Java Object Diff, and ScalaCheck.

testkit · high confidence

Architecture

Migrate build system from sbt to Bazel

The project has switched its build and dependency management from sbt to Bazel. This introduces a new Bazel-based build configuration (MODULE.bazel, WORKSPACE, BUILD files) and updates the development workflow, including the use of Bazel for generating protocol libraries and documentation, enforcing code formatting via scalafmt, and managing dependencies through the Bazel module system and Maven lock files.

(repo-wide) · high confidence

New Smithy-based code generation pipeline for BSP libraries

The project has replaced its previous hand-written BSP client and server libraries (bsp4j and bsp4s) with a new code generation system built on Kotlin and the Smithy model. This new pipeline, located in the \codegen\ module, reads the BSP specification from Smithy models and automatically generates the type definitions, JSON codecs, and RPC endpoints for both Java (bsp4j) and Scala (bsp4s) targets. For users, this ensures that the generated libraries stay strictly synchronized with the BSP specification (currently version 2.2.0) and reduces the maintenance burden of manually updating protocol definitions.

repository · high confidence

Behavioural changes

Codegen rewritten in Kotlin using Smithy as the source of truth

The codegen module has been rewritten in Kotlin, replacing the previous implementation to use Smithy as the canonical source of truth for the protocol model. This change introduces a new build configuration via a Bazel BUILD file and implements code generation for both Java (bsp4j) and Scala (bsp4s) targets. The new pipeline loads the Smithy model, transforms it into an intermediate representation, and renders language-specific code, including a new TypeScript renderer for documentation. Additionally, utility functions for string case conversions and custom JSON codecs have been added to support the new generation logic.

codegen · high confidence

Migrate build system to Bazel and enable automated code formatting

The project has switched its build system from sbt to Bazel, introducing new BUILD files and Bazel-specific rules in the tools directory to manage dependencies and compilation. This change includes the addition of a unified formatting toolchain that integrates Prettier for JavaScript/Markdown, Google Java Format for Java, Scalafmt for Scala, and ktfmt for Kotlin, ensuring consistent code style across all supported languages. Additionally, new Bazel macros are provided to simplify publishing Maven artifacts and generating website documentation using mdoc.

tools · high confidence

Migrate website to Docusaurus 2 with local search and Bazel build

The website has been rebuilt using Docusaurus 2, replacing the previous static site generator. This update introduces a local search plugin (replacing Algolia) and configures client-side redirects to handle legacy URLs such as /build-server-protocol and /docs/bsp. The site is now built and deployed via Bazel targets defined in the new website/BUILD file, which also handles the generation of documentation content from the spec and codegen sources.

website · high confidence

Migration of bsp4s build system to Bazel

The bsp4s library has switched its build infrastructure from sbt to Bazel. This change introduces a new BUILD file that defines the library generation and export rules, relying on external dependencies for JSON handling (jsoniter-scala) and RPC (jsonrpc4s). The source code remains largely unchanged, preserving the existing BSP protocol endpoints and custom JSON codecs, but the project is now compiled and packaged using the Bazel build system.

bsp4s · high confidence

Redesigned homepage with new color scheme and feature highlights

The website's landing page has been updated to feature a new visual identity and layout. A new CSS theme file introduces a blue-based color palette (primary colors ranging from \#0aadff to \#ffffff) designed to match the logo and support dark mode. The main index page now displays a 'Get Started' call-to-action and a series of feature cards highlighting BSP capabilities such as IDE integration, debugging, and its relationship with LSP, arranged in alternating left/right image layouts.

website/src · high confidence

bsp4j library migrated to Bazel build system and updated to protocol version 2.2.0

The bsp4j library has switched its build infrastructure from sbt to Bazel, introducing a new BUILD file that defines the generation and export targets. This change is accompanied by an update to the BSP protocol version, which is now hardcoded as 2.2.0 in the Bsp4j.java class. The diff also includes the regenerated Java source files for the BSP protocol models and interfaces, reflecting the current state of the protocol definition.

bsp4j · high confidence

Test coverage

BSP specification version 2.2.0 with new language extensions; Expanded test coverage for BSP protocol compatibility and mock server interactions.

Dependencies

Website dependencies upgraded to Docusaurus 3 and React 18

The website's dependency manifest has been updated to use Docusaurus 3.5.2 (including core, preset-classic, and plugin-client-redirects) and React 18.3.1. The local search plugin (@easyops-cn/docusaurus-search-local) has been updated to version 0.44.5, and Prettier has been upgraded to 3.3.3.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 58.

Lenses

  • Code Health 94
  • Architecture 98
  • Maturity 43
  • Readiness 58
  • Security 75

Changes since last survey

  • 300 commits — 263 feature/other, 37 fixes

By area

  • (root) — 93 commits
  • (repo) — 44 commits
  • bsp4j/src — 27 commits
  • .github/workflows — 23 commits
  • website/package.json — 19 commits
  • project/plugins.sbt — 17 commits
  • codegen/src — 14 commits
  • project/build.properties — 10 commits
  • spec/src — 10 commits
  • website/yarn.lock — 9 commits
  • docs/specification.md — 7 commits
  • docs/overview — 5 commits
  • website/docusaurus.config.js — 5 commits
  • docs/extensions — 3 commits
  • website/generated — 3 commits
  • website/pnpm-lock.yaml — 2 commits
  • website/src — 2 commits
  • .github/CODEOWNERS — 1 commit
  • .github/dependabot.yml — 1 commit
  • docs/faq.md — 1 commit

Notable commits

  • fix: Fix "scala-test-suites" and "scala-test-suites-selection" data kinds (#601)
  • fix: Fix #205: Add operation to get output paths (#269)
  • fix: Fix deprecated trait usages (#611)
  • fix: Fix algolia search
  • fix: Fix for bsp4j/xtend (#367)
  • fix: Fix incorrect closed string enum rendering in bsp4s (#589)
  • fix: Fix location of required trait (#594)
  • fix: Fix page deployment (#683)
  • fix: Fix page deployment (again) (#684)
  • fix: Fix pages deploy
  • fix: Fix prettier in CI (#523)
  • fix: Fix readme
  • fix: Fix sbt build
  • fix: Fix the DataKindTrait (#585)
  • fix: Fix unstable trait generation (#610)
  • fix: Merge pull request #403 from build-server-protocol/revert-v2
  • fix: Merge pull request #657 from tgodzik/fix-servers
  • fix: Revert "Fix algolia search"
  • fix: Revert "Fix pages deploy"
  • fix: Revert "Fix readme"
  • …and 280 more

Architecture

  • 0 containers · 1 bounded contexts · 0 dependency edges (baseline)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

build-server-protocol/build-server-protocol was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 20 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 9097c78224910a4a285ba3207e55dd33c9e9da97 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-b51f968c9b10.