Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

CI Coverage Status scala-index Scala.js


Common REST API Scala/Scala.js components

How to add it to your project

val scommonsApiVer = "1.0.0-SNAPSHOT"

libraryDependencies ++= Seq(
  // shared
  "org.scommons.api" %%% "scommons-api-core" % scommonsApiVer,
  "org.scommons.api" %%% "scommons-api-joda-time" % scommonsApiVer,

  // client/js only
  "org.scommons.api" %%% "scommons-api-xhr" % scommonsApiVer,
  // server/jvm only
  "org.scommons.api" %% "scommons-api-play-ws" % scommonsApiVer

Latest SNAPSHOT version is published to Sonatype Repo, just make sure you added the proper dependency resolver to your build.sbt settings:

resolvers += "Sonatype Snapshots" at ""

How to use it

Joda Date/Time

You can use in your shared API data case classes date/time types from the joda library:

import org.joda.time._
import play.api.libs.json._

case class User(firstName: String,
                lastName: String,
                registeredAt: DateTime,
                birthDate: LocalDate,
                birthTime: LocalTime)

object User {
  // you only need to provide appropriate implicits:
  import scommons.api.jodatime.JodaTimeImplicits.{dateTimeReads => dtReads, dateTimeWrites => dtWrites}
  import scommons.api.jodatime.JodaTimeImplicits.{dateReads => dReads, dateWrites => dWrites}
  import scommons.api.jodatime.JodaTimeImplicits.{timeReads => tReads, timeWrites => tWrites}

  implicit val jsonFormat: Format[User] = Json.format[User]

For JS part the following types are defined as wrappers around the corresponding ISO time formatted string and do not contain any logic:

Once you receive from an API on JS side an object that uses them you can use toString method to get an ISO time formatted string and pass it to your favorite JS time library to parse it.

For example, you could use standard JS Date class to parse it:

import scala.scalajs.js

new js.Date(user.registeredAt.toString).getDate

How to Build

To build and run all the tests use the following command:

sbt test


You can find more documentation here