Nebri

Get ahead by writing software 100% faster

Event Driven Architecture Platform + Python

Start now, it's free

Learn More

Focus On Core Logic

All the fixings are taken care of in the Nebri cloud. You only to build the core handlers and rules. We handle queues, endpoint serving, server setup/uptime, quarantines, debugging environments, process logging, process querying, child/parent process trees, and WAY more!

Chain Events

Leverage the flow of information from any API or human input, and create complex If-Then reactions. Add just a few listeners, rules and connections and you have a humming software backend.

Two Scripts = Big App

Write a rule, add an endpoint, and test! With a small amount of scripts you can create full blown software backends. Because you don't have to worry about building generic system components, months of programming time are saved.

For Makers

Rules give you the most power over the internet of things with the least amount of code. Any device with internet connectivity and an API is available to Nebri. Think FitBit, Hue, Nest, Sense Mother, SmartThings and more.

For Business

Developed as a BPM alternative, a rule engine offers powerful workflows for humans. You can control a sales or project process, or orchestrate a software release process. Connect to Github and Trello to add even more insight.

For the Smart Home

Control your smart home with true home automation. No smart phones needed to turn on your lights now. That can be done with simple rules that might correspond to certain times, away statuses, or even remote buttons and sensors.

Demo App in 3 Scripts

Test on JS Fiddle
import uuid
import logging

logging.basicConfig(filename='test_api.log', level=logging.DEBUG)


def start_greeting(request):
    if request.GET.get('greeting', None) is None:
        return HttpResponseBadRequest
    p = Process.objects.create()
    p.identifier = uuid.uuid4().get_hex()
    p.greeting = request.GET['greeting']
    p.ready = False
    p.save()
    return {'identifier':p.identifier}


def poll_greeting(request):
    if request.GET.get('identifier', None) is None:
        return HttpResponseBadRequest
    try:
        p = Process.objects.get(identifier=request.GET['identifier'])
    except Process.DoesNotExist:
        return HttpResponseNotFound
    if p.ready is False:
        return HttpResponse('False')
    response_data = {}
    response_data['message'] = p.message
    response_data['identifier'] = p.identifier
    response_data['greeting'] = p.greeting
    return response_data
class goodbye_greeting(NebriOS):
    listens_to = ['greeting']

    def check(self):
        return self.greeting == 'goodbye'

    def action(self):
        self.message = "Bye! Nice to meet you!"
        self.ready = True
class hello_greeting(NebriOS):
    listens_to = ['greeting']

    def check(self):
        return self.greeting == 'hello'

    def action(self):
        self.message = 'Hi! How are you?'
        self.ready = True