Screenshots
About this app
Pins one main document to the room so everyone who opens the room sees the same document and edits it together while chatting. A title bar shows who pinned it, "Anderes Dokument wählen" and "Anheftung lösen" — unpinning never deletes the document. Unofficial technology demonstration of the openDesk × Matrix widgets integration concept — not a ZenDiS or openDesk product.
What lands where (demo mode, what Marcade hosts). Without openDesk the widget brings a small
collaborative block editor (headings, paragraphs, bulleted and numbered lists, bold, italic, links). Everything is room
state: the pointer de.opendesk.collabora.pinned (document id, name, who pinned it and when) and
de.opendesk.collabora.demo_doc with one event per document (name, creation date) and one event
per paragraph block (format, text, order key). Room state is never encrypted, even in an encrypted
room, and is replicated to every server in the room — the document text is visible to every server
admin, so do not write anything confidential in demo mode. Bold, italic and links are a small
Markdown subset inside that text; undo and redo work locally. Concurrent edits are merged: two
people editing different paragraphs never interfere, and changes to different characters of the
same paragraph are merged character by character; only when two people change the same words
differently at the same moment does the widget ask ("take their version" / "keep mine"). Edits are sent debounced (about one second) to stay within the homeserver's
rate limit. Editing needs the power level for de.opendesk.collabora.demo_doc and pinning the one
for de.opendesk.collabora.pinned (state events default to moderators; the widget explains a
missing level instead of failing). "Anordnung" places the widget above the chat or maximised for
everyone by writing Element's room layout (io.element.widgets.layout).
Gateway mode (openDesk). With an opendesk-widget-gateway URL in the widget URL fragment the
widget embeds the real Collabora editor (via Nextcloud richdocuments, with the other editors'
cursors) in a nested frame, picks files from the room's Nextcloud folder (de.opendesk.nextcloud,
set up by Raum-Ablage) or creates new Writer, Calc or Impress documents there (OpenDocument or
Microsoft format, empty or from one of your Nextcloud templates). On a phone it leads with "In neuem
Tab öffnen", because the embedded editor is cramped on small screens. Room state then carries
only the pointer (Nextcloud file id, path, name, MIME type) — no content. Write rights come from
Nextcloud; readers get read-only mode. If Nextcloud or Collabora refuse to be framed
(frame-ancestors), the widget says so and offers "In neuem Tab öffnen". The client may ask you to
share your identity (OpenID) with the gateway.
Add to a room
Paste this into any room you may configure — Element and most clients understand /addwidget:
/addwidget https://marcade.store/apps/de.minagawa.opendesk.raum-dokument/0.1.0/
Works on its own in demo mode (a small block editor whose text lives in unencrypted room state). Optional: add `#gateway=https://…` (an opendesk-widget-gateway) to embed the real Collabora editor for files in the room's Nextcloud folder; Nextcloud and Collabora must allow the widget origin in `frame-ancestors`.
Rooms should pin the versioned URL above. https://marcade.store/apps/de.minagawa.opendesk.raum-dokument/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.4/
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 - Read room state events of type “de.opendesk.collabora.pinned”
org.matrix.msc2762.receive.state_event:de.opendesk.collabora.pinned - Send room state events of type “de.opendesk.collabora.pinned”
org.matrix.msc2762.send.state_event:de.opendesk.collabora.pinned - Read room state events of type “de.opendesk.nextcloud”
org.matrix.msc2762.receive.state_event:de.opendesk.nextcloud - Read room state events of type “de.opendesk.collabora.demo_doc”
org.matrix.msc2762.receive.state_event:de.opendesk.collabora.demo_doc - Send room state events of type “de.opendesk.collabora.demo_doc”
org.matrix.msc2762.send.state_event:de.opendesk.collabora.demo_doc - Read room state events of type “m.room.member”
org.matrix.msc2762.receive.state_event:m.room.member - Read room state events of type “m.room.power_levels”
org.matrix.msc2762.receive.state_event:m.room.power_levels - Read room state events of type “io.element.widgets.layout”
org.matrix.msc2762.receive.state_event:io.element.widgets.layout - Send room state events of type “io.element.widgets.layout”
org.matrix.msc2762.send.state_event:io.element.widgets.layout - Read room state events of type “m.room.create”
org.matrix.msc2762.receive.state_event:m.room.create
What's new in 0.1.0
First release: one pinned main document per room. Demo mode: collaborative block editor in room state, edits merged character by character, bold/italic/links, undo/redo. Gateway mode: Collabora (Nextcloud richdocuments) in a nested frame with new-tab fallback, room folder picker, new ODF or Microsoft Office documents (optionally from a template) via the gateway; phones lead with a new tab. "Anordnung": above the chat or maximised. Pin, unpin, choose another. German and English.
Information
- Version
- 0.1.0
- Section
- Demo — Technology demonstrations built by Marcade to show what a widget can do. Not for real use — nothing is submitted anywhere.
- License
- Apache-2.0
- Author
- Yan Minagawa
- State event types
de.opendesk.collabora.pinned,de.opendesk.collabora.demo_doc,de.opendesk.nextcloud,io.element.widgets.layout- Encrypted rooms
- Supported
- Widget ID
de.minagawa.opendesk.raum-dokument