Concordant Software and Demo Applications

The Concordant software, Version 0, is now available. The code and documentation can be accessed by following this link. 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.

Our software is currently divided into 3 modules:

  1. the Concordant CRDTlib (or C-CRDTlib for short) contains the object types that we have currently implemented;
  2. the Concordant Service (C-Service), which provides replicated storage and communication (currently as a wrapper over couchdb) via a REST API;
  3. and Concordant the Client (C-Client), which manages communication between your application and the C-Service.

C-CRDTlib

CRDTs currently implemented in our library:

Counters

Counters implemented:

  • PNCounter
  • Bounded Counter

Availables operations :

  • increment
  • decrement
  • get

Maps

Maps implemented:

  • LWWMap
  • Map
  • MVMap

Availables operations :

  • set
  • get
  • iterator

Registers

Registers implemented:

  • LWWRegiter
  • MVRegister

Others

Others CRDTs implemented:

  • Ratchet
  • RGA

C-Service

Using CouchDB ... Providing REST API:

C-Client

Communications between the application and the C-Service ...

Session

let session = client.Session.Companion.connect("miniapp", "http://localhost:4000", "credentials");

Collection

let collection = session.openCollection("miniAppCollection", false);

CRDT

let cntr = collection.open("mycounter", "PNCounter", false, function () {return});

Transaction

this.props.session.transaction(client.utils.ConsistencyLevel.None, () => { ... })

Demo Applications

The following links take you to some demo applications which allow you to see how our platform can work and what it can do. In order to best understand, you should open at least two windows of each to see how the applications interact collaboratively.

CRDT Demo

The CRDT Demo is a web page showing how our CRDTs work: PNCounter, RGA, LWWMap, LWWRegister, MVRegister CRDTs. You can create multiple replicas, perform updates, and observe how updates are applied, propagated between replicas, and merged.

See our CRDT Demo.

Sudoku

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 imposes 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.

See our Sudoku.

Collaborative Markdown 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 users connected and 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 Markdown editor exercises the RGA and LWWMap CRDTs.

See our Markdown editor.