matrix-org / matrix-org/matrix-spec
Thoughts on profile rooms
Nobody has claimed this yet.
- Dominant language
- HTML
- Stars
- 330
- Forks
- 150
- Avg merge
- 2h 21m
- Merged PRs (30d)
- 3
Description
In an effort to solve extensible profiles (#489) and also not maintain a bunch of ways to synchronize data to clients, "profiles as rooms" (or just "profile rooms") could be used. This takes the form of a room where the user's profile lives and any other data they might want to advertise, such as an m.bio or m.website.
Each user would have 1 room for their profile, and they would be the only allowed member. The room's state would be the various parts of the user's profile, such as the name being the user's display name. Similarly, custom state events can be used to define stuff like social media links, bios, locations, etc.
In order to have this work effectively though, there's some concerns that need to be addressed:
- Peeking over federation (#913) would have to work
- Can we solve this by re-using the existing
/sendroute? It would be a shame to have peeking be appended as another way to sync data between servers. Would need some form of subscribe/unsubscribe though.
- Can we solve this by re-using the existing
- Peeking in clients could be improved. Currently clients have to use
/initialSyncwhich is deprecated. We should re-use/syncwhere possible to avoid having billions of people in profile rooms and to avoid a billion initial syncs flying around. - How do per-room profiles work?
- How do we safely ensure that people not in those rooms can't see the user's per-room profile for that room? There's a valid case for someone being in #company and #afterdark, but not necessarily wanting members of #company to know that they like to be called something different in #afterdark.
- Do we need a custom room version? Stuff like bans, invites, ACLs, etc might not make sense in a profile room.
- How do we indicate that a room is a profile room? Do we need to prove that the room is the canonical place for the user's profile?
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the related issues #489 and #913 and the existing /send, /initialSync, and /sync behavior. Investigate how profile rooms could address federation and client peeking, per-room visibility, room versions, and canonical ownership. Done would require resolved protocol designs for these concerns, including subscription behavior and profile-room identification.
Written by the indexing model from the issue text.
Assessment
- Domain
- distributed-systems
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 20/100