Node.js package to access serial ports for reading and writing OR Welcome your robotic JavaScript overlords. Better yet, program them!
C++ JavaScript Java
Pull request Compare This branch is 990 commits behind node-serialport:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

  eeeee eeeee eeeee eeee       e  eeeee 
  8   8 8  88 8   8 8          8  8   " 
  8e  8 8   8 8e  8 8eee       8e 8eeee 
  88  8 8   8 88  8 88      e  88    88 
  88  8 8eee8 88ee8 88ee 88 8ee88 8ee88

  eeeee eeee eeeee  e  eeeee e     eeeee eeeee eeeee eeeee 
  8   " 8    8   8  8  8   8 8     8   8 8  88 8   8   8   
  8eeee 8eee 8eee8e 8e 8eee8 8e    8eee8 8   8 8eee8e  8e  
     88 88   88   8 88 88  8 88    88    8   8 88   8  88  
  8ee88 88ee 88   8 88 88  8 88eee 88    8eee8 88   8  88

Version: 0.3.0 - Released July 28, 2011

Imagine a world where you can write JavaScript to control blenders, lights, security systems, or even robots. Yes, I said robots. That world is here and now with node-serialport. It provides a very simple interface to the low level serial port code necessary to program Arduino chipsets, X10 wireless communications, or even the rising Z-Wave and Zigbee standards. The physical world is your oyster with this goodie, don't believe us - watch this presentation from JSConf EU 2010 by Nikolai Onken and Jörn Zaefferer.

Robots, you say?

This library is admittedly a base level toolkit for building amazing things with real world (including robots). Here are a couple of those amazing things that leverage node-serialport:

How To Use

Using node-serialport is pretty easy because it is pretty basic. It provides you with the building block to make great things, it is not a complete solution - just a cog in the (world domination) machine.

To Install

  npm install serialport

To Use

Opening a serial port:

  var SerialPort = require("serialport").SerialPort
  var serialPort = new SerialPort("/dev/tty-usbserial1");

When opening a serial port, you can specify (in this order).

  1. Path to Serial Port - required.
  2. Options - optional and described below.

The options object allows you to pass named options to the serial port during initialization. The valid attributes for the options object are the following

  • baudrate: Baud Rate, defaults to 9600. Must be one of: 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1800, 1200, 600, 300, 200, 150, 134, 110, 75, or 50.
  • databits: Data Bits, defaults to 8. Must be one of: 8, 7, 6, or 5.
  • stopbits: Stop Bits, defaults to 1. Must be one of: 1 or 2.
  • parity: Parity, defaults to 0. Must be one of: 0, 1, or 2.
  • buffersize: Size of read buffer, defaults to 255. Must be an integer value.
  • parser: The parser engine to use with read data, defaults to rawPacket strategy which just emits the raw buffer as a "data" event. Can be any function that accepts EventEmitter as first parameter and the raw buffer as the second parameter.


Out of the box, node-serialport provides two parsers one that simply emits the raw buffer as a data event and the other which provides familiar "readline" style parsing. To use the readline parser, you must provide a delimiter as such:

  var serialport = require("serialport");
  var SerialPort = serialport.SerialPort; // localize object constructor
  var sp = new SerialPort("/dev/tty-usbserial1", { 
    parser: serialport.parsers.readline("\n") 

To use the raw parser, you just provide the function definition (or leave undefined):

  var serialport = require("serialport");
  var SerialPort = serialport.SerialPort; // localize object constructor
  var sp = new SerialPort("/dev/tty-usbserial1", { 
    parser: serialport.parsers.raw

You can get updates of new data from the Serial Port as follows:

  serialPort.on("data", function (data) {
    sys.puts("here: "+data);

You can write to the serial port by sending a string or buffer to the write method as follows:

serialPort.write("OMG IT WORKS\r");

Enjoy and do cool things with this code.