Matrix: a widget in a room is nothing here #191

Closed
opened 2026-09-11 22:26:02 -04:00 by Salastil · 1 comment
Owner

No widget support at all - nothing reads im.vector.modular.widgets or the m.widget
state events, and there is no integration manager.

A room that keeps a whiteboard, an etherpad, a jitsi or a custom dashboard pinned as a
widget shows none of it in moho. The room looks emptier here than it is, and the state
events are not even surfaced as "there is a thing here you cannot open".

No widget support at all - nothing reads `im.vector.modular.widgets` or the `m.widget` state events, and there is no integration manager. A room that keeps a whiteboard, an etherpad, a jitsi or a custom dashboard pinned as a widget shows none of it in moho. The room looks emptier here than it is, and the state events are not even surfaced as "there is a thing here you cannot open".
Salastil added the featurelow priority labels 2026-09-11 22:26:02 -04:00
Author
Owner

Finished in nobilis bb33747 and moho edac6b2.

Both spellings are read - the state event has an old name and a new one, and rooms carry both - and a room's widgets are listed beside its pins, which is the same kind of fact: something the room keeps rather than something said in it. No button appears where there is nothing.

Listed rather than drawn, deliberately. A widget is somebody else's web page, and this client's posture is that content from a room never reaches a renderer that can navigate. Each row opens in a browser instead.

Three details worth recording, each quiet when wrong:

  • A widget is taken down by replacing its content with {}, since state events cannot be deleted. Read the other way, a removed widget stays on the wall for ever.
  • The url is templated. Element fills $matrix_user_id and friends before opening one, so a link handed over with the variable still in it 404s. The ones this client can fill are filled; a widget needing a scalar token from an integration manager there is none of says so, rather than offering a broken link.
  • The list is kept by widget id and returned in a stable order, so it does not reshuffle every time a room's state is re-read.

Not verified against a live widget. None of the three rooms on @salastil:poa.st carries one — I checked the room state of all three — and putting a widget into a room with other people in it to watch it arrive is not a test worth running. Verified against Element's event shape and through the whole path: read, kept by id, replaced in place, removed on empty content, ordered.

Finished in nobilis [`bb33747`](https://git.salastil.com/Salastil/nobilis/commit/bb33747) and moho [`edac6b2`](https://git.salastil.com/Salastil/moho/commit/edac6b2). Both spellings are read - the state event has an old name and a new one, and rooms carry both - and a room's widgets are listed beside its pins, which is the same kind of fact: something the room keeps rather than something said in it. No button appears where there is nothing. **Listed rather than drawn, deliberately.** A widget is somebody else's web page, and this client's posture is that content from a room never reaches a renderer that can navigate. Each row opens in a browser instead. Three details worth recording, each quiet when wrong: - A widget is taken down by replacing its content with `{}`, since state events cannot be deleted. Read the other way, a removed widget stays on the wall for ever. - The url is templated. Element fills `$matrix_user_id` and friends before opening one, so a link handed over with the variable still in it 404s. The ones this client can fill are filled; a widget needing a scalar token from an integration manager there is none of says so, rather than offering a broken link. - The list is kept by widget id and returned in a stable order, so it does not reshuffle every time a room's state is re-read. **Not verified against a live widget.** None of the three rooms on `@salastil:poa.st` carries one — I checked the room state of all three — and putting a widget into a room with other people in it to watch it arrive is not a test worth running. Verified against Element's event shape and through the whole path: read, kept by id, replaced in place, removed on empty content, ordered.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Salastil/moho#191