Signal Kit

Every stream event.
One socket.

Chat, follows, subs, tips and raids from Twitch, YouTube and X, normalized into one format and delivered over a single WebSocket.

Get an API key
$ npm i @signal-kit/client
  • Twitch
  • YouTube
  • X

Listen in a few lines

Create a key, then handle events by kind.

index.ts
1import { SignalKit } from "@signal-kit/client";
2
3const kit = new SignalKit({ token: process.env.SIGNAL_KIT_KEY });
4
5kit.on("tip", (e) => console.log(`${e.actor?.name} sent ${e.amount?.display}`));
6kit.on("chat.message", (e) => console.log(e.actor?.name, e.message));
7kit.connect();
OutputListening
mira.codes sent $20.00
pixelpilot sent 500 bits
devon_k does the SDK work in Bun?

One shape for every platform

A Twitch cheer and a YouTube Super Chat are both a tip with an amount. Write the handler once.

Twitch cheer
{
"kind": "tip",
"platform": "twitch",
"actor": { "name": "pixelpilot" },
"message": "the websocket is SO clean",
"amount": {
"value": 500,
"currency": "BITS",
"display": "500 bits"
}
}
YouTube Super Chat
{
"kind": "tip",
"platform": "youtube",
"actor": { "name": "mira.codes" },
"message": "Take my money.",
"amount": {
"value": 20,
"currency": "USD",
"display": "$20.00"
}
}
  • Replay on reconnectEvents are kept for 24 hours. When the SDK reconnects it replays what you missed, without duplicates.
  • Push, not pollingTwitch arrives through EventSub conduits, YouTube chat through the streamList gRPC push API, and X through the X Activity API.
  • Every channel you runConnect several accounts per platform. Each event says which channel it came from.
  • A CLI for the terminalThe same events, streamed to your terminal while you build.

Free. Sign in to start.

Use any account you stream on. Connect the others afterwards.

Get an API key