Skip to content

Social & Multiplayer Traits

Part of the HoloScript Traits reference. Browse: Social/Multiplayer · Web3 · All Traits

Social/Multiplayer Traits

@networked

Full multiplayer state synchronization with interpolation, ownership, and connection pooling. Built on the HoloScript SyncProtocol with WebSocket transport and delta compression.

hsplus
object "SharedCube" @networked(
  sync_position: true,
  sync_rotation: true,
  sync_rate: 20,
  ownership_model: "any",
  interpolation: true
) {
  position: [0, 1, -3]
}
ConfigTypeDefaultDescription
sync_positionbooltrueReplicate world position.
sync_rotationbooltrueReplicate world rotation.
sync_scaleboolfalseReplicate scale.
sync_ratenumber20Network updates per second (1–120).
interpolationbooltrueSmooth position/rotation between updates.
ownership_modelstring"host""host" (host owns), "any" (grabber owns), "sticky" (first grabber keeps).
reliableboolfalseUse reliable delivery for this object's updates.
compress_statebooltrueApply delta compression before sending.
latency_tolerancenumber150Max ms of lag before interpolation extrapolates.

Events — Outgoing:

EventPayloadDescription
network_spawn{ object_id, owner_id }Object created on remote peer.
network_despawn{ object_id }Object removed on remote peer.
network_owner_changed{ object_id, old_owner, new_owner }Ownership transferred.
network_state_update{ object_id, position?, rotation? }State update received.

Ownership example:

hsplus
object "Ball" @networked(ownership_model: "any") @grabbable {
  on_grab: {
    emit "request_ownership" { object_id: this.id }
  }
  on_release: {
    emit "release_ownership" { object_id: this.id }
  }
}

@host_only modifier — restricts event handling to the session host, useful for authoritative game logic:

hsplus
object "ScoreManager" @networked @host_only {
  state { scores: {} }

  action add_score(player_id, points) {
    state.scores[player_id] = (state.scores[player_id] || 0) + points
    broadcast "score_updated"
  }
}

@lobby

Lobby/room management.

hsplus
system Lobby @lobby {
  max_players: 8
  matchmaking: true
}
ConfigTypeDefaultDescription
max_playersnumber16Max room capacity
matchmakingbooleanfalseAuto matchmaking
visiblebooleantruePublicly listed
passwordstring''Room password

Events:

  • lobby_join - Player joined
  • lobby_leave - Player left
  • lobby_full - Room at capacity

@remote_presence

Avatar representation for remote users.

hsplus
object RemotePlayer @remote_presence {
  avatar_type: 'humanoid'
  voice_enabled: true
}
ConfigTypeDefaultDescription
avatar_typestring'humanoid'Avatar style
voice_enabledbooleantrueEnable voice
tracking_levelstring'full''head', 'upper', 'full'

@spectator

Spectator mode for observers.

hsplus
object SpectatorCam @spectator {
  can_fly: true
  follow_player: true
}
ConfigTypeDefaultDescription
can_flybooleantrueFree movement
follow_playerbooleanfalseAuto-follow player
visible_to_playersbooleanfalseShow to players

See Also

Released under the MIT License.