[Epic] Standardise viewer <-> LSL traffic: SLBridge protocol v1 (versioned envelope, type registry, capabilities, one rule set) #1213

Open
opened 2026-10-28 16:42:53 +00:00 by sky_line · 0 comments
Owner

More features now talk between the viewer and in-world scripts: consent poses, script info (#425), Game Control, and the GunMetal-DX ports (#1205, especially CombatFX #1211, whose combat events add about 400 lines to the helper). Today SLBridge is a set of conventions, not a spec. Make it the one way Slipstream talks to scripts, as a versioned, documented protocol.

Current state

SLBridge (indra/newview/slbridge.{h,cpp}, app_settings/slbridge/slipstream_helper.lsl):

  • an invisible worn "#Slipstream Helper" HUD;
  • viewer -> helper: owner chat on a private channel handed over in a "hello" handshake;
  • helper -> viewer: llOwnerSay("#slb:<type>|..."), swallowed by the viewer;
  • public pose / consent / confirm channels.

Its rules are good and stay: identity from the sim, never speaks first, token-bucket rate limits, only known line shapes forwarded, quiet without viewer pings.

Gaps:

  • message types are ad-hoc strings;
  • no per-type version or schema;
  • the hello reports only a script version, with no capability list;
  • no written spec for script authors or forks.

Other paths, which stay separate:

  • RLV/RLVa @ commands (community standard);
  • LL's native protocol (Game Control GameControlData #1202 / #1203: use native whenever LL provides it, never duplicate it in the bridge);
  • one-off conventions: speaker tags on channel 8920, marked-prim / texture-code markers (#720, #1024).

Design (v1)

  1. One envelope both ways: #slb:<type>/<ver>|<fields>. A type registry gives each type: direction, sender (viewer / helper / other avatar via public channel), fields, rate budget and consent requirement.
  2. Capability negotiation: the hello carries the helper's supported <type>/<ver> list; the viewer turns features on to match, so different versions and forks degrade cleanly.
  3. One rule set for every type:
    • identity from the sim;
    • consent for anything affecting another avatar;
    • per-type budgets;
    • no server-side inventory changes without an explicit user action;
    • nothing sent without the feature's opt-in (e.g. CombatFX).
  4. A small, deliberate third-party surface for other people's HUDs: a documented public channel, owner-only by default, per-object opt-in, never exposing what the user hasn't granted.
  5. Spec in doc/SLBRIDGE_PROTOCOL.md, versioned, readable by script authors and forks.

Supporting tickets

Listed below; each references this epic.

More features now talk between the viewer and in-world scripts: consent poses, script info (#425), Game Control, and the GunMetal-DX ports (#1205, especially CombatFX #1211, whose combat events add about 400 lines to the helper). Today SLBridge is a set of conventions, not a spec. Make it the one way Slipstream talks to scripts, as a versioned, documented protocol. ## Current state **SLBridge** (`indra/newview/slbridge.{h,cpp}`, `app_settings/slbridge/slipstream_helper.lsl`): - an invisible worn "#Slipstream Helper" HUD; - viewer -> helper: owner chat on a private channel handed over in a "hello" handshake; - helper -> viewer: `llOwnerSay("#slb:<type>|...")`, swallowed by the viewer; - public pose / consent / confirm channels. Its rules are good and stay: identity from the sim, never speaks first, token-bucket rate limits, only known line shapes forwarded, quiet without viewer pings. **Gaps:** - message types are ad-hoc strings; - no per-type version or schema; - the hello reports only a script version, with no capability list; - no written spec for script authors or forks. **Other paths, which stay separate:** - RLV/RLVa `@` commands (community standard); - LL's native protocol (Game Control `GameControlData` #1202 / #1203: use native whenever LL provides it, never duplicate it in the bridge); - one-off conventions: speaker tags on channel 8920, marked-prim / texture-code markers (#720, #1024). ## Design (v1) 1. **One envelope** both ways: `#slb:<type>/<ver>|<fields>`. A **type registry** gives each type: direction, sender (viewer / helper / other avatar via public channel), fields, rate budget and consent requirement. 2. **Capability negotiation:** the hello carries the helper's supported `<type>/<ver>` list; the viewer turns features on to match, so different versions and forks degrade cleanly. 3. **One rule set** for every type: - identity from the sim; - consent for anything affecting another avatar; - per-type budgets; - no server-side inventory changes without an explicit user action; - nothing sent without the feature's opt-in (e.g. CombatFX). 4. **A small, deliberate third-party surface** for other people's HUDs: a documented public channel, owner-only by default, per-object opt-in, never exposing what the user hasn't granted. 5. **Spec** in `doc/SLBRIDGE_PROTOCOL.md`, versioned, readable by script authors and forks. ## Supporting tickets Listed below; each references this epic.
sky_line added this to the Slipstream project 2026-10-28 16:42:53 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#1213
No description provided.