Ultimate Lists
Keyboard-first shared task list, synced live into your room
About this app
A tag-based task list every member of the room edits together. Navigation and editing are keyboard-first — move, tag and delete tasks without touching the mouse — and the list is shared, not per-user: what you type appears for everyone in the room.
The list is a Yjs CRDT document synced through the Matrix
room itself. A room state event (de.minagawa.ultimate_lists.snapshot,
chunked) is the source of truth so new joiners load the full history; timeline
events (de.minagawa.ultimate_lists.update) carry incremental edits; and when
a MatrixRTC session is up, live edits travel over its data channel for
sub-second sync without timeline spam. There is no server component beyond
your homeserver and a static web host.
The list is shared with the whole room and has no per-item permissions. Anyone who can send the update event can rewrite or delete all of it — a CRDT has no notion of ownership, so room power levels are the only access control. In an encrypted room the incremental updates are encrypted by your client, but the snapshot is room state, which Matrix never encrypts: it sits in cleartext on the homeserver and federates in cleartext. The widget shows a permanent warning naming the homeserver. Don't put sensitive data in a shared list.
Add to a room
Paste this into any room you may configure — Element and most clients understand /addwidget:
/addwidget https://ultimate-lists.marcade.datanauten.de/
Marcade does not build or host this app — the URL is the deployment run by codedust, and it can change under you at any time.
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 - Access the timeline of room “<own room>”
org.matrix.msc2762.timeline:<own room> - Send room events of type “de.minagawa.ultimate_lists.update”
org.matrix.msc2762.send.event:de.minagawa.ultimate_lists.update - Read room events of type “de.minagawa.ultimate_lists.update”
org.matrix.msc2762.receive.event:de.minagawa.ultimate_lists.update - Send room state events of type “de.minagawa.ultimate_lists.snapshot”
org.matrix.msc2762.send.state_event:de.minagawa.ultimate_lists.snapshot - Read room state events of type “de.minagawa.ultimate_lists.snapshot”
org.matrix.msc2762.receive.state_event:de.minagawa.ultimate_lists.snapshot - Read room state events of type “m.room.encryption”
org.matrix.msc2762.receive.state_event:m.room.encryption
Information
- Version
- 0.1.0
- Section
- Unverified — Listed only. Marcade builds and hosts nothing; the link goes to the author’s own deployment.
- License
- AGPL-3.0-or-later
- Author
- codedust
- Source code
- https://codeberg.org/codedust/ultimate-lists
- State event types
de.minagawa.ultimate_lists.snapshot- Encrypted rooms
- Not declared
- Widget ID
de.minagawa.ultimate-lists