Loading...

Software

Try it out yourself

The Concordant software is now available as an alpha version. The code and documentation are available below. If you would like greater access, e.g., to post issues/tickets or to contribute merge requests, let us know at support@concordant.io and we will create an account for you.

We are just starting off, so help, comments, tips, assistance, ideas are all welcome. Please spread the word, and let others around you know about us. We are especially looking for use cases, so if you have one, please get in touch.

Welcome to Concordant, and thanks for checking us out.

Demo Applications

The following demo applications demonstrate a few things that our platform can do and how it works. We suggest you open multiple windows of each application, and observe how the multiple instances collaborate.

CRDT Demo

The CRDT Demo is a web page showing how individual CRDT types behave. It showcases the PNCounter, RGA, LWWMap, MVMap, LWWRegister, and MVRegister CRDTs. Create multiple replicas, perform updates, and observe how updates are applied, propagated between replicas, persisted, and merged.

Try our CRDT Demo application.

Click on the button below to access the code on Github.

Collaborative Sudoku

Our Sudoku is a basic example of a collaborative multi-player game. You can create multiple instances of the same Sudoku grid, and solve it collaboratively. When one user fills a square, the others observe the update, and can correct it if they wish. If two users fill the same square at the same time, both updates are retained, until one of the users assigns it a new value. A user can disconnect and work in isolation; when he/she reconnects, his/her updates are merged into the shared grid. Switching between connected/disconnected modes is seamless: the application continues to work without a hitch, and without any loss of data.

The Sudoku application is based upon the Concordant MVMap CRDT.

Try our Collaborative Sudoku application.

Click on the button below to access the code on Github.

Collaborative Editor

Our collaborative editor enables multiple users to collaborate over a shared text document. It supports both synchronous and asynchronous modes. In synchronous mode, multiple connected users see each others' edits in real time. In asynchronous mode, a user works disconnected, and his/her updates are merged into the shared document when he/she reconnects. Switching between synchronous and asynchrounous modes is seamless: the editor continues to work without a hitch, and without any loss of data.

The collaborative editor uses the Markdown format, and exercises the RGA and LWWMap CRDTs.

Try our Collaborative Markdown editor application.

Click on the button below to access the code on Github.

Platform Modules

Our platform is divided into three modules:

  1. The Concordant Client (or C-Client for short) is your application's entry point to the Concordant platform.
  2. The Concordant CRDTlib (C-CRDTlib) provides CRDT the object types that are currently implemented.
  3. The Concordant Service (C-Service) transparently provides replicated storage and communication.
Your application interacts with C-Client and accesses the objects implemented by C-CRDTlib.

Concordant Client Library

Concordant client library (C-Client) for the Concordant platform.

Your app uses the C-Client library to access the Concordant features: open a session to connect to the platform; open a collection and objects within the collection; run transactions to interact with the objects. The Concordant platform automatically manages replication, synchronisation, persistence, and the offline/online mode switch.

The C-Client library is multiplatform: its Kotlin code compiles to both JVM Bytecode and JavaScript/TypeScript; packaged as a Maven package and an NPM package.

See how easy it is to use:
// Open a session
let session = client.Session.Companion.connect("mydatabase", "http://url-to-c-service", "credentials");

// Open a collection of objects
let collection = session.openCollection("mycollection", false);

// Open an object within the collection
let cntr = collection.open("mycounter", "PNCounter", false, function () {return});

// Compute with one or more objects within atomic transactions
this.props.session.transaction(client.utils.ConsistencyLevel.None, () => {
    // Access objects here
    cntr.increment(10);
    let val = cntr.get();
});

This example starts by opening a session, in order to use the database "mydatabase", managed through the C-Service deployed at URL "https://url-to-c-service", and using the security credentials "credentials". Then it opens the collection named "mycollection", and the PNCounter object named "mycounter" within "mycollection," both in write/read mode. Finally, the application computes with the counter, incrementing it by 10, and reading its value.

See also the documentation page.

Concordant CRDT Library

Concordant CRDT library (C-CRDTlib) for the Concordant platform.

The CRDT object types implemented in the Concordant platform, which can be accessed via C-Client, are packaged in the C-CRDTlib.

The C-CRDTlib multiplatform. Its Kotlin code compiles both to JVM bytecode and to JavaScript/TypeScript, packaged as a Maven package and an NPM package.

The following CRDTs are currently implemented.

Counters

  • PNCounter: an integer counter, with increment and decrement operations.
  • Bounded Counter: a PNCounter whose value cannot become negative.

Registers

  • LWWRegister: stores a String; supports assignment; concurrent assignments resolve to a single value.
  • MVRegister: stores a String; supports assignment; concurrent assignments are all retained.
  • Ratchet: a register with values taken from a custom semi-lattice.

Collections

  • RGA: an ordered sequence of Strings.
  • LWWMap: a Map from String to LWW scalar value (of type String).
  • MVMap: a Map from String to MV value (of type String).
  • Map: a Map from a String key to a value of type LWW-String union MV-String union PNCounter

See also the documentation.

Concordant Service

The Concordant service (C-Service) is a distributed database service for the CRDTs of the C-CRDTlib.

The C-Service is a TypeScript project distributed as an NPM package. It ensures persistence and replication of CRDT objects. It runs as a standalone application, and must not be accessed directly, but only through the C-Client API. Currently, it relies on CouchDB.