http, eventstream, socketio, and osc server for livingroom


260.6.203 years ago3 years agoMinified + gzip package size for @living-room/service-js in KB



Creates a living room that you can connect to over HTTP, eventstreams, socket.io, and osc!

You can test it out by running npm start after installing the dependencies with npm install

For a better example with more context, processes and displays, see https://github.com/living-room/lovelace

For a nice javascript client, check out https://github.com/living-room/client-js


npm install
npm start
npm test

example http

$ curl -d 'facts=curl is an app at (20, 30)' localhost:3000/assert

$ curl -d 'facts=$who is an app at ($x, $y)' localhost:3000/select

example socket.io

npm run serve:examples && open http://localhost:5000

from examples/browser.html

const socket = io.connect(`http://localhost:3000`)

// The pattern we want to match on
const pattern = 'ping $number'

let pong = 0

// To subscribe pass in the JSON of an array of patterns
const patternsString = JSON.stringify([pattern])

// We will get back an object, we just care about new assertions
socket.on(patternsString, ({assertions}) => {
  assertions.forEach(({number}) => {
    const value = parseInt(number.value)
    if (value > pong) pong = value
    console.log(`<- pong ${pong}`)
socket.emit('subscribe', patternsString)

// Start pinging from highest previous ping
setInterval(() => {
  socket.emit('assert', `ping ${pong}`, data => {
    console.log(`-> ${data[0]}`)
}, 1500)

example opensoundcontrol

from examples/osc/osc.pde

import oscP5.*;
import netP5.*;

OscP5 oscP5;
NetAddress myRemoteLocation;

void setup() {
  oscP5 = new OscP5(this, 12000);

  myRemoteLocation = new NetAddress("",41234);

void draw() {

void mousePressed() {
  OscMessage assertMessage = new OscMessage("/assert");
  assertMessage.add("processing is a program at (0.2, 0.3)");
  oscP5.send(assertMessage, myRemoteLocation);

  OscMessage assert2Message = new OscMessage("/assert");
  assert2Message.add("coolprocessing is a notherprogram at (0.4, 0.4)");
  oscP5.send(assert2Message, myRemoteLocation);

  OscMessage selectMessage = new OscMessage("/select");
  selectMessage.add("$name is a $type at ($x, $y)");
  oscP5.send(selectMessage, myRemoteLocation);


The http, socketio, and osc endpoints are all the same HTTP uses POST unless otherwise stated.

Add some facts

/assert facts=['some', 'facts', 'here']

Remove some facts

/retract facts=['some', 'facts', 'here']

Batch add and remove facts from the database

/ facts=[{assert: 'some'}, {retract: 'facts'}, {assert: 'here'}]

Find some facts that match a pattern

/select `facts='$what'`

Get all the facts

GET /facts

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.