UbSub.io

The simplest way to organize and distribute events.

Distributed ??? events and counting...

What is UbSub?

PubSub is the easiest way to capture and transmit events anywhere! Have an email and want it to trigger IFTTT? Easy! Want an Arduino to interface with Github? Done!

It's easy to hook up a webhook, an incoming email, a UDP payload from an IoT device, or a SocketIO application to invoke anything else. You can even transform and manipulate data on the server with Javascript!

Read The Docs

Head over to the documentation and check out all the different protocols you can communicate with, along with how to run server-side javascript!

Integrate with your Arduino

Ubsub natively supports esp8266-like boards (esp32, nodemcu, particle, arduino, etc). This makes it super easy to send and receive data to the board from the cloud.

(Check out the code)

Manage your Email Flow

You can both send and receive emails via ubsub (As data payloads, of course). This makes it easy to inspect automated emails and decide whether to alert!

Listen to Events in your Application

Listen to and emit events directly in your application from a variety of protocols including SocketIO, MQTT, and HTTP endpoints.

Install: npm i socket.io-client

  const socketio = require('socket.io-client');
  
  const userId = 'HypW9sEVE';
  const userKey = '463e501e5f66b72987d13770406b7b3f8e11f98f0add9ff1';
  const topicId = 'rkxsfcsVN4'
  
  const url = `https://socket.ubsub.io/socket?userId=${userId}&topicId=${topicId}&userKey=${userKey}`;
  const io = socketio(url);
  io.on('connect', socket => {
    console.log('Connected!');
    io.on('handshake-error', err => {
      console.log(err);
    });
    io.on('event', data => {
      // data: { topicId: 'rkxsfcsVN4', payload: {} }
      console.log(data);
    });
  });
  
Install: pip install python-socketio[client] websocket-client

  #!/usr/bin/env python3
  import socketio
  
  userId = 'HypW9sEVE'
  userKey = '463e501e5f66b72987d13770406b7b3f8e11f98f0add9ff1'
  topicId = 'rkxsfcsVN4'
  namespace = '/socket'
  
  sio = socketio.Client()
  
  @sio.on('connect', namespace=namespace)
  def on_connect():
    print('Connected!')
    sio.emit('subscribe', {
      "userId": userId,
      "userKey": userKey,
      "topicId": topicId
    }, namespace=namespace)
  
  @sio.on('event', namespace=namespace)
  def on_data(data):
    print('GOT DATA:')
    print(data)
  
  url = "https://socket.ubsub.io"
  sio.connect(url, namespaces=[namespace])
  

  using System;
  using Quobject.SocketIoClientDotNet.Client;
  using System.Threading;
  using Newtonsoft.Json;
  using System.Text;
  using Newtonsoft.Json.Linq;
  namespace csharp
  {
      public static class SocketIOExample
      {
          private static readonly String USER_ID = "HypW9sEVE";
          private static readonly String USER_KEY = "463e501e5f66b72987d13770406b7b3f8e11f98f0add9ff1";
          private static readonly string TOPIC_ID = "rkxsfcsVN4";
  
          public static void ExampleMain()
          {
              Console.WriteLine("Connecting...");
  
              var url = "https://socket.ubsub.io";
              var manager = new Manager(new Uri(url));
              var sock = manager.Socket("/socket");
  
              sock.On(Socket.EVENT_CONNECT, () =>
              {
                  Console.WriteLine("Connected!");
                  var data = JObject.FromObject(new
                  {
                      userId = USER_ID,
                      userKey = USER_KEY,
                      topicId = TOPIC_ID,
                  });
                  sock.Emit("subscribe", data);
              });
  
              sock.On(Socket.EVENT_ERROR, err =>
              {
                  Console.WriteLine(err);
              });
  
              sock.On("event", data =>
              {
                  Console.WriteLine(data);
              });
  
              while(true)
              {
                  Thread.Sleep(TimeSpan.FromSeconds(1));
              }
          }
      }
  }
  

  package io.ubsub.example;
  
  import io.socket.client.IO;
  import io.socket.client.Socket;
  
  public class Main {
      private static final String USER_ID = "HypW9sEVE";
      private static final String USER_KEY = "463e501e5f66b72987d13770406b7b3f8e11f98f0add9ff1";
      private static final String TOPIC_ID = "rkxsfcsVN4";
  
      public static void main(String[] args) throws Throwable {
          String url = String.format("https://socket.ubsub.io/socket?userId=%s&userKey=%s&topicId=%s", USER_ID, USER_KEY, TOPIC_ID);
  
          Socket sock = IO.socket(url);
          sock.on(Socket.EVENT_CONNECT, (x) -> {
              System.out.println("Connected!");
          });
          sock.on("event", x -> {
              System.out.println(x.toString());
          });
          sock.connect();
      }
  }
  

Features

Multi-Protocol

Communicate with different protocols such as HTTP, Email, SocketIO, UDP, and MQTT. Easily connect anything to everything.

Common Language

UbSub communicates with the most common language on the internet: JSON

Many Use Cases

Because there are so many protocols, it covers a variety of use-cases such as low-power IoT devices, 3rd party platforms, web browers, or your own internal systems.

Validation & Transformation

Manipulate and validate your payload and translate it to something your subscriber understands without the hassile of managing servers.

Separate Concerns

No need to have one service need to know about another. Centralize service interaction and communication through UbSub.

Simple Data Store

Persist simple variables to keep track of state between event publications.

Cron Jobs

Schedule tasks to kick off events, check service health, or poll for data.

What are you waiting for?

(You don't even need an email to sign-up!)