Skip to content
brian mulloy edited this page Jan 3, 2019 · 45 revisions

Welcome to Zetta!

Zetta logo

An API-First Platform for the Internet of Things

Get started

Run everywhere

Zetta is an open source platform built on Node.js for creating Internet of Things servers that run across geo-distributed computers and the cloud. Zetta combines REST APIs, WebSockets and reactive programming – perfect for assembling many devices into data-intensive, real-time applications.

var zetta = require('zetta');

zetta()
 .name('beaglebone')
 .link('http://cloud.herokuapp.com')
 .listen(3000);

API every Thing

Zetta turns any device into an API. Zetta servers communicate with microcontrollers like Arduino and Spark Core giving every device a REST API both locally and in the cloud. Zetta's reactive hypermedia design marries reactive programming with Siren hypermedia APIs so that you can assemble distributed systems of devices that communicate and react via APIs.

GET /servers/321/devices/123
Host: cloud.herokuapp.com
Accept: application/vnd.siren+json

{
  "class": [
   "device"
  ],
  "properties": {
   "id": "123",
   "type": "arm",
   "name": "Robot Arm",
   "state": "standby"
  },
  "actions": [{
   "name": "move-claw",
   "method": "POST",

...

Code with Joy

Building Internet of Things systems is complex. Zetta provides helpful abstractions for increased developer productivity while also giving direct access to underlying protocols and conventions allowing you to focus on the big picture without losing track of the details so that you joyfully transform sensors, actuators and controllers into big, creative applications.

module.exports = function(server) {
  var alarmQuery = server
    .from('office')
    .where({type: 'alarm'});
  var motionDetectorQuery = server
    .from('warehouse')
    .where({type: 'motionDetector'});

  server.observe([alarmQuery, motionDetectorQuery],
    function(alarm, motionDetector) {
      motionDetector.on('motion', function() {
        alarm.call('activate', function() {});
      });
    });
}
Clone this wiki locally