Cylon.js 1.0.0 is here!

by Andrew Stewart and Ron Evans

It's been a long time coming, but version 1.0.0 of Cylon.js is finally here!

We're thrilled to share this with all of you.

If you want a "media-friendly" version of the story, here is our press release about it:

This release signifies we think the core APIs in Cylon are stable, and we don't anticipate any more breaking changes in the near future.

In addition, we have made a number of important changes:

Removed Single Connection/Device Syntax

The outdated, deprecated method of specifying a single device or connection when creating a robot has now been fully removed.

Attempting to instantiate a robot in this manner will now throw an error.

Bound Functions By Default

Methods passed to the robot initializer are now auto-bound:

  connections: {
    arduino: { adaptor: "firmata", port: "/dev/ttyACM0" }

  devices: {
    led: { driver: "led", pin: 13 }

  blink: function() {

  work: function(my) {
    every((1).second(), my.blink);


A new method has been added to the base class for Drivers and Adaptors, #respond.

This method provides a simple interface for device/adaptor methods to handle both callbacks and events.

It's signature is #respond(event, callback, err, ...vals).

The error/values are provided to the callback directly. If err is a non-null value, the "error" event is emitted with err provided as a value. Otherwise, the provided event is emitted, with vals passed as arguments.

Example usage:

Driver.prototype.write = function(pin, val, callback) {
  doAsyncThing(pin, val, function(err, data) {
    this.respond("write", callback, err, data);

Debug mode flag

This release also adds a quicker way to run your robots in debug logging mode - just add the --debug flag to your command when running it.

As always, you can check out the compare view on GitHub for more details.


We'd really like to extend a massive thanks to all the contributors who've helped get Cylon.js to this point. We couldn't have done this without you.

  • Adrian Zankich
  • Andrew Nesbitt
  • Andrew Stewart
  • Avner Cohen
  • Caleb Oller
  • Chris Boette
  • Chris Matthieu
  • Daniel Fischer
  • Daniel Lamb
  • Daniel Portales
  • Edgar Silva
  • Evoliofly
  • Felix
  • Fábio Franco Uechi
  • Guido García
  • James Brown
  • Janaka Abeywardhana
  • Jarrod Ribble
  • Jasson Cascante
  • Jasson Qasqant
  • Javier Cervantes
  • Jay Wengrow
  • Jérôme Loï
  • Julian Cheal
  • Justin Smith
  • Kraig Walker
  • Loren West
  • Luis Felipe Perez
  • Mario Ricalde
  • Matheus Mariano
  • Michael Harris
  • Mike Skalnik
  • Nathan Zankich
  • Rafael Magana
  • Reid Carlberg
  • Ron Evans
  • Sonic Radish
  • Theron Boerner
  • Tomasz Szymanski
  • Wojtek Erbetowski
  • Xixe Bombilla
  • chrisfp
  • gorhgorh
  • peterainbow

Thanks Again

We can't overstate how thankful we are to our users and contributors.

For more updates, be sure to follow us on Twitter at @CylonJS.