fthomas / crjdt   0.0.7

Apache License 2.0 Website GitHub

A conflict-free replicated JSON datatype (CRDT) in Scala

Scala versions: 2.12 2.11
Scala.js versions: 0.6

crjdt: a conflict-free replicated JSON datatype in Scala

Build Status codecov Join the chat at https://gitter.im/fthomas/crjdt Scaladex Scaladoc

This is an implementation of the data structures and algorithms described in the paper A Conflict-Free Replicated JSON Datatype (PDF) by Martin Kleppmann and Alastair R. Beresford.

The goal of this project is to provide a high-level API to the CRDT described in the paper that integrates well with other JSON libraries for Scala.

Getting Started

crjdt is currently available for Scala and Scala.js, version 2.11 and 2.12.

To get started with sbt, add the following to your build.sbt file:

libraryDependencies ++= Seq(
  "eu.timepit" %% "crjdt-core"  % "0.0.7",
  "eu.timepit" %% "crjdt-circe" % "0.0.7" // optional

For Scala.js just replace %% with %%% above.

Instructions for Maven and other build tools are available on the Scaladex page.

Contributors and participation

The crjdt project supports the Typelevel code of conduct and wants all of its channels (Gitter, GitHub, etc.) to be welcoming environments for everyone.

Other implementations

Here are other implementations of the JSON CRDT described in the paper by Kleppmann and Beresford.

If you know an implementation that is not listed here, please submit a PR!


  • Format your code with Scalafmt.
  • Run a specific test with e.g. sbt "test:testOnly eu.timepit.crjdt.core.examples.Figure1" or all tests with sbt test.
  • Documentation for Vertical Move is in the file doc.md.


Copyright 2016 Frank S. Thomas

crjdt is licensed under the Apache License, Version 2.0 (the "License"); you may not use this software except in compliance with the License.

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.