---
title: "Multiplayer replication rooms and networked motion"
description: "Two or more players share a world. Per-entity replication feel is set with `NetworkProfileComponent`; the room and matchmaking topology is set once at the game level with the multiplayer blueprint."
engineVersion: v1.0.234
date: 2026-09-28
license: "(c) Gessa, proprietary. Cite with attribution to https://gessa.ai/docs/. Terms: https://gessa.ai/terms/."
canonical: https://gessa.ai/docs/knowledge/playbooks/multiplayer-replication-and-rooms/
---

# Multiplayer replication rooms and networked motion

## When to use

Two or more players share a world. Per-entity replication feel is set with
`NetworkProfileComponent`; the room and matchmaking topology is set once at the
game level with the multiplayer blueprint.

## The recipe

1. Per-entity replication: attach `NetworkProfileComponent`
   `{ "type":"NetworkProfileComponent", "interpolation":"responsive",
   "interestRadius": 60, "alwaysRelevant": false }`. `interpolation` is:
   - `responsive`: hugs the newest server sample, no gap-bridging (projectiles,
     snappy pickups).
   - `smooth`: doubles the interpolation buffer for fluid slow movers (platforms,
     doors).
   - `default`: the tick-derived baseline.
2. Visibility controls on the same component: `ownerOnly: true` withholds the
   entity from every player except its owner; `hidden: true` withholds it from
   everyone; `alwaysRelevant: true` and `interestRadius` shape whose snapshot it
   enters.
3. Game topology: set the room and queue blueprint with
   `project_set_multiplayer_blueprint` (`game.multiplayer_blueprint.set`, AI name
   `set_game_multiplayer_blueprint`). The definition carries `roomTemplates`
   (each with `key`, `joinPolicy`, `maxPlayers`) and `queues` (each with `key`,
   `mode`, `minParticipants`, `maxParticipants`, `roomTemplateKey`).
4. You do not have to configure anything to be multiplayer: an unconfigured game
   resolves to a default of one `public` room (`maxPlayers` 16) plus one open
   queue, so the runtime never lacks a blueprint.

## Pitfalls

- `NetworkProfileComponent` is presentation intent for replicated motion; it
  does not itself move the entity. It reads into the interpolation buffer (no
  second mover).
- Netcode is client-authoritative single-writer over relays; the server does not
  re-simulate. Use `server_authoritative` input prediction (see
  input-mapping-actions-bindings)
  for verbs that must resist cheating.
- `ownerOnly` withholds the WHOLE entity from non-owners, not just a field; a
  first-person viewmodel is a good `ownerOnly` candidate.
- The blueprint mutation carries the full definition (settings-panel edits send
  the whole object); send a complete `roomTemplates`+`queues` shape, not a diff.

## Verify

- `engine_get_component_schema` on `NetworkProfileComponent` for the
  `interpolation` enum and the visibility flags.
- `project_get_graph_snapshot` and the game record to confirm the blueprint set.
- `simulation_run` (`qa.run.start`) for a multi-participant admission check.
