Contraband 

Contraband is a description language for your datatypes and APIs, currently targeting Java and Scala.

You describe the types and fields of your API, and Contraband will:

Contraband also enables you to evolve the API over time.

Setup 

To enable the Contraband plugin for your build, put the following line in project/contraband.sbt:

addSbtPlugin("org.scala-sbt" % "sbt-contraband" % "X.Y.Z")

Your Contraband schema should be placed in src/main/contraband and src/test/contraband. Here’s how your build should be configured:

lazy val library = (project in file("library")).
  enablePlugins(ContrabandPlugin).
  settings(
    name := "foo library"
  )

Note 

Contraband is NOT supported under the Lightbend subscription.