xmppd includes a built-in MUC service for group messaging. Rooms are available
at conference.{hostname} by default (configurable via [muc] host).
Room Types#
Transient Rooms#
Created on-the-fly when the first user joins. Automatically destroyed when the last occupant leaves. No configuration persisted.
Persistent Rooms#
Survive server restarts and empty occupant lists. Created by setting the
muc#roomconfig_persistentroom option in the room configuration form.
Features#
| Feature | Status |
|---|---|
| Room creation (instant) | Supported |
| Join with nick | Supported |
| Nick conflict detection | Supported |
| Groupchat message fan-out | Supported |
| Room history on join | Supported (via MAM) |
| Room discovery (disco#info/items) | Supported |
| Admin kick | Supported |
| Ban (outcast affiliation) | Supported |
| Grant/revoke voice | Supported |
| Password-protected rooms | Supported |
| Members-only rooms | Supported |
| Moderated rooms | Supported |
| Room configuration forms | Supported |
| Room subject | Supported |
| Multi-session occupant collapsing | Supported (XEP-0045 ยง7.2.14) |
| MAM in rooms | Supported (XEP-0313) |
| Persistent rooms | Supported |
Room Configuration#
Room owners can configure rooms using data forms (XEP-0004). Supported options:
| Option | Description |
|---|---|
muc#roomconfig_roomname |
Human-readable room name |
muc#roomconfig_roomdesc |
Room description |
muc#roomconfig_persistentroom |
Make room persistent |
muc#roomconfig_publicroom |
List in room directory |
muc#roomconfig_passwordprotectedroom |
Require password |
muc#roomconfig_roomsecret |
Room password |
muc#roomconfig_membersonly |
Restrict to members |
muc#roomconfig_moderatedroom |
Require voice to speak |
muc#roomconfig_changesubject |
Allow occupants to change subject |
Scalability#
MUC rooms are sharded across worker threads using consistent hashing
(hash(room_jid) % N_workers). Each worker owns a subset of rooms and
maintains shadow copies of rooms owned by other workers.
Groupchat delivery uses worker-level multicast: one MPSC message per worker with remote occupants, not one per occupant. For a 500-person room across 8 workers, this means 7 MPSC enqueues instead of 499.
Joining a Room#
From any XMPP client, join roomname@conference.example.com. If the room
doesn't exist, it will be created automatically (transient by default).
Most clients provide a "Join Room" dialog. Enter:
- Room:
roomname - Server:
conference.example.com - Nickname: your display name in the room