secondlife / secondlife/viewer
`object.update` delta protocol is specified but not implemented
@Rider-Linden is already working on this.
Since Aug 25, 2026.
- Dominant language
- C++
- Stars
- 299
- Forks
- 146
- Avg merge
- 1d 9h
- Merged PRs (30d)
- 88
Description
Repo: viewer
Labels: enhancement, protocol, performance
Summary
The changes.inventory delta sub-protocol and changes.linked_objects.added / .removed are
fully specified but never emitted. All updates are sent as complete replacements.
Evidence
Never emitted:
changes.inventoryin its entirety —added,removed,modified,content_changed,
running_changed. A repository-wide search forcontent_changedandrunning_changed
returns no hits.changes.linked_objects.addedandchanges.linked_objects.removed.
Actually emitted — exactly five shapes:
| Trigger | Payload |
|---|---|
| Root prim inventory changed | { object_id, inventory: [...] } (full array) |
| Child prim inventory changed | { object_id, changes.linked_objects.modified: [{ link_id, inventory: [...] }] } (full array) |
| Root prim name/description changed | { object_id, object_name?, object_description? } |
| Child prim name/description changed | { object_id, changes.linked_objects.modified: [{ link_id, link_name?, link_description? }] } |
| Linkset membership changed | { object_id, linked_objects: [...] } (full replacement) |
References: llpublishedobjectmgr.cpp — reconcileInventoryChanged (~990),
applyPropertyChange (~1042), buildLinksetUpdateLLSD (~820).
Impact
Every inventory change re-sends the full inventory for the affected prim, and every linkset
change re-sends every child prim. For large linksets this is significantly more traffic and
client-side work than necessary. Clients also cannot tell what changed without diffing.
Proposed fix
Implement the documented delta protocol.
Notes
changes.linked_objects.modifiedis emitted, but carries full inventory arrays rather
than deltas.- The plugin has a handler for
changes.inventory
(src/vscode/objectcontentservice.ts~457–470) that is currently unreachable. It should be
kept — it is the only path that fires_onDidChangeContentfor cache invalidation. - The specification is marked "not implemented" in
Message_Interfaces.mdpending this work.
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.
Assessment
This issue has not been assessed yet.