AppLooma Signaling

Comments and presence, on the same channel as the video.

Live comments, likes, typing indicators, a viewer count and an audience list, carried alongside the media. No second connection, no second server, nothing extra on your bill. Stored chat with history when a message has to last.

AndroidiOSWebFlutterReact Native
1,284 here
LIVE1.2K
Omar joined
Mei is typing…
18,420

Why teams switch

The hard parts of realtime messaging, already solved.

✕The problem

Running your own websocket server

A second connection to scale, monitor and keep in sync with the call.

AppLooma

It rides the media channel

Messages and presence travel the same path as the audio and video. Nothing extra to deploy, connect or scale.

✕The problem

Viewers who cannot say anything

Locking viewers out of the stage usually locks them out of the chat too.

AppLooma

Audience can comment, not publish

Every role can send messages, audience included, while only host and co-host can publish audio and video.

✕The problem

Presence that drifts

Late joiners see an empty audience because only arrivals were counted.

AppLooma

A roster that starts right

People who were already in the channel are reported when you join, and the audience list updates as people arrive, leave or go on stage.

✕The problem

Comments out of order

Replies that arrive before the question confuse everyone.

AppLooma

Reliable and ordered by default

Messages arrive in order or the send fails. Bursts like cursors and reactions can go lossy instead.

✕The problem

Clients pretending to be the host

A role a client can set is a role anyone can set.

AppLooma

Roles from the signed token

Host, co-host or audience comes from the token your server signed. A client cannot promote itself.

✕The problem

Messages lost when someone was away

Live signals vanish; some conversations need to be there tomorrow.

AppLooma

Stored chat when you need it

Chat keeps history, unread counts and recall, sent by your server so you can filter first.

Two kinds of message

Live signals and stored chat, side by side.

Use Signaling when a message is worthless a minute later. Use Chat when someone would notice it missing when they come back.

Signaling

Live, free, forgets

  • Comments, likes, typing, hand-raise
  • Anyone in the channel can send, audience too
  • Reliable and in order, or lossy for bursts
  • Up to about 15 KB a message
  • Nothing stored, no extra charge
Read the Signaling guide

Chat

Stored, with history

  • Your server sends, so you can filter first
  • History, newest first, paged
  • Unread counts per person
  • Recall a message, it keeps its place
  • chat.message and chat.deleted webhooks
Read the Chat guide

#friday-show

History · 214 messages

3

Omar · 21:00

Who is joining the show tonight?

Nusrat · 21:01

Me! Saving a seat 🙌

3 new

Rina · 21:02

Message recalled by a moderator

Mei · 21:03

Starting in 5 minutes

Yuki · 21:04

On my way

Message #friday-show

Easy to integrate

Comments in one line, history when you need it.

1

Nothing to enable

Signaling is part of every channel from the moment someone joins. sendMessage broadcasts to everyone; the message event delivers what others send.

2

Read the room

audience, audienceCount and hosts stay current, with an event when they change. React hooks do the bookkeeping for you.

3

Add stored chat on your server

Post messages through the Chat API, read history from the client with its join token, and track unread counts.

// Anyone in the channel, audience included
await engine.sendMessage('First!');
await engine.sendMessage({ kind: 'reaction', emoji: '🎉' });
engine.on('message', (m) => {
addComment(m.from?.displayName, m.text ?? m.data);
});

Features

Everything around the video.

Live comments and likes

Text or structured objects to everyone in the channel, reliable or lossy, up to about 15 KB each.

In this room1,284

Nusrathost
Meicohost
Omaraudience
Rinaaudience
Omar joined

Presence and audience list

Who is here, who is on stage and how many are watching, including people who joined before you.

Omar GOLD

audience · watching

user.attributes
{ "name": "Omar",
  "avatar": "https://…/omar.png",
  "tier": "gold" }

User attributes

The metadata your server puts in the token, such as name, avatar or tier, readable on every participant.

MediaDataAdminhost✓✓✓cohost✓✓–audience–✓–

Signed into the token by your server

Roles you can trust

Host, co-host or audience is signed by your server. Every role can send messages; only host and co-host publish media.

Omar
Who is joining tonight?

Rina
Message recalled

Mei
Starting in 5 minutes

HistoryUnread · 3Recall

Stored chat

History paged newest first, unread counts and recall that keeps the message's place. Chat guide →

POST your-server/webhooksHMAC

chat.message200
chat.deleted200
session.ended200
recording.complete200
gift.sent200

Webhooks

HMAC-signed events to your server: chat.message, chat.deleted, session.ended, recording.complete and gift.sent.

Full capability list

What you get, in one SDK.

Messages

  • Broadcast to everyone in the channel
  • Text or structured objects
  • Reliable and ordered, or lossy
  • About 15 KB per message
  • Raw bytes with sendData

Presence

  • Audience list and count
  • Hosts on stage
  • Late joiners see who was there
  • Attributes from the token
  • Speaking state per user

Chat

  • Sent by your server
  • History, paged by time
  • Unread counts
  • Recall a message
  • Read history from the client

Platform

  • Same connection as the media
  • Web, React, React Native
  • Flutter, Android, iOS
  • Signed webhooks
  • No extra charge
0
extra connections
~15 KB
per message
0
extra cost
6
client platforms
3,000
Sandbox minutes to test

Built for

Made for the app you are building.

LIVE2.4K

Ayaan

sent a Heart

×20

Everyone reacting to the same moment.

  • Comments and likes from every viewer
  • A live count of who is watching
  • Join and leave notices
  • Typing indicators sent lossy

How to get started

Live in four steps.

Every account gets 3,000 Sandbox minutes to test for a $1 card check. Then pick a fixed monthly plan, with no overage charges.

1

Create a free account

Sign up, verify your email and create a project in the console to get your App ID and API keys.

2

Join a channel

Signaling is on in every channel. No extra setup and no second connection.

3

Send and listen

sendMessage to broadcast, the message event to receive, the audience to show who is here.

4

Add chat and webhooks

Stored chat from your server, events to your backend. Every plan includes both.

FAQ

Common questions.

Is signaling stored?+

No. A message reaches whoever is in the channel when it is sent. For history, unread counts and recall, use Chat, or write messages to your own database as they arrive.

Can audience members send messages?+

Yes. An audience token cannot publish audio or video but can send messages, which is what makes comments on a broadcast possible.

Does it cost extra?+

No. Signaling, presence and chat are included in every plan. Only participant minutes are billed.

Do I need a separate connection?+

No. Messages travel the same path as the audio and video, so there is nothing extra to deploy or scale.

How large can a message be?+

About 15 KB. Send a URL to your own storage for anything bigger.

Is there moderation?+

Signaling is broadcast as sent, so filter on your own backend first. Chat is sent by your server, which sees every message before it is stored, and a moderator can recall a message.

Add live comments this week.

3,000 Sandbox minutes to test for a $1 card check.