Hey everyone! Sharing Resenha, an experimental plugin that adds voice and video chat rooms directly into Discourse — no external apps required, just peer-to-peer WebRTC in your sidebar.
(Yes, it runs on a Raspberry Pi 5 — that’s how lightweight this is.)
How It Works
Click a room in the sidebar to join, click again to leave. By default all media goes peer-to-peer via WebRTC — your Discourse server only handles signaling, never media. Sites that need bigger calls can optionally route rooms through a LiveKit media server — either LiveKit Cloud or a self-hosted one. A default “Watercooler” room is created on install so your community can start talking immediately.
Features
Sidebar-first UX — rooms and live participant avatars right in the sidebar, Discord-style, with animated speaking indicators
Video and screen sharing — optional camera video and screen/tab sharing with a full room page, tile/presentation layouts, and fullscreen support
Persistent call widget — a docked, resizable mini-call that follows you as you browse the forum, video included
Voice and video settings — device pickers, live mic test, input sensitivity gate, WebAssembly noise suppression (DTLN), and MediaPipe background blur — all processed locally in the browser
Room chat — each room gets a text chat backed by real Discourse chat channels and threads
Stage rooms — speaker/audience rooms with a request-to-speak queue, for AMAs and community calls
Room permissions — public, group-restricted, and private rooms, with lock badges in the sidebar and room hashtags for linking rooms in posts
Participant controls — context menu with per-user volume, mute, deafen, and kick; plus AFK auto-mute/disconnect and automatic user status
Room management — user room creation gated by groups, staff CRUD UI, and a full REST API for programmatic control
Zero infrastructure by default — pure browser WebRTC with DTLS-SRTP encryption, no SFU/MCU needed
Optional LiveKit integration — opt rooms in individually or route everything through LiveKit Cloud or your own LiveKit server for large calls, with an admin health panel and webhook-based reconciliation
Status
Beta — The default peer-to-peer mode is tested and working well with small groups (2–10 participants). For larger rooms, point the plugin at LiveKit (Cloud or self-hosted) — everything else keeps working identically.
This is quite awesome Falco ! I can see quite a few applications for this being what you have listed. Feature plugins like this definitely helps make Discourse Meta the goto platform!
I’ve been having a play with this for a few days - and it is brilliant!!!
It solves the problem of easy ‘upgrading’ a forum/chat discussion into a verbal conversation beautifully. I’ve had years of struggling between the need to switch to other platforms, or having resource-heavy (attempts at) integrated video conferencing.
If you decide to take it further, I’d love it to be designed to integrate with chat. It would be simply sublime to be able to launch a private Voice room for the members of a chat directly from the chat (with a tidy up afterwards to keep things clean). And the chat would remain as the perfect place to drop in additional comments, files, links, etc.
Icing on the cake would of course be:
An option for video (likely not possible technically with such a lightweight tech)
AI transcription, clever enough to integrate related topics and chat. This would be absolutely amazing as a meeting scribe.
// Put this in the JS tab or in /javascripts/discourse/api-initializers/...
import { apiInitializer } from "discourse/lib/api";
export default apiInitializer(api => {
api.replaceIcon("microphone-lines", "bottle-water");
});
/* Flip the bottle-water icon upside down in Resenha sidebar - put in Common*/
.sidebar-section.sidebar-section-wrapper [class*="d-icon-microphone-lines"] {
transform: rotate(180deg);
/* Optionally, tweak vertical alignment if needed */
display: inline-block;
}