Release 0.6

Posted on 22nd Feb 2017

There are some major changes in this release. Chief among them is this blog itself, which is being kindly hosted and supported by @benharri. I hope to use this as a platform for bi-monthly updates. This will be a way to both keep track of our progress and signal future intentions.

In this release, the following notable changes were made:

The biggest change by far is switching to msgpack serialization. This means that you can send most primitives over a wire, as well as arrays and mappings. To be exact, you can send None, bools, ints (2^64 > x >= -2^63), floats, strings, buffers, arrays, and mappings (with strings as keys).

Known issues in this release:

  • Python Events aren't documented cleanly (sphinx-doc/sphinx#3431)
  • Node.js v4 is not currently supported (Babel transpile not yet automated)
  • Python ChordSocket still has no tests
  • Python promises library is using a fork (syrusakbary/promise#23)
  • Protocol documentation is now out of date
  • Private API documentation is not complete

Tentative plans for next release:

  • Bootstrap function specification and implementation
  • Up-to-date protocol documentation
  • Up-to-date private API documentation
  • General logging improvements
  • Switch to upstream Python promises library
  • Regain Node.js v4 support (via automated Babel transpiling)

For convenience, this has been separated into separate Javascript and Python file dumps. See our official issue tracker for more info.

The biggest of these upcoming changes is the Bootstrap protocol (#130). This is our plan for enabling network discovery. Essentially, there is a network of nodes running a 'bootstrap' network. This is a set of ChordSockets which store peer information keyed by their Protocol id. In addition to the method itself, there are five changes needed before this can be finalized:

  1. There needs to be a disconnect message, so you can tell peers you are overloaded
  2. There needs to be a lock message, so you can temporarily reserve changes for a key
  3. There needs to be an unlock message, so you can release this faster than default
  4. The SyncSocket constructor needs to be refactored, so the argument order is the same as the rest
  5. A list of volunteer hosts needs to be compiled for this network. Preferably a long one, in the interest of decentralization.