Multichat
Multichat is Lumio's unified chat experience. It merges messages from every connected platform — Twitch, YouTube, Kick, and Trovo — into one stream with full emote rendering, moderation tools, reply threading, and a rich user-info modal. It also shows live overlays for polls, predictions, hype trains, raids, ad breaks, and every other mod-facing event so you can react without ever leaving the chat view.
This guide walks through the Chat page, every moderation action, the user info
popup and mod notes, the /popout/chat window for OBS, and how to send messages
from Lumio directly.
Where to find it
- Sidebar: Dashboard → Chat.
- Popout window:
/popout/chat. - Translations: chat labels live under the
chat.*namespace inapps/web/messages/{en,de}.json.
Quick start
- Connect at least one streaming platform under Dashboard → Connections.
- Open Dashboard → Chat. Messages start appearing as soon as the WebSocket
connects — you will see the
Connectedindicator in the header. - Pick the platforms you want to see using the platform toggles at the top of the feed (Twitch / YouTube / Kick / Trovo). Toggles let you read, send, or both per platform.
- Type a message in the footer input, press
Enterto send. Use the emote picker (the:)icon) to insert emotes from any of your connected sets. - Click any username to open the User Info Modal for quick moderation context.
The Multichat feed
Message rows
Every row shows:
- Platform icon (Twitch purple, YouTube red, Kick green, Trovo teal).
- User avatar (squared, next to the platform icon).
- Badges (broadcaster, moderator, VIP, subscriber, founder, artist, cheer).
- Display name in the user's Twitch/YouTube color (falls back to a platform default).
- Message body with inline emotes rendered from Twitch, 7TV, BTTV, and FFZ.
- Timestamp (localized).
- Action row on hover:
Reply,Copy,Delete, and the moderation dropdown.
Platform icons, avatars, badges, and timestamps are individually toggleable in the chat settings (gear icon).
Reply chains are shown inline with a small ↳ Replying to {name} marker. Mentions
of your own username are highlighted; the highlight style is configurable in the
popout settings (Off, Border, Background, Border + Background).
A keyword rule can carry its own highlight color: matching messages glow in
that color across the platform tabs (a rule's own keyword tab does not re-color its
own rows, since every row there already matches). When several colored rules match
one message, the first rule in your ordered list wins. A rule color outranks the
automatic role coloring: on a moderator's, VIP's, or self-mention row a matching
rule paints both the border and the background in the rule color, while the
mod/VIP badge stays visible. Rule colors honor the same
highlight-style setting above and are automatically adjusted for contrast in both
light and dark themes. Moderation always takes precedence: a message you have set to
Monitor or Restrict keeps its amber / red treatment marking regardless of any
rule color, and a rule with no color assigned highlights nothing.
A rule matches a message in one of two ways, combined with or: a keyword
matches when the message contains it (anywhere, or on whole-word boundaries — set
by the rule's matching mode), and a prefix matches when the trimmed message
begins with it, case-insensitively. Prefixes are made for command tabs: a rule
with the prefix !frage collects every message that starts with !frage but not
one that merely mentions it mid-sentence. A rule can mix both — for example prefix
!frage or keyword umfrage — and either one alone is enough: a rule needs at
least one keyword or one prefix, not both. The two fields are never joined into a
single term: a keyword test together with a prefix # matches messages that
contain test or that start with # — not the one string #test. To match
#test, enter #test itself, either as a prefix (begins-with) or as a keyword
(contains). Prefixes ignore the whole-word setting
(a prefix is always a begins-with test). Because a prefix rule is exactly what you
reach for alongside the global Hide commands switch, its matches stay visible even
when that switch would otherwise blank a ! message.
Creating and editing a rule
Rules are built in a full-screen, three-step assistant. Open it from the Filters tab of the chat settings (the New button) or from the + at the end of the chat's tab bar — both open the same assistant and produce identical rules. The assistant fills the whole chat window, so it works inside a pop-out too.
The three steps follow what does the rule match? → where does it apply? → how is it shown?:
- Rule — the rule's name plus its keywords and prefixes (both chip
fields: type a value and press
Enteror,). You cannot leave this step until the rule has a name and at least one keyword or one prefix. - Scope — the matching mode (anywhere vs. whole word) and the platform the rule applies to. Both have defaults, so you can pass straight through.
- Appearance — show the rule as its own tab, give it a highlight colour, and pick a notification sound (with a preview button). These come last on purpose: for a quick command tab you just press Next twice.
When you create a rule the assistant is linear — Back and Next, with the
finish button only on the last step. When you edit an existing rule the same
assistant opens with every step clickable in the progress bar and Save active on
every step, so you can jump straight to Appearance, change a colour, and save
without touching the other steps. Closing the assistant (the ×, Cancel, or
Escape) discards everything — a half-filled assistant never leaves a rule behind.
Keyword tabs and history
A keyword rule can also appear as its own tab above the feed — a filtered view that shows only the messages matching that rule. Keyword tabs behave like the main feed, with three additions:
- History back-fill. A keyword tab starts from what is still in the in-browser buffer, then pulls older matches from the server as you scroll up — the same infinite-scroll as the main feed, but querying the keyword search over the last 12 hours. Live and back-loaded messages are judged by the same matcher, so a message never shows in one place and not the other. If a fetched page happens to contain no visible match, the tab loads on automatically — capped, so a keyword with no recent hits never loops.
- Older-message marker. Rows pulled from history carry a muted
oldertag and always show their timestamp (even when timestamps are switched off globally), because for a keyword tab when something was asked is the point. A single divider separates the back-loaded history above from the live buffer below. - A named end. When there are no older matches left in the window, the feed shows
No older matches in the last 12 hoursinstead of the scroll indicator simply vanishing. Because a keyword search is time-bounded and retention trims old data, reaching this end is normal.
Each tab keeps its own scroll position, unread divider, and jump-to-latest counter: switching tabs and back returns you to exactly where you were reading, and one tab's new-message counter never leaks into another.
Entering a keyword tab that has unread matches draws a new messages line at your
read boundary and lands you there, so the matches the badge counted are the first
thing you see. Leaving that tab counts as read: as long as you did not scroll
while it was open, the line does not come back when you return — unless new matches
have arrived since, which draw a fresh line. The preserved read position of the
other views is unaffected: scroll up to read history in All (or a platform tab),
switch away and back, and you return to exactly that spot with its divider intact,
because the messages below it there are genuinely still unread.
The tab bar
Platform tabs and keyword tabs share one row at the top of the chat. When there are more tabs than fit — many rules, or a narrow pop-out — the row scrolls sideways instead of wrapping onto a second line, so the chat never loses height to the tab bar. The + (new rule) and the gear (settings) sit outside the scrolling area and stay in place; everything else scrolls.
- On a mouse/desktop, a left and right arrow appear at the edges of the row only while there is more to reach in that direction, and a soft fade marks the scrollable edge. Click an arrow to scroll the row.
- On touch, there are no arrows — swipe the row sideways instead.
- The active tab always scrolls into view when you select it, and again after a reload restores your last tab, so the tab you are reading is never hidden off-screen.
- On narrow widths an inactive keyword tab collapses to just its colour dot and unread count to save room; the active tab keeps its label, and hovering a collapsed tab shows its name.
Reordering. On a mouse you can drag a keyword tab left or right to reorder it — a click still just selects the tab; only a small drag starts a move. Touch keeps the up/down arrows in the Filters settings list for reordering. Both write the same order, and it survives a reload.
Hide and highlight lists
The Filters tab of the chat settings (gear icon) carries four editable lists,
grouped under Hide and Highlight. Each is a chip field: type a value and press
Enter or , to add it, Backspace on an empty field removes the last chip, and
the × on a chip removes it. Every change is saved to your browser immediately and
survives a reload — including in a token pop-out opened without signing in.
The two user lists — Hidden users and Highlighted users — suggest matching
viewers as you type (from two characters on), drawn from the people your account has
seen in chat. Pick one with the mouse or the keyboard (↑/↓ to move, Enter or
Tab to take the marked entry, Esc to close) and the exact username is added —
so the rule keeps matching even after that viewer changes their display name. A rule
is not tied to a platform: one entry matches the same name everywhere you are
connected, and a name seen on several platforms appears once. The suggestions need
the View user info permission; without it — or if the lookup is briefly
unavailable — the field simply lets you type the name in by hand, exactly as before.
The Command prefixes and Hidden words lists are word lists and do not suggest.
Under Hide:
- Hidden users — messages from these users are hidden. The match is case-insensitive against the username and the display name.
- Command prefixes with a Hide commands switch — while the switch is on,
any message whose text starts with one of these prefixes is hidden.
!is pre-filled; add your own (for example#or?) or remove them. The switch is the master toggle — with it off, the prefixes are ignored. - Hidden words with a Whole word only switch — messages containing one of
these words are hidden. By default the word matches anywhere in the text; turn on
Whole word only to match on word boundaries instead (so
artno longer hidesstart).
Under Highlight:
- Highlighted users — messages from these users get a highlight colour, matched the same way as the hidden-user list. Each highlighted user has its own colour, edited from the colour button on the left of the chip — a small pill showing the current colour and a pencil icon. Clicking it opens a colour dialog with a Highlight switch, the colour picker, a Default colour option, and a live preview of a chat line in the chosen tone. Leave the switch on and keep the default to use the standard highlight colour, pick a colour for a custom one, or switch it off to keep the name in the list but stop highlighting it (the chip then reads dimmed, with no colour dot). Changes apply only when you press Apply; Cancel discards them. This highlight overrides the automatic mod/VIP row colouring — a highlighted moderator's row shows the highlight colour, not the mod colour — while their mod/VIP badges stay visible. Choosing a custom colour only changes how the row looks; it does not change priority — the highlight still ranks below a self-mention, a keyword-tab colour, and any moderation treatment, and it follows the same border/background highlight style as the rest of the chat.
- Notification sound — one built-in sound that plays when any highlighted user
sends a message. Pick a sound from the dropdown — twelve built-ins grouped by
character (
Chime,Ding,Marimba,Pop,Blip,Soft,Bubble,Click,Knock,Alert,Arpeggio,Cascade) — or leave it onNo sound. Every row has its own play button, so you can preview each sound right in the open menu (it plays the row you click without changing your selection or closing the menu), audible even when the volume slider is at0. All twelve are loudness-matched, so switching between them does not jump in volume. This is one sound for the whole highlight list — not a separate sound per user. A switched-off highlighted user is silent, exactly as their row is no longer coloured. If a message both belongs to a highlighted user and matches a keyword rule that has its own sound, the keyword rule's sound wins — the same order as the colour cascade. The shared Notification volume slider and its 1500 ms anti-spam gap cover this sound too, so there is no second volume control and no double-ringing.
A message you sent yourself is never hidden by these lists, and a message under a
Monitor or Restrict moderation treatment always stays visible with its
treatment marking, regardless of the hide lists. A keyword-tab match also shields a
message from the hide filters, so a !frage tab is not blanked by the default !
command prefix.
Hidden and deleted messages
Filter-hidden messages are only hidden in your Lumio view. They are not deleted
from the source platform and they are not written as moderation actions. By default
a matching message is removed from the feed entirely — the row does not appear
at all. If you would rather keep a placeholder you can click to expand and moderate
what the filter took away, switch Hidden Messages to Show placeholder. A keyword
rule's own tab also shields its matching rows from the hide filters so the tab does
not immediately hide the messages it was created to collect.
Deleted messages are different: Lumio marks a row as deleted when it receives a platform deletion event or when a delete/ban/timeout action succeeds in Lumio. Twitch and YouTube deliver individual message deletions to Lumio, including moderator deletes and YouTube author retracts. Kick does not deliver individual message deletion events, although Kick bans still sweep the user's messages. Trovo does not deliver delete events. The Deleted Messages setting only controls rows Lumio has actually received as deleted, and it affects the live Multichat feed only; the User Info Modal still shows deleted rows in that user's message history with a muted deleted style.
Notification sounds
Lumio plays a notification sound from two sources: a keyword rule that
matches a message, and the highlighted-user list (see Hide and highlight lists
above). In each case, pick one of twelve built-in sounds — grouped by character
from soft to attention-grabbing (Chime, Ding, Marimba, Pop, Blip, Soft,
Bubble, Click, Knock, Alert, Arpeggio, Cascade) — or leave it on
No sound. Each row in the dropdown has its own play button that previews that
sound in place, without changing the current selection, so you can audition the whole
catalog without picking blindly. The sounds ship with Lumio — there is no upload — and
are all loudness-matched, so switching between them never jumps in volume.
- A keyword rule's sound plays on any live match, regardless of whether the rule is shown as a tab — a rule set to highlight-only (no visible tab) still rings.
- The highlight-list sound plays when any switched-on highlighted user posts. It is one sound for the whole list, not one per user.
- If a message matches both a sound-carrying keyword rule and a highlighted user, the keyword rule's sound wins — the same priority as the colour cascade — and only one sound plays.
- A sound only plays for a message you can actually see. Hidden messages do not ring:
a message removed by your hidden-user or hidden-word lists is silent, even if its author
is also a highlighted user — you cannot get a chime for a line that never appears. Your
own messages and messages under a
Monitor/Restrictmoderation treatment are silent too. (A keyword-rule match still shields a message from the hidden-word list, so such a message stays visible and rings.) Sounds from a platform or keyword tab you are not currently viewing do still play — the chime is the cue to look there. - A single Notification volume slider in the chat settings' Filter tab controls
the volume for both sources; set it to
0to mute every notification sound. - Rapid matches are rate-limited, so a burst of matching messages plays at most one sound at a time rather than a wall of overlapping beeps.
- Sounds work the same in the pop-out chat, including a token pop-out opened without signing in.
- Browsers only allow audio after you have interacted with the page. Until you click or type once, a queued sound is skipped silently — no error, no prompt.
Platform toggles and YouTube multi-stream
The platform-icon row at the top of the feed lets you enable/disable each platform for reading and sending independently. YouTube gets an extra dropdown for broadcast selection:
- All Broadcasts shows messages from every YouTube broadcast (current and historical).
- Selecting a specific broadcast filters the chat feed to show only messages from that broadcast's
live_chat_id. Messages from other platforms (Twitch, Kick, Trovo) are always visible regardless of the YouTube broadcast filter. - Outgoing messages are sent to the selected broadcast. Replies always target the original message's broadcast.
- The dropdown works in both the dashboard and the popout chat window (browser source).
Alerts overlay
When a mod-facing event fires, a compact alert card pins to the top of the feed so you can act from the same screen:
- Raid incoming — shows the raider and viewer count, with quick links.
- Raid outgoing — the
Cancel Raidbutton stays visible until the raid fires. - Ad break — shows the duration and whether the break was
Automatic. - Hype Train — live progress and
Hype Train Completesummary at the end. - Polls — running totals per option with an
End Pollshortcut. - Predictions —
Lock, pick aWinner, orCancel (Refund)from the card.
These shortcuts require the relevant chat permission (chat:raid, chat:poll,
chat:prediction).
Sending messages
The footer input supports:
- Plain text —
Entersends,Shift+Enterinserts a newline. - @mentions — autocompletes against recent chatters.
- Emotes — click the smiley icon to open the Emote Library (Recently Used,
per-channel sets, and Twitch Global). Search with the placeholder
Search emotes…. - Reply — click
Replyon any message; the input showsReplying to {name}with anXto cancel.
Sending requires the chat:write permission, plus a connected login OR bot
connection for that platform. Platforms where you do not have send access are
greyed out in the footer.
Moderation actions
Hovering any message reveals a chevron that opens the Moderation dropdown. Lumio enforces a role hierarchy (broadcaster > lead moderator > moderator > user) so moderators cannot act on the broadcaster or peers.
What each platform supports
Moderation actions depend on what the platform's API allows. Actions a platform cannot perform are greyed out in the dropdown and the user info modal, so you can see the limit before you click:
| Platform | Delete message | Timeout | Ban |
|---|---|---|---|
| Twitch | ✅ | ✅ | ✅ |
| YouTube | ✅ | ✅ | ✅ |
| Kick | ✅ | — | — |
| Trovo | — | — | — |
Kick's API only supports deleting messages; Trovo does not expose a public moderation API, so its ban and timeout are unavailable. Treatments (monitor / restrict, below) are Lumio-native and work on every platform regardless of this table.
If a moderation action fails for any other reason — an expired login, a missing scope, or a platform rate-limit — Lumio shows an error message with the reason and leaves the user's messages in place. It never pretends a failed ban succeeded.
Delete a single message
Click the trash icon or Delete in the menu. Deleted messages show
Deleted message in-place so the context of a conversation remains visible for
other mods. Requires chat:delete.
Timeout
Presets: 1min, 5min, 10min, 30min. Pick Custom timeout… for any duration
in minutes. Every timeout opens a confirmation dialog:
Are you sure you want to
Timeout 10min{name}?
Requires chat:timeout.
Ban
The Ban user button is destructive and always requires confirmation. Bans are
permanent until reversed on the source platform. Requires chat:ban.
Treatments (monitor / restrict)
Lumio-native moderation flags that travel across platforms:
- Monitor user — flags the user; their messages get a subtle amber badge and mod notes are surfaced.
- Restrict user — stronger warning; messages get a red badge and are down-weighted in alerts.
- Remove treatment — clears the flag.
Treatments are stored in Lumio, not on the platform, so they work even for platforms without native mod actions (Trovo, Kick).
Raids, polls, and predictions
Start or cancel a raid from the Raid command in the alerts overlay. Polls and
predictions started from Lumio use the same input flow as the Twitch dashboard and
require chat:poll or chat:prediction respectively.
User Info Modal
Click any username (in chat or in the event feed) to open a detailed profile:
- Follower /
Not followingbadge withFollowing since {date}. - Account created date and platform ID.
- Bio (where the platform exposes one).
- Tabs:
Messages— recent messages by that user in this channel, with the same moderation controls as the live feed.Mod Notes— private notes shared with your mod team. Create, edit, and delete withchat:notes. Great for tagging repeat offenders or regulars.Events— every event this user has triggered (follows, subs, cheers, raids, superchats, tips).
- Moderation History — timeline of bans, unbans, timeouts, deletions, and
treatment changes, each annotated with
by {moderator name}. - Currently Banned — shows
Banned on {date}if the user is still banned on this platform. - Open Profile — deep link to the user's page on the source platform.
- Highlight / Hide — one-click shortcuts to the Highlighted users and
Hidden users filter lists (see Hide and highlight lists),
to the left of the moderation buttons. They write the same name-based rule the Filters
tab does, so the change also shows up there. Both rules are cross-platform: the
button hides or highlights that name on every platform (and any same-named account
elsewhere) — the button tooltip spells this reach out, which is why the buttons carry
no platform icon. Each button toggles: click again to remove the rule (or, for a
highlight you had switched off in the Filters tab, to switch it back on). While a
user is hidden the Highlight button is disabled — hiding wins over highlighting.
Hiding removes all of that person's messages from the live feed at once; the button
flips to Hidden ✓ so you can undo it, and the
Messagestab notes that you are still looking at their history even though the live feed dropped them. These buttons appear only in the chat modal, not when the card is opened from an event row.
Requires chat:userinfo (or events:userinfo when opened from an event row).
Popout chat for OBS
/popout/chat gives you a borderless chat window perfect for an OBS browser
source, a Stream Deck, or a secondary monitor. The same moderation tools are
available subject to the token's permissions.
- Generate a popout token under Account → Tokens and copy it.
- Open
/popout/chat?token=YOUR_TOKENin OBS as a custom browser dock, or in a secondary browser. - Use the Settings cog (top right) to configure:
- General:
Font Size,Emote Size(a0.5×–2.0×scaling factor for inline emotes, shown as a factor next to the slider),Timestamp,User Badges,Platform Icon,User Avatars,Deleted Messages,Show Header,Show Chat Input,Highlight Events,Theme, andLanguage. - Filters:
Hidden Messages(Remove entirelyby default, orShow placeholder), the Hide and Highlight lists (hidden users, command prefixes with aHide commandsswitch, hidden words with aWhole word onlyswitch, and highlighted users each with a per-user colour that can also be switched off, plus oneNotification soundfor the whole highlight list),Notification Volume, and the keyword-rule list for editing, reordering, or deleting keyword tabs.
- General:
Popout display settings are stored in the browser's localStorage for the
current popout variant. Chat filters and keyword tabs use Lumio localStorage
keys with an account-scoped value plus an unscoped mirror so token popouts can
reuse the same filter setup without a signed-in session.
Permissions
| Permission | What it unlocks |
|---|---|
chat:read | View the Multichat feed and the popout |
chat:write | Send messages from Lumio |
chat:delete | Delete individual chat messages |
chat:timeout | Timeout users (preset and custom durations) |
chat:ban | Ban users |
chat:userinfo | Open the User Info Modal |
chat:notes | Read and write mod notes |
chat:raid | Start / cancel raids |
chat:poll | Create and end polls |
chat:prediction | Manage predictions (lock, resolve, cancel) |
The broadcaster / moderator hierarchy applies on top of these permissions —
moderators cannot delete the broadcaster's messages even with chat:delete, for
example.
Tips & best practices
- Use treatments instead of escalating immediately.
Monitor Userlets you keep an eye on borderline chatters before committing to a timeout or ban, and the badge stays visible across platforms. - Add mod notes the moment a user does something worth remembering. Future you (and every co-moderator) will thank you.
- Separate popouts for your team. Give each moderator their own scoped token
with
chat:delete,chat:timeout, andchat:banbut notchat:notesif you want to keep notes private to a smaller circle. - Keep the alerts overlay visible during events. The raid/ad-break/hype-train cards are context you cannot get from the native platform dashboards without tab-switching.
- Emote search is fuzzy. Type the first few letters to narrow huge emote collections like BTTV/7TV channel sets.
Troubleshooting
Messages appear only from some platforms
- Check the platform toggles at the top of the feed — a toggled-off platform is hidden.
- Check the Filters tab in the Settings cog. A hide-user, hide-command, or
hide-word rule removes matching rows from the feed entirely by default (or
collapses them into a placeholder if you switched
Hidden Messages). - Open Dashboard → Connections and confirm each platform is
Connected as …. - For YouTube, make sure the dropdown on the toggle includes the stream IDs you expect.
Connection lost — reconnecting… banner
The WebSocket dropped. Lumio reconnects automatically with exponential backoff. If it persists, your token is probably expired — log out and back in.
Send box is disabled
You do not have chat:write, or you have no login/bot connection for the
currently-filtered platform. Check your role and confirm the bot connection under
Dashboard → Connections → Bot.
Ban / timeout silently fails
The target may outrank you — Lumio refuses to run a moderator action against the
broadcaster or (on Twitch) against a lead moderator from a regular moderator.
You will see Mod-only on Twitch or the button disabled on the dropdown.
Emotes render as plain text
The emote library has not loaded yet (check the loadingEmotes state) or the
channel does not have the relevant 7TV/BTTV/FFZ set linked. Click Refresh playlists in the popout, or reload the page to force a refetch.
External-link warning keeps popping up
Lumio deliberately intercepts outbound links with the External Link modal so a
single misclick cannot push a viewer to a malicious URL. Approve only links you
actually trust.
Related
- Events — shares the same WebSocket pipeline; mod-facing events surface in the chat alerts overlay.
- Roles & Permissions — how to design scoped mod roles.
- Connections — connect platforms and custom bot identities.
- Overlays — show Multichat on stream with the chat widget.