Stream live events naar verbonden browsers en mobiele apps.
Push live orderupdates, tokenstreams van AI-agents, de status van samenwerkingsruimtes en in-app-meldingen via beheerde pub/sub-kanalen, zonder zelf WebSocket-infrastructuur te beheren. Kanalen starten op aanvraag zodra een client zich abonneert en sluiten wanneer de laatste verbinding vertrekt. Openbare, privé-, presence-, versleutelde en gecachete modi zijn ingebouwd in de kanaalnaam.
channels.ts
4 geabonneerd4 geabonneerdconst bird = new BirdRealtime({ appKey: APP_KEY, region: "us1" }); // Public: anyone holding the app key can subscribe.const scores = bird.subscribe("match-42"); // Private: your backend signs every subscription.const order = bird.subscribe("private-order-ord_123"); // Presence: private, plus an identity the room can see.const room = bird.subscribe("presence-room-42"); // Cache: the latest event replays to whoever joins next.const build = bird.subscribe("cache-build-8821"); build.bind("bird:cache_miss", () => showSkeleton());
Verbinding 26896.319537
channels.ts
4 geabonneerd4 geabonneerdconst bird = new BirdRealtime({ appKey: APP_KEY, region: "us1" }); // Public: anyone holding the app key can subscribe.const scores = bird.subscribe("match-42"); // Private: your backend signs every subscription.const order = bird.subscribe("private-order-ord_123"); // Presence: private, plus an identity the room can see.const room = bird.subscribe("presence-room-42"); // Cache: the latest event replays to whoever joins next.const build = bird.subscribe("cache-build-8821"); build.bind("bird:cache_miss", () => showSkeleton());
Verbinding 26896.319537
channels.ts
4 geabonneerd4 geabonneerdconst bird = new BirdRealtime({ appKey: APP_KEY, region: "us1" }); // Public: anyone holding the app key can subscribe.const scores = bird.subscribe("match-42"); // Private: your backend signs every subscription.const order = bird.subscribe("private-order-ord_123"); // Presence: private, plus an identity the room can see.const room = bird.subscribe("presence-room-42"); // Cache: the latest event replays to whoever joins next.const build = bird.subscribe("cache-build-8821"); build.bind("bird:cache_miss", () => showSkeleton());
Verbinding 26896.319537
Bepaal toegang en ruimtegedrag met het kanaalprefix.
Start ruimtes op aanvraag, zonder een kanaalregister in te richten.
Met de Bird Realtime-API routeert je applicatie live verkeer door zich te abonneren op een hoofdlettergevoelige kanaalnaam van maximaal 164 tekens, in plaats van ruimtes vooraf in een database aan te maken. Het prefix van de naam bepaalt de grens voor beveiliging en status: een naam zonder prefix is open voor elke bezoeker, private- vereist dat je backend de abonnee autoriseert, presence- voegt een geverifieerde ledenlijst toe en private-encrypted- versleutelt eventpayloads end-to-end. Openbare kanalen zijn toegankelijk met je openbare app-sleutel, dus gebruik voor klant- en tenant-ID's altijd geautoriseerde prefixen.
Kies de kanaalmodus die past bij wat je streamt.
Gebruik dezelfde WebSocket-verbinding en dezelfde publish-aanroep vanuit je backend voor openbare broadcasts, geauthenticeerde klantfeeds en samenwerkingsruimtes.
- 01
Public channels.
Broadcast live sportuitslagen, aankomsttijden van het openbaar vervoer, voorraadtickers of systeemstatusupdates naar elke bezoeker, zonder een autorisatie-endpoint aan te roepen. Iedereen met je openbare app-sleutel kan zich abonneren, dus gebruik algemene onderwerpnamen zoals scores-live in plaats van klant-ID's in openbare kanaalnamen.
- 02
Private channels.
Stream persoonlijke ordertrackers, tokenstreams van AI-agents, factuurmeldingen en werkruimtemeldingen via private-kanalen. Wanneer een browser of mobiele app zich abonneert, controleert je backend de sessie van de gebruiker en ondertekent het abonnement met je app-secret, zodat onbevoegde verbindingen niet kunnen meeluisteren.
- 03
Presence channels.
Bouw deelnemerslijsten voor gedeelde documenten, live kijkersbalken en beschikbaarheid van supportwachtrijen op presence-kanalen. Je server autoriseert elke abonnee en koppelt een geverifieerd ledenprofiel, zodat verbonden clients de actieve ledenlijst van de ruimte en realtime updates over binnenkomen en vertrekken ontvangen.
- 04
Versleutelde channels.
Bescherm gevoelige accountupdates, financiële meldingen of vertrouwelijke werkruimtegegevens met private-encrypted-kanalen. Je server versleutelt elke payload met een 32-byte hoofdsleutel die jij beheert. De Realtime-edge levert alleen versleutelde tekst af, terwijl kanaal- en eventnamen zichtbaar blijven voor routering.
- 05
Cache channels.
Geef late deelnemers en mobiele clients die opnieuw verbinden direct bij het abonneren de nieuwste status door het cache-prefix toe te voegen. Realtime speelt het laatst gepubliceerde event opnieuw af, met een TTL van maximaal 30 minuten. Is de cache leeg, dan verstuurt Realtime een cache-miss-webhook zodat je server een volledige statussnapshot kan aanvullen.
Verspreid backend-events over maximaal 100 kanalen in één aanroep.
Publiceer updates vanuit je backend of achtergrondworkers met een standaard HTTP-verzoek en laat Bird de WebSocket-fan-out naar verbonden browsers en apparaten afhandelen. Eén aanroep kan een event naar maximaal 100 kanalen broadcasten (zoals een live wedstrijdfeed en de gecachete tegenhanger ervan) of tot 10 verschillende events voor verschillende ruimtes bundelen. Je kunt de verbinding van het handelende tabblad overslaan als je UI al een optimistische update heeft toegepast, live aantallen verbindingen of leden laten terugkomen in het publish-antwoord, en een idempotentiesleutel meesturen zodat een nieuwe poging bij netwerkproblemen geen dubbele events aflevert.
// One event, up to 100 channels, one request.
const result = await bird.realtime.publish(APP_ID, {
event: "score-updated",
channels: ["match-42", "cache-match-42"],
data: { home: 2, away: 1 },
// The tab that scored already rendered it locally.
exclude_connection_id: "26896.319537",
include: ["connection_count"],
});
for (const channel of result.data ?? []) {
console.log(channel.name, channel.connection_count);
}
Stream typindicatoren en live cursors tussen deelnemers.
Kortstondige UI-signalen zoals typindicatoren, live cursorposities en markeringen van actieve selecties hoeven niet via je backend. Als je client-events inschakelt voor je app, kunnen geautoriseerde abonnees in een private- of presence-ruimte events met het prefix client- rechtstreeks naar andere deelnemers in de ruimte broadcasten, met maximaal 10 berichten per seconde per verbinding. Omdat een geauthenticeerd kanaal vereist is, kunnen anonieme bezoekers niet broadcasten met je openbare app-sleutel, en blijven hoogfrequente signalen tussen deelnemers weg van je applicatieservers.
Combineer event-fan-out met lage latentie met duurzame applicatiestatus.
Het publiceren van een event slaagt zodra de Realtime-edge het accepteert voor asynchrone fan-out naar abonnees die op dat moment verbonden zijn. Live kanalen pushen updates direct en bewaren geen berichtenwachtrij voor offline apparaten. Sla duurzame gegevens daarom op in je database en gebruik gepubliceerde events of cachekanalen om verbonden schermen te synchroniseren. Voor alle abonnementen gelden voorspelbare limieten: maximaal 100 kanalen per publicatie, 10 events per batch, 10 kB per eventpayload en kanaalnamen van 164 tekens.
Duik dieper in de docs.
Lees het Realtime-overzicht om te zien hoe kanalen, leden en verbindingen samenhangen. Volg de handleidingen over events publiceren voor fan-out over meerdere kanalen en het uitsluiten van optimistische UI, cachekanalen voor het opnieuw afspelen van de status voor late deelnemers en herstel na een cache-miss, en kanaalstatus opvragen om vanuit je backend de bezetting van live ruimtes te controleren.
Blijf bouwen
met Realtime.
Combineer pub/sub-kanalen met live ledenlijsten van wie online is, door de server ondertekende toegangscontrole en lifecycle-webhooks voor je backend.
Presence
Toon live lijsten van wie online is, ontdubbel open tabbladen op gebruikersidentiteit en stuur individuele leden rechtstreeks berichten.
→Beveiliging
Autoriseer abonnementen op privéruimtes op je server, authenticeer verbindingen en versleutel gevoelige payloads end-to-end.
→Webhooks
Start backendworkflows wanneer een kanaal bezet raakt, leegloopt, van ledenaantal verandert of een cache-miss heeft.
→Schaal zonder controle te verliezen.
Separate production and sandbox traffic into dedicated workspaces, scope API keys to the exact channels each service or agent needs, and track permission changes in the audit log.