webxdc apps
Play webxdc apps (polls, checklists, games) together in a Matrix room
Screenshots
About this app
Brings webxdc apps into Matrix rooms. A room admin adds
an app from the webxdc.org catalog (about 170 community apps: polls,
checklists, chess, editors, Excalidraw, games), from an .xdc file or from a
link, and everyone in the room can start it. Any app can be pinned as its own
room widget. The same .xdc files run in Delta Chat and other messengers.
Each app runs in an isolated frame on a second origin
(webxdc-run.widgets.marcade.store) and has no internet access. A service
worker serves the app's files and a strict content security policy blocks
every request to other sites. External links and messages an app wants to
post to the room need your confirmation. What people do in an app travels as
timeline events (de.datanauten.webxdc.update), which are end-to-end
encrypted in encrypted rooms. Each device keeps a local copy of every app's
history. Someone who joins later can ask members who have the app open for
that history (de.datanauten.webxdc.sync).
Not encrypted: the list of apps, their names and the .xdc files. They
are room state and media, which are cleartext on the homeserver, as for every
widget. History has limits: a widget can read back only recent room
events, so a latecomer sees older updates only if someone who has them opens
the app. "Offline" is enforced by the browser's content security policy,
which cannot block WebRTC or DNS prefetch; the widget removes WebRTC from apps
as a best effort. All apps share the runner origin, so they are kept apart by
name, not by the browser. The catalog's apps are community-made and not
reviewed by Marcade. Element X (mobile) does not run widgets.
Add to a room
Paste this into any room you may configure — Element and most clients understand /addwidget:
/addwidget https://webxdc.widgets.marcade.store/0.1.1/
The first time it opens, the widget adds $matrix_user_id to its own URL and reloads (apps need to know who is who). That needs the right to change widgets, which whoever added it has.
Rooms should pin the versioned URL above. https://webxdc.widgets.marcade.store/latest/ always points at the newest release.
Name and icon in Element
/addwidget can carry only the URL: Element lists the app as “Custom” without an icon. Add the Marcade Store once per room and it gives every Marcade app pasted in there its name and icon, and tells you when an update is out.
/addwidget https://marcade.store/apps/de.minagawa.marcade-store/0.1.1/
Permissions
Capabilities this widget may request. The Marcade Player asks for your consent before granting any of them.
- Requires running inside a Matrix client
io.element.requires_client - Send room state events of type “de.datanauten.webxdc.instance”
org.matrix.msc2762.send.state_event:de.datanauten.webxdc.instance - Read room state events of type “de.datanauten.webxdc.instance”
org.matrix.msc2762.receive.state_event:de.datanauten.webxdc.instance - Send room state events of type “im.vector.modular.widgets”
org.matrix.msc2762.send.state_event:im.vector.modular.widgets - Read room state events of type “im.vector.modular.widgets”
org.matrix.msc2762.receive.state_event:im.vector.modular.widgets - Send room events of type “de.datanauten.webxdc.update”
org.matrix.msc2762.send.event:de.datanauten.webxdc.update - Read room events of type “de.datanauten.webxdc.update”
org.matrix.msc2762.receive.event:de.datanauten.webxdc.update - Send room events of type “de.datanauten.webxdc.sync”
org.matrix.msc2762.send.event:de.datanauten.webxdc.sync - Read room events of type “de.datanauten.webxdc.sync”
org.matrix.msc2762.receive.event:de.datanauten.webxdc.sync - Upload files through the client
org.matrix.msc4039.upload_file - Download files and media through the client (e.g. images, avatars)
org.matrix.msc4039.download_file - Send messages to the room (type m.notice)
org.matrix.msc2762.send.event:m.room.message#m.notice - Send messages to the room (type m.text)
org.matrix.msc2762.send.event:m.room.message#m.text - Send messages to the room (type m.file)
org.matrix.msc2762.send.event:m.room.message#m.file - Send messages to the room (type m.image)
org.matrix.msc2762.send.event:m.room.message#m.image - Read room state events of type “m.room.encryption”
org.matrix.msc2762.receive.state_event:m.room.encryption - Read room state events of type “m.room.member”
org.matrix.msc2762.receive.state_event:m.room.member - Send to-device messages of type “de.datanauten.webxdc.realtime”
org.matrix.msc3819.send.to_device:de.datanauten.webxdc.realtime - Receive to-device messages of type “de.datanauten.webxdc.realtime”
org.matrix.msc3819.receive.to_device:de.datanauten.webxdc.realtime
What's new in 0.1.1
All 167 apps of the webxdc.org catalog now start. Security: apps could reach the internet over WebRTC from inside frames and learn your IP address; a guard now removes WebRTC from every app page and frame. Apps without webxdc.js no longer hang on "Starting…". Fixed: 3D Dice Box, Quake III multiplayer, Code Playground. An .xdc an app makes becomes a room app; pictures arrive as pictures; app messages with links get an Open button.
Information
- Version
- 0.1.1
- Section
- Community — Built by Marcade CI from a pinned commit; the capability list has been audited.
- License
- AGPL-3.0-or-later
- Author
- Yan Minagawa (datanauten)
- Source code
- https://code.fe80.eu/dtn10/webxdc-widget
- Issue tracker
- https://code.fe80.eu/dtn10/webxdc-widget/-/issues
- State event types
de.datanauten.webxdc.instance,im.vector.modular.widgets- Encrypted rooms
- Not declared
- Widget ID
de.datanauten.webxdc