Skip to content

MSC4489: Per-room contact state event#4489

Open
ll-SKY-ll wants to merge 3 commits into
matrix-org:mainfrom
ll-SKY-ll:ll-SKY-ll-patch-1
Open

MSC4489: Per-room contact state event#4489
ll-SKY-ll wants to merge 3 commits into
matrix-org:mainfrom
ll-SKY-ll:ll-SKY-ll-patch-1

Conversation

@ll-SKY-ll

@ll-SKY-ll ll-SKY-ll commented Jun 5, 2026

Copy link
Copy Markdown

Signed-off-by: Sky sky@codestorm.net

rendered

@turt2live turt2live changed the title per-room contact state event MSC4489: Per-room contact state event Jun 5, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implementation requirements:

  • Client (setting)
  • Client (reading/using)

@turt2live turt2live added proposal A matrix spec change proposal. Process state. A-Client Server Client-Server API kind:feature MSC for not-core and not-maintenance stuff needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. labels Jun 5, 2026

@turt2live turt2live left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Early partial review of MSC

Comment thread proposals/4489-per-room_contact_state_event.md Outdated
state event — which is independently useful to existing members and to bots
that are in the room — is not blocked on federation/client changes.

## Alternatives

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Specifically for appeals, the Reporting v2 thought is currently #4468 fwiw

Co-authored-by: Travis Ralston <travpc@gmail.com>
`""` as its state key; a room has at most one such event. It is ordinary room
state and requires no new room version.

Its `content` reuses the `contacts` and `support_page` fields, with the same

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a room admin, I would be worried about these values becoming stale and needing to roll out new values to all of my rooms whenever these change. I wonder about the potential merits of a "support_via": "matrix.org" field that would "redirect" users to the /.well-known/matrix/support of a given server name?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i dont understand the issue. In that case you might wish to just populate the support_page and nothing else

{
"matrix_id": "@alice:example.org",
"email_address": "security@example.org",
"role": "m.role.security"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What would a security contact on a room actually be responsible for?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The examples were made based on the currently available options in the m.role.* namespace, they don't necessarily all have a real world use case today, though that doesnt mean there wont be someone finding a use for it eventually. This proposal also hopes to inspire new proposals to expand the options available to the m.role.* namespace like MSC4121 already does.

@ll-SKY-ll ll-SKY-ll marked this pull request as ready for review June 7, 2026 09:57

### Event definition

A new state event type `m.room.contact` is defined. It uses the empty string

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Low temperature: Since this is meant to be complementary to .well-known/matrix/support, maybe it could be m.room.support to keep the terminology on par?


The following constraints apply:

- At least one of `contacts` or `support_page` SHOULD be present.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This would allow sending the event with neither which feels slightly pointless. Maybe using the event itself is a MAY but if you use it, you MUST fill in either contacts or support_page. That would also match the rules for /.well-known/matrix/support.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

State events cannot be deleted, so if a room desires to no longer list contacts, an empty object is the best manner of doing so.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, true. Maybe this could be clarified in the proposal.

[`/.well-known/matrix/support`](https://spec.matrix.org/latest/client-server-api/#getwell-knownmatrixsupport);
this proposal does not define its own roles. The set is open: consumers MUST
gracefully handle role values they do not recognise (for example, by displaying
the contact with no role label), and new `m.role.*` values defined by other

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe this should be generalised to unknown roles that follow the common namespaced identifier syntax (as in /.well-known/matrix/support). MSC implementations and custom roles won't use the m. prefix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-Client Server Client-Server API kind:feature MSC for not-core and not-maintenance stuff needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. proposal A matrix spec change proposal. Process state.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants