Resenha - Add Discord-style Voice Rooms to Your Community ๐ŸŽ™

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.

output

Try It Live

:point_right: https://discourse-on-a-pi5.falco.dev/

(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

:warning: 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.

Installation

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/xfalcox/resenha.git

Enable in Admin > Settings > Plugins > resenha enabled.

Feedback Welcome

This is experimental โ€” bugs, ideas, and questions are all welcome in this topic. PRs too!


Note: This is not an official plugin.

55 ืœื™ื™ืงื™ื

Review, awesome I love it thank you my fellow countryman

12 ืœื™ื™ืงื™ื

I just installed it and up and running in about half an hour. Seems to work well! Would love to see a few feature changes/additions:

Feature Status
Rename a room :cross_mark: Not implemented
Delete a room :cross_mark: Not implemented
Change the default room name :cross_mark: Hard-coded
Tie rooms to Discourse categories :cross_mark: Not supported
Set per-room permissions :cross_mark: Not supported
Create auto-expiring rooms :cross_mark: Not supported
Room descriptions / topics :cross_mark: Not supported
10 ืœื™ื™ืงื™ื

This is amazing. Is there any plan for the team to make it official once itโ€™s out of alpha?

7 ืœื™ื™ืงื™ื

No plans currently, as this is mostly an exploration of the possibilities of the technology and how it can integrate with Discourse.

Still, like everything else, it depends on what our customers want.

9 ืœื™ื™ืงื™ื

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!

4 ืœื™ื™ืงื™ื

Where is the option to create a new room?

There is no UI for that as this is an experimental project on the technology rather than a ready solution for productions sites.

2 ืœื™ื™ืงื™ื

Shouldnโ€™t,t the experimental be present for now?

Cool plugin

3 ืœื™ื™ืงื™ื

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:

  1. An option for video (likely not possible technically with such a lightweight tech)

  2. AI transcription, clever enough to integrate related topics and chat. This would be absolutely amazing as a meeting scribe.

11 ืœื™ื™ืงื™ื

Thanks for the feedback! That was exactly my goal with this!

Definitely, that would be a logical next step, with ephemeral rooms to back it up.

Itโ€™s very doable, both without a SFU/MCU for people with good enough upload, or with optional support for it.

7 ืœื™ื™ืงื™ื

This were perfect I not will update for a long period but feb Iโ€™ll update for last time when ESR is launched for include this plugin

I am so excited for that and I hope to comes.

2 ืœื™ื™ืงื™ื

Want to use a more water-cooler like icon?

image

Pop this in a TC:

// 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;
}
3 ืœื™ื™ืงื™ื

There is now UI for managing rooms.

10 ืœื™ื™ืงื™ื

Thanks Falco for this plugin :heart:

This is great work :+1:

ืœื™ื™ืง 1

Iโ€™m testing in production Iโ€™ll be back with feedbacks! Letโ€™s Review :brazil:

ืœื™ื™ืง 1

Maybe a ring could be better in this case? when I among a room and click on my own profile or another profile DOM refresh returning to homepage.

There is now a room details screen using the kebab menu pattern from Discourse Chat

2 ืœื™ื™ืงื™ื

It doesnโ€™t overlap on the default theme, maybe adjust yours theme to handle the less pace for padding?

image

This is now fixed.

3 ืœื™ื™ืงื™ื

In light of recent news, I added a new feature to the plugin: an AI-powered noise filter.

Admins can make it available via a site setting (default: off), and then users can opt into it by clicking on their own user in a voice chat room.

6 ืœื™ื™ืงื™ื