Skip to content

MSC4429: Profile Updates for Legacy Sync#4429

Open
anoadragon453 wants to merge 7 commits into
mainfrom
anoa/legacy_sync_profile_updates
Open

MSC4429: Profile Updates for Legacy Sync#4429
anoadragon453 wants to merge 7 commits into
mainfrom
anoa/legacy_sync_profile_updates

Conversation

@anoadragon453

@anoadragon453 anoadragon453 commented Mar 5, 2026

Copy link
Copy Markdown
Member

Rendered

Conflict of Interest declaration: I am employed by Element. This MSC was written as part of my work on the Element Backend Team to land a "user status" feature (based on top of custom profiles, see MSC4426) for a customer.

@anoadragon453 anoadragon453 changed the title MSCXXXX: Profile Updates for Legacy Sync MSC4429: Profile Updates for Legacy Sync Mar 5, 2026
@anoadragon453 anoadragon453 force-pushed the anoa/legacy_sync_profile_updates branch from 82ac3a7 to 3b205f6 Compare March 5, 2026 18:53
@anoadragon453 anoadragon453 marked this pull request as ready for review March 5, 2026 18:54
@anoadragon453 anoadragon453 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 Mar 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 (using)
  • Server (sending)

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.

Comment thread proposals/4429-legacy-sync-profile-updates.md Outdated
spantaleev pushed a commit to spantaleev/matrix-docker-ansible-deploy that referenced this pull request May 29, 2026
Introduces the `matrix_synapse_experimental_features_msc4429_enabled`
variable (disabled by default), allowing Synapse to notify clients
using the legacy /sync endpoint of profile changes for other users.

See <matrix-org/matrix-spec-proposals#4429>

Signed-off-by: Norman Ziegner <n.ziegner@hzdr.de>
Comment thread proposals/4429-legacy-sync-profile-updates.md Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Adds a new MSC proposing how to deliver custom profile field updates over legacy /sync (similar in spirit to MSC4262 for Sliding Sync), including opt-in filtering and guidance for initial population/lazy-loading.

Changes:

  • Proposes a new top-level users object in /sync carrying per-user profile_updates.
  • Introduces a new filter field (profile_fields.ids) to opt-in to specific profile field IDs.
  • Documents expected server/client behavior (initial sync behavior, lazy-loading interactions, implementation notes).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread proposals/4429-legacy-sync-profile-updates.md Outdated
Comment thread proposals/4429-legacy-sync-profile-updates.md
Comment thread proposals/4429-legacy-sync-profile-updates.md
Comment thread proposals/4429-legacy-sync-profile-updates.md
Comment thread proposals/4429-legacy-sync-profile-updates.md Outdated
Comment thread proposals/4429-legacy-sync-profile-updates.md
Comment on lines +71 to +73
Each entry in `profile_updates` represents a profile field and any changes to
its value. If its value is `null`, the field is treated as having been removed
from the user's profile (rather than literally being set to `null`).

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

@zecakeh pointed out on the equivalent Sliding Sync MSC that:

From the definition of PUT /profile/{userId}/{keyName}:

Servers MAY reject null values. Servers that accept null values SHOULD store them rather than treating null as a deletion request. Clients that want to delete a field, including its key and value, SHOULD use the DELETE endpoint instead.

So actually null is a valid value, and we can't use it as a signal to clients that a field has been deleted, unfortunately.

Instead, we'll probably want a removed_profile_fields array or similar:

{
  "users": {
    "@user:example.org": {
      "profile_updates": {
          "m.status": {
	        "text": "Swimming in the Great Lakes!",
	        "emoji": "🏊️"
	      },
      },
      "removed_profile_fields": ["m.other_field"]
    }
  }
}

anoadragon453 and others added 2 commits July 2, 2026 11:21
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
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.

6 participants