Discover button: room directory with expandable room details #48
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
nether/vommet#48
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
A Discover button in the space sidebar, right under the
+(add space) button, that opens a room directory like Element's "Explore rooms".Upstream check (2026-10-05): commetchat/commet has no issue, PR or branch for a room directory. The closest is #297 (general UI ideas), which doesn't cover discovery. Today Commet can only join a room by pasting an alias (
JoinRoomView).List (Element-style)
+that opens an Explore page (desktop and mobile layouts).filter.generic_search_term) and infinite scroll (since/next_batch).filter.room_types([null]/["m.space"]). Tuwunel supports this.Typing a name that isn't in the list offers "Browse " right away, and "Save" keeps it. The popover only shows a few rows per section and the search narrows the rest, so a long saved list never crowds the page (unlike Element's growing dropdown). Browsing goes through your own homeserver (
server=). Each suggested default has to pass the federation check before it ships.allow_public_rooms_over_federation): "example.org doesn't share its room directory with other servers."Exact error codes per homeserver (Synapse, Tuwunel) are to be confirmed by testing; the mapping lives in one place and is unit-tested.
Expand-in-place details
Clicking a row smoothly expands it downward (the list stays in place); clicking again collapses it back to one row. Only one row is open at a time.
The expanded part shows:
page.codeberg.everypizza.room.banner)/hierarchy)Details load lazily, for that one room only, when the row opens, so the list itself stays a single cheap
/publicRoomsquery.Open question: can we read a banner from a room we haven't joined? This needs testing on Tuwunel. If we can't, the row just shows no banner.
v1 keeps a source-agnostic
DirectoryEntryand aDirectorySourceinterface, so a full card/showcase view can still be added later.Testing
ci/integration-testsharness, local Tuwunel): publish a room and a space (with a banner) to the directory via the API, open Discover, filter, search, expand the space and check its children, join, and check the room shows up in the room list.Branch:
feat/discover.Probe results (2026-10-05, nether.autos fixture, Tuwunel 1.8.x)
Two fresh users: A published a public space (world-readable, with a banner and one child) and a public room (shared history, with a banner). B is not a member of either.
Own directory, as B: paging,
room_types["m.space"]/[null]andgeneric_search_termall filter on the server correctly. Unauthenticated/publicRoomsalso returns 200.Expanded-row details for rooms B hasn't joined:
/state/<type>//v1/room_summary/v1/hierarchy(spaces)So: summary + hierarchy always work, but the banner is best-effort. We get it only for world-readable rooms our homeserver is already in. Neither summary nor hierarchy carries it (
children_stateis onlym.space.child). The row design has to look finished without a banner.Remote directories (
?server=, through our Tuwunel):M_CONNECTION_FAILED: kde.org, envs.net, nether.im (itsallow_public_room_directory_over_federation = false) andnonexistent.invalid⇒ Tuwunel returns the same error for "doesn't share its directory" and "doesn't exist", so the client has to tell them apart itself. On a 502, check whether the server is a live Matrix server (
.well-known/matrix/server, or federation/versionat the resolved host): if it is, say "doesn't share its room directory"; otherwise "couldn't reach". Synapse may answer differently; to be checked with the Synapse integration fixture, which is also where the "your own server won't show you its directory" case (403 from your own homeserver) gets tested.Suggested defaults (verified): matrix.org, mozilla.org, gnome.org, fedora.im, tchncs.de. Not kde.org or envs.net. nether.im only once it shares its directory over federation (operator decision: flip the Tuwunel setting).
Design update (operator, 2026-10-05)
?server=X).via: [X], so it works across servers.m.federate: false, or X not federating with the joining server). The directory listing doesn't reveal this, so it shows up as a join error. We catch it and suggest "Join as @you:x" when you have an account there.