Channels, presence and history over one socket, and every event delivered on to your own backend. Messages are unlimited on every plan, and you pay for concurrent connections — the one number you can actually size in advance.
One package and one key. Channels exist on first use, presence and history come with them, and the token your own backend signs decides what each client is allowed to do.
// npm i @blackevin/client import * as Blackevin from "@blackevin/client" const realtime = new Blackevin.Realtime({ key: KEY }) const channel = realtime.channels.get("chat:lobby") channel.subscribe((msg) => render(msg.data)) await channel.publish("hello", { text: "hi" })
Create a project, grab a key, and publish your first message in minutes.