WebXDC packages (.xdc) are small collaborative web apps that run inside a meeting, sandboxed with no internet access. They talk only through the host window.webxdc API. Bedrud’s support is experimental.
Prerequisites (server)
WebXDC cannot run on IP-only installs. The operator must:
- Set a real
server.domain - Enable in config:
webxdc:
enabled: true
baseDomain: "wx.example.com" # instances: webxdc-<id>.wx.example.com- DNS:
*.wx.example.com(or yourbaseDomain) must point to the same IP as the main Bedrud site - TLS must cover
*.{baseDomain}(not only the main hostname)
For self-signed installs, regenerate the cert after enabling WebXDC so SANs include the wildcard:
sudo bedrud certificate regenerate
sudo systemctl restart livekit bedrudInstaller prompts for this when a domain is set. See self-host configuration for details.
Enable in the web app (user)
- Open Settings → Experimental
- Turn on WebXDC mini-apps
- If the switch is disabled, the server has not enabled WebXDC (or domain is missing)
Both server config and this toggle are required.
App gallery (admin)
Optional curated catalog. Configure under Admin → Settings → WebXDC:
- Enable app gallery
- Catalog source — local, remote, or both
- Remote catalog URL — HTTPS catalog JSON or mirror base URL (overrides
webxdc.gallery.remoteCatalogURLin config) - Allow remote download — server may fetch
.xdcpackages listed in the catalog (outbound from the server only)
Gallery is separate from room upload and is off by default.
Use in a meeting
- Join a meeting
- Open Room info
- Under Apps (experimental):
- Upload a
.xdcfile (room owner/moderator by default) - Start a package
- Upload a
- The mini-app runs in a sandboxed iframe on
webxdc-<id>.{baseDomain}
Label: Untrusted mini-app · experimental
Meeting end cleanup
Room-scoped packages, instances, and status logs are temporary. When the room is cleaned up / deleted, WebXDC data for that room is removed. Global gallery apps (if enabled later) are separate.
Security (short)
- Mini-apps have no network (
connect-src 'none', sandbox, separate origin) - Host provides
webxdc.js(never trust a copy inside the ZIP) - Status updates go through Bedrud (serial log + optional LiveKit fan-out)