# Client-side room discoverability: federation edition ## Solution 1: Pushing newly published rooms to multiple servers 👍️ * Straightforward to implement 👎️ * Manual process to add existing rooms to a new server * (moderation) Difficult to figure out for sure which user is doing the remote publication ## Solution 2: Server-side aggregation from multiple servers when querying the room directory 👍️ * Can be flexible about which homeservers to request the directory from * Homeservers can have an admin-defined list of servers to query 👎️ * Blocks room directory requests on federation traffic * Can be improved by caching (unclear when to clear/refresh a server's cache) * Pagination might be complicated(?) * (moderation) Impossible to know which user published a room ## Solution 3: Room directory as room 👍️ * Re-uses existing pub-sub primitives * Comes with federation for free * Standard permission management 👎️ * Unclear how to discover a server's room directory room (reserved alias?) * Possible complexity around user management: * who's the room's creator/admin * if the room is created automatically how does one get perms * how does one server subscribe to another's directory without all of their users joining (which would cause increased load because state res)? * peeking? * server user? * pick the first user that asked for that server's directory and join them forever? (deactivation would need special handling) ## Solution 4: State event dictating whether a room should be listed 👍️ * All servers in the room can pick up the information * Clearer to users/clients who can publish 👎️ * Local moderation rules can cause the event and the state to get out of sync (eg a server that didn't emit the event decides the room should not be listed) * Large amount of spec and implementation work as this would fully replace the existing `/directory/list` APIs * Unclear how to deal with existing published rooms * Unclear how to deal with published rooms in which all admins/mods leave * A server can list a room only if it's in it