Basic Integration Platform - BINP

Provides a platform for automation with code-first approach, with embedded batteries:

  • Tracing (journals)

  • Internal and user-defined API

  • Ultra-light but rich mobile-first UI

  • Embedded key-value storage

It is heavily inspired by node-red and aims to provide same enjoyment during development but without mess of nodes and connections for tasks a little bit more complicated than just hello world.

The platform also tries to be easy in deployment and maintaining. Code could be stored in a SCM (ex: git) and persistent storage is just a single file that could be backed up and restored trivially.

Because memory and CPU consumption relatively low a solution based on the platform could be launched even on Raspberry Pi Zero with 512MB RAM.


  • python 3.8+


pip install binp uvicorn[standard]

Sample usage

Put your code to and run

uvicorn --reload

Hello world

from binp import BINP

binp = BINP()

async def hello():
    Print hello world in console
    print("hello world")

Hello world with API

from binp import BINP

binp = BINP()"/hello")
async def hello():
    Return hello world
    return {"message": "hello world"}

Try by Curl: curl

Real-world example: fetch currencies every day or manually

Requires additional dependencies: pip install aiohttp aiocron

from datetime import date
from typing import Dict

from aiocron import crontab
from aiohttp import ClientSession
from binp import BINP
from pydantic import BaseModel

binp = BINP()

class Rates(BaseModel):
    base: str = 'USD'
    rates: Dict[str, float] = {}
    date: date

@crontab('0 12 * * *')
async def currency_rates():
    Fetch currency rates
    # make basic HTTP API request
    async with ClientSession() as session:
        res = await session.get('')
        assert res.ok, f"result {res.status}"
        data = await res.json()
    # parse response data
    rates = Rates.parse_obj(data)
    # add record to journal about result
    await binp.journal.record('current exchange rates', base_currency='USD', rates=rates)
     # save rates to default namespace

Indices and tables