Dependencies

Dependencies are declared in a simple string format and automatically converted to sbt's libraryDependencies.

Format

Dependencies use the format "organization:artifact:version":

dependencies = [
  "org.typelevel:cats-core:2.13.0",
  "io.circe:circe-core:0.14.10"
]

This is equivalent to the following sbt syntax:

libraryDependencies ++= Seq(
  "org.typelevel" %% "cats-core" % "2.13.0",
  "io.circe" %% "circe-core" % "0.14.10"
)

Dependency Types

By default, all dependencies use Scala cross-versioning (%%). To declare Java dependencies, use the nested object format:

dependencies {
  scala = ["org.typelevel:cats-core:2.13.0"]
  java  = ["com.google.code.gson:gson:2.11.0"]
}

All keys are optional — include only the ones you need.

Key Mapping

Key sbt Operator Description
scala %% Standard Scala cross-versioned library
java % Plain Java library (no cross-version)

Flat vs Nested

The flat list format is equivalent to { scala = [...] }:

# These two are equivalent:
dependencies = ["org.typelevel:cats-core:2.13.0"]

dependencies {
  scala = ["org.typelevel:cats-core:2.13.0"]
}

You can mix formats between dependencies and testDependencies:

# Nested dependencies with Java libs
dependencies {
  scala = ["org.typelevel:cats-core:2.13.0"]
  java  = ["com.google.code.gson:gson:2.11.0"]
}

# Flat testDependencies (all Scala)
testDependencies = [
  "org.scalatest:scalatest:3.2.19"
]

Test Dependencies

Test dependencies are declared separately and automatically get the Test scope:

testDependencies = [
  "org.scalatest:scalatest:3.2.19",
  "org.scalatestplus:scalacheck-1-18:3.2.19.0"
]

This is equivalent to:

libraryDependencies ++= Seq(
  "org.scalatest" %% "scalatest" % "3.2.19" % Test,
  "org.scalatestplus" %% "scalacheck-1-18" % "3.2.19.0" % Test
)

Test dependencies also support the nested object format:

testDependencies {
  scala = ["org.scalatest:scalatest:3.2.19"]
  java  = ["junit:junit:4.13.2"]
}