Java CRDT Library with a focus on supporting Riak.
Java Shell Groovy
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Java CRDT Library Build Status

A collection of basic conflict-free replicated data types (CRDTs). Currently everything is set up to serialize into JSON objects.


  • Provide a set of common interfaces, patterns, and objects for working with CRDTs.
  • Some degree of storage independence. The emphasis is on Riak, but the objects should be portable.


  • Support for GSets, 2PSets, ORSets, GCounters, PNCounters.
  • Unified interfaces for serialization/deserialization of CRDT objects.
  • JSON serialization.
  • JSR 330 annotations for dependency injection.
  • JSR 305 annotations for documenting proper use of the API and documenting thread safety.

Future Work

Roughly in order:

  • Better Jackson use and integration.
  • Removing the self-serialization aspects (or at least make them optional) to better integrate with available tools for working with annotated objects. There are some challenges here that I am trying to find a clean solution for.
  • Tools for specifically working with Riak.
  • Integration tests.
  • Full, eventual transition to Java 7.
  • Some form of versioning for (de)serialization purposes.
  • Have the counters support other Number types.
  • Guice modules with the bindings for convenience.
  • Derived types for collecting more specific types of information (e.g., statistics).
  • More basic types (e.g., graphs, LWW).
  • Add garbage collection.
  • Support for other serialization methods.
  • Local caching of immutable views.

Based On