@rapidmx/meet-plugin
v0.15.0
Published
RapidMX plugin that provides WebRTC video conferencing, joinable from a calendar invite or a shared link.
Downloads
4,746
Readme
RapidMX: Video Conferencing
Private and public WebRTC video meetings for a RapidMX server. A mailbox owner turns on video conferencing for a calendar event; a private meeting mints one link per invitee (inserted into the invite's location and body), a public meeting shares a single link. Joining needs no account: a guest picks a name (auto-filled from their RapidMX profile when signed in), checks their camera and microphone, and enters. Calls are peer-to-peer WebRTC (no media server). Each pair of participants uses the best path that works, tried in order:
- Direct peer-to-peer, the preferred path.
- Relayed through a configured TURN server, for a participant a direct connection can't reach. A plain
turn:address is offered over both UDP and TCP, so a network that blocks UDP can still reach it. - Proxied by the RapidMX server itself over a WebSocket, the last resort for a participant whose network lets
nothing but ordinary HTTPS out. Video is lower quality and sound may lag; it needs a browser with WebCodecs, and
can be turned off with the
mail:videoconf:relay:enabledsetting. A tile says when a participant is on the TURN relay or the server relay.
Participants can put video filters on their camera from the lobby or during the call: a blurred or custom
background, black and white / sepia / night vision / pixelate looks, and face accessories. They run entirely in the
browser (MediaPipe, loaded only when a filter needs it - from public CDNs by default, or from your own server with
mail:videoconf:effects:assets_url), and the devices, on/off state and filters a participant chose are remembered in
their browser's localStorage for next time.
This plugin's apps/ also ship the public join/lobby/in-call pages and the personal Settings screen - see
package.json's rapidmx.plugin.ui for exactly what's mounted where. Its ui.appRail entry adds a Meet button
to the web client's app rail, shown only for a user who has a personal room: the entry's resolveFrom
(/mail/video-meetings/personal-room, i.e. GET /api/mail/video-meetings/personal-room) answers
{ href: "/meet/<token>", label } for the caller's personal room (the oldest still-active public meeting of the first
mailbox they own that has one) or 404 when there is none, in which case the button stays hidden.
What it adds
(Filled in as each phase lands - see .claude/NOTES.md for the running detail, and RELEASE_NOTES.md for the
full changelog.)
Phase 1 (backend data model, routes, signaling) - done. A mailbox owner creates a VideoMeeting through
/api/mail/video-meetings - private (one join link minted per invitee) or public (one shared link) - and an
anonymous participant joins through GET .../join/:token, which hands back the meeting's public details, an ICE
server list (public STUN always, TURN when configured) and a short-lived guest token already authorized to
exchange WebRTC signaling on that one meeting's channel over the server's existing /push route. No new realtime
infrastructure and no UI yet - see .claude/NOTES.md's dated entry for the full design.
Development
Same layout and tooling as this project's other plugins (@rapidmx/booking-plugin, @rapidmx/mapi-plugin,
@rapidmx/autodiscover-plugin): yarn install, yarn test:prod, yarn build. @rapidmx/restapi and
@rapidmx/web-client are portal-linked in package.json's resolutions during local development against a
matching working tree of those repos.
License
MPL-2.0 - see LICENSE.
