Skip to content

Multi-User Chat (XEP-0045)

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