Cross-Project Protobuf Plugin for Sbt
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Codacy Badge Join the chat at

sbt-cppp (Sbt Cross-Project Protobuf Plugin) is a Sbt plugin to support Protocol Buffers, especially in multi-project builds.


sbt-cppp compiles *.proto into .java files. In addition, sbt-cppp provides some features missed in sbt-protobuf or other protobuf plugins:

  • Jar packaging from .proto files.
  • Cross-project protoc include path dependency management in multi-project builds.
  • Cross-library protoc include path dependency management by auto-unzipping .proto files from jar packages.
  • Support for custom code generator to .proto files.


Step 1: Install sbt-cppp into your project

Add the following line to your project/plugins.sbt:

addSbtPlugin("com.dongxiguo" % "sbt-cppp" % "0.1.4")

And add protobufSettings and protobuf-java dependency to your build.sbt:


libraryDependencies += "" % "protobuf-java" % "2.5.0"

Step 2: Install protoc into $PATH

For windows, download at For most linux distributions, look for protobuf-compiler package.

Step 3: Create your .proto files.

Create src/protobuf/sample_proto.proto

message SampleMessage {
  optional int32 sample_field = 1;

Step 4: Use the .proto files in your source files.

Create src/main/scala/SampleMain.scala:

object SampleMain {
  def main(args: Array[String]) {

Step 5: Run it!

$ sbt
> run-main SampleMain

Further information

  • sbt-cppp is for sbt 0.12 or 0.13
  • If project-foo depends on project-bar, project-bar/src/protobuf/ will be added as a protoc include path when the plugin converts project-foo/src/protobuf/*.proto into .java files.
  • If you want to generate .proto files by some tools (instead of creating them manually), put sourceGenerators in Protobuf += yourGenerator in your build.sbt.