# @suaveplan/r3f-networking - R3F-tier multiplayer state synchronisation: interpolation, client-side prediction, snapshot diffing, server reconciliation FSM, React hooks + React-Three-Fiber components. Transport-agnostic — composes any @suaveplan/network Transport. ## Summary R3F-tier multiplayer state-synchronisation for React-Three-Fiber scenes. Composes any `@suaveplan/network` `Transport` (canonical: `@suaveplan/network-transport-webrtc`), `@suaveplan/diff` for snapshot deltas, `@suaveplan/fsm` for the reconciliation state machine, and `@suaveplan/serialize` for the wire codec. ## Documentation tree - [server-authority](./src/authority/server-authority/server-authority.md) — _(no submodules)_ - [server-authority](./src/authority/server-authority/server-authority.md) — _(no submodules)_ - [network-provider](./src/components/network-provider/network-provider.md) — _(no submodules)_ - [network-provider-context](./src/components/network-provider/network-provider-context.md) — Module-scope `React.Context` exported as a separate file so consumers can import the context object directly (`useConte… - [network-provider](./src/components/network-provider/network-provider.md) — _(no submodules)_ - [network-stats](./src/components/network-stats/network-stats.md) — _(no submodules)_ - [network-stats](./src/components/network-stats/network-stats.md) — _(no submodules)_ - [networked-entity](./src/components/networked-entity/networked-entity.md) — _(no submodules)_ - [apply-networked-frame](./src/components/networked-entity/apply-networked-frame.md) — Pure per-frame helper that writes a target `EntityTransform` into a Three.js group-shaped target. Local entities snap d… - [networked-entity](./src/components/networked-entity/networked-entity.md) — _(no submodules)_ - [interpolation](./src/core/interpolation/interpolation.md) — _(no submodules)_ - [interpolation](./src/core/interpolation/interpolation.md) — _(no submodules)_ - [prediction](./src/core/prediction/prediction.md) — _(no submodules)_ - [prediction](./src/core/prediction/prediction.md) — _(no submodules)_ - [reconciliation-fsm](./src/core/reconciliation-fsm/reconciliation-fsm.md) — _(no submodules)_ - [reconciliation-fsm](./src/core/reconciliation-fsm/reconciliation-fsm.md) — _(no submodules)_ - [snapshot-diff](./src/core/snapshot-diff/snapshot-diff.md) — _(no submodules)_ - [snapshot-diff](./src/core/snapshot-diff/snapshot-diff.md) — _(no submodules)_ - [state-buffer](./src/core/state-buffer/state-buffer.md) — _(no submodules)_ - [state-buffer](./src/core/state-buffer/state-buffer.md) — _(no submodules)_ - [wire-codec](./src/core/wire-codec/wire-codec.md) — _(no submodules)_ - [wire-codec](./src/core/wire-codec/wire-codec.md) — _(no submodules)_ - [errors](./src/errors/errors.md) — _(no submodules)_ - [errors](./src/errors/errors.md) — _(no submodules)_ - [use-network-predict](./src/hooks/use-network-predict/use-network-predict.md) — _(no submodules)_ - [use-network-predict](./src/hooks/use-network-predict/use-network-predict.md) — _(no submodules)_ - [use-network-sync](./src/hooks/use-network-sync/use-network-sync.md) — _(no submodules)_ - [use-network-sync](./src/hooks/use-network-sync/use-network-sync.md) — _(no submodules)_ - [use-networked-entity](./src/hooks/use-networked-entity/use-networked-entity.md) — _(no submodules)_ - [use-networked-entity](./src/hooks/use-networked-entity/use-networked-entity.md) — _(no submodules)_ - [observability](./src/observability/observability.md) — _(no submodules)_ - [observability](./src/observability/observability.md) — _(no submodules)_ - [entity-sync](./src/sync/entity-sync/entity-sync.md) — _(no submodules)_ - [entity-sync](./src/sync/entity-sync/entity-sync.md) — _(no submodules)_ - [interest-manager](./src/sync/interest-manager/interest-manager.md) — _(no submodules)_ - [interest-manager](./src/sync/interest-manager/interest-manager.md) — _(no submodules)_ - [memory-transport](./src/transport/memory-transport/memory-transport.md) — _(no submodules)_ - [memory-transport](./src/transport/memory-transport/memory-transport.md) — _(no submodules)_ - [network-helpers](./src/utils/network-helpers/network-helpers.md) — _(no submodules)_ - [network-helpers](./src/utils/network-helpers/network-helpers.md) — _(no submodules)_ - [server-authority](./src/authority/server-authority/server-authority.md) — _(no submodules)_- [network-provider](./src/components/network-provider/network-provider.md) — _(no submodules)_- [network-provider-context](./src/components/network-provider/network-provider-context.md) — Module-scope `React.Context` exported as a separate file so consumers can import the context object directly (`useConte… - [network-provider](./src/components/network-provider/network-provider.md) — _(no submodules)_- [network-stats](./src/components/network-stats/network-stats.md) — _(no submodules)_- [network-stats](./src/components/network-stats/network-stats.md) — _(no submodules)_- [networked-entity](./src/components/networked-entity/networked-entity.md) — _(no submodules)_- [apply-networked-frame](./src/components/networked-entity/apply-networked-frame.md) — Pure per-frame helper that writes a target `EntityTransform` into a Three.js group-shaped target. Local entities snap d… - [networked-entity](./src/components/networked-entity/networked-entity.md) — _(no submodules)_- [interpolation](./src/core/interpolation/interpolation.md) — _(no submodules)_- [interpolation](./src/core/interpolation/interpolation.md) — _(no submodules)_- [prediction](./src/core/prediction/prediction.md) — _(no submodules)_- [prediction](./src/core/prediction/prediction.md) — _(no submodules)_- [reconciliation-fsm](./src/core/reconciliation-fsm/reconciliation-fsm.md) — _(no submodules)_- [reconciliation-fsm](./src/core/reconciliation-fsm/reconciliation-fsm.md) — _(no submodules)_- [snapshot-diff](./src/core/snapshot-diff/snapshot-diff.md) — _(no submodules)_- [snapshot-diff](./src/core/snapshot-diff/snapshot-diff.md) — _(no submodules)_- [state-buffer](./src/core/state-buffer/state-buffer.md) — _(no submodules)_- [state-buffer](./src/core/state-buffer/state-buffer.md) — _(no submodules)_- [wire-codec](./src/core/wire-codec/wire-codec.md) — _(no submodules)_- [wire-codec](./src/core/wire-codec/wire-codec.md) — _(no submodules)_- [errors](./src/errors/errors.md) — _(no submodules)_- [errors](./src/errors/errors.md) — _(no submodules)_- [use-network-predict](./src/hooks/use-network-predict/use-network-predict.md) — _(no submodules)_- [use-network-predict](./src/hooks/use-network-predict/use-network-predict.md) — _(no submodules)_- [use-network-sync](./src/hooks/use-network-sync/use-network-sync.md) — _(no submodules)_- [use-network-sync](./src/hooks/use-network-sync/use-network-sync.md) — _(no submodules)_- [use-networked-entity](./src/hooks/use-networked-entity/use-networked-entity.md) — _(no submodules)_- [use-networked-entity](./src/hooks/use-networked-entity/use-networked-entity.md) — _(no submodules)_- [observability](./src/observability/observability.md) — _(no submodules)_- [observability](./src/observability/observability.md) — _(no submodules)_- [entity-sync](./src/sync/entity-sync/entity-sync.md) — _(no submodules)_- [entity-sync](./src/sync/entity-sync/entity-sync.md) — _(no submodules)_- [interest-manager](./src/sync/interest-manager/interest-manager.md) — _(no submodules)_- [interest-manager](./src/sync/interest-manager/interest-manager.md) — _(no submodules)_- [memory-transport](./src/transport/memory-transport/memory-transport.md) — _(no submodules)_- [memory-transport](./src/transport/memory-transport/memory-transport.md) — _(no submodules)_- [network-helpers](./src/utils/network-helpers/network-helpers.md) — _(no submodules)_- [network-helpers](./src/utils/network-helpers/network-helpers.md) — _(no submodules)_- [server-authority](./src/authority/server-authority/server-authority.md) — _(no submodules)_- [network-provider](./src/components/network-provider/network-provider.md) — _(no submodules)_- [network-provider-context](./src/components/network-provider/network-provider-context.md) — Module-scope `React.Context` exported as a separate file so consumers can import the context object directly (`useConte… - [network-provider](./src/components/network-provider/network-provider.md) — _(no submodules)_- [network-stats](./src/components/network-stats/network-stats.md) — _(no submodules)_- [network-stats](./src/components/network-stats/network-stats.md) — _(no submodules)_- [networked-entity](./src/components/networked-entity/networked-entity.md) — _(no submodules)_- [apply-networked-frame](./src/components/networked-entity/apply-networked-frame.md) — Pure per-frame helper that writes a target `EntityTransform` into a Three.js group-shaped target. Local entities snap d… - [networked-entity](./src/components/networked-entity/networked-entity.md) — _(no submodules)_- [interpolation](./src/core/interpolation/interpolation.md) — _(no submodules)_- [interpolation](./src/core/interpolation/interpolation.md) — _(no submodules)_- [prediction](./src/core/prediction/prediction.md) — _(no submodules)_- [prediction](./src/core/prediction/prediction.md) — _(no submodules)_- [reconciliation-fsm](./src/core/reconciliation-fsm/reconciliation-fsm.md) — _(no submodules)_- [reconciliation-fsm](./src/core/reconciliation-fsm/reconciliation-fsm.md) — _(no submodules)_- [snapshot-diff](./src/core/snapshot-diff/snapshot-diff.md) — _(no submodules)_- [snapshot-diff](./src/core/snapshot-diff/snapshot-diff.md) — _(no submodules)_- [state-buffer](./src/core/state-buffer/state-buffer.md) — _(no submodules)_- [state-buffer](./src/core/state-buffer/state-buffer.md) — _(no submodules)_- [wire-codec](./src/core/wire-codec/wire-codec.md) — _(no submodules)_- [wire-codec](./src/core/wire-codec/wire-codec.md) — _(no submodules)_- [errors](./src/errors/errors.md) — _(no submodules)_- [errors](./src/errors/errors.md) — _(no submodules)_- [use-network-predict](./src/hooks/use-network-predict/use-network-predict.md) — _(no submodules)_- [use-network-predict](./src/hooks/use-network-predict/use-network-predict.md) — _(no submodules)_- [use-network-sync](./src/hooks/use-network-sync/use-network-sync.md) — _(no submodules)_- [use-network-sync](./src/hooks/use-network-sync/use-network-sync.md) — _(no submodules)_- [use-networked-entity](./src/hooks/use-networked-entity/use-networked-entity.md) — _(no submodules)_- [use-networked-entity](./src/hooks/use-networked-entity/use-networked-entity.md) — _(no submodules)_- [observability](./src/observability/observability.md) — _(no submodules)_- [observability](./src/observability/observability.md) — _(no submodules)_- [entity-sync](./src/sync/entity-sync/entity-sync.md) — _(no submodules)_- [entity-sync](./src/sync/entity-sync/entity-sync.md) — _(no submodules)_- [interest-manager](./src/sync/interest-manager/interest-manager.md) — _(no submodules)_- [interest-manager](./src/sync/interest-manager/interest-manager.md) — _(no submodules)_- [memory-transport](./src/transport/memory-transport/memory-transport.md) — _(no submodules)_- [memory-transport](./src/transport/memory-transport/memory-transport.md) — _(no submodules)_- [network-helpers](./src/utils/network-helpers/network-helpers.md) — _(no submodules)_- [network-helpers](./src/utils/network-helpers/network-helpers.md) — _(no submodules)_- [server-authority](./src/authority/server-authority/server-authority.md) — _(no submodules)_- [network-provider](./src/components/network-provider/network-provider.md) — _(no submodules)_- [network-provider-context](./src/components/network-provider/network-provider-context.md) — Module-scope `React.Context` exported as a separate file so consumers can import the context object directly (`useConte… - [network-provider](./src/components/network-provider/network-provider.md) — _(no submodules)_- [network-stats](./src/components/network-stats/network-stats.md) — _(no submodules)_- [network-stats](./src/components/network-stats/network-stats.md) — _(no submodules)_- [networked-entity](./src/components/networked-entity/networked-entity.md) — _(no submodules)_- [apply-networked-frame](./src/components/networked-entity/apply-networked-frame.md) — Pure per-frame helper that writes a target `EntityTransform` into a Three.js group-shaped target. Local entities snap d… - [networked-entity](./src/components/networked-entity/networked-entity.md) — _(no submodules)_- [interpolation](./src/core/interpolation/interpolation.md) — _(no submodules)_- [interpolation](./src/core/interpolation/interpolation.md) — _(no submodules)_- [prediction](./src/core/prediction/prediction.md) — _(no submodules)_- [prediction](./src/core/prediction/prediction.md) — _(no submodules)_- [reconciliation-fsm](./src/core/reconciliation-fsm/reconciliation-fsm.md) — _(no submodules)_- [reconciliation-fsm](./src/core/reconciliation-fsm/reconciliation-fsm.md) — _(no submodules)_- [snapshot-diff](./src/core/snapshot-diff/snapshot-diff.md) — _(no submodules)_- [snapshot-diff](./src/core/snapshot-diff/snapshot-diff.md) — _(no submodules)_- [state-buffer](./src/core/state-buffer/state-buffer.md) — _(no submodules)_- [state-buffer](./src/core/state-buffer/state-buffer.md) — _(no submodules)_- [wire-codec](./src/core/wire-codec/wire-codec.md) — _(no submodules)_- [wire-codec](./src/core/wire-codec/wire-codec.md) — _(no submodules)_- [errors](./src/errors/errors.md) — _(no submodules)_- [errors](./src/errors/errors.md) — _(no submodules)_- [use-network-predict](./src/hooks/use-network-predict/use-network-predict.md) — _(no submodules)_- [use-network-predict](./src/hooks/use-network-predict/use-network-predict.md) — _(no submodules)_- [use-network-sync](./src/hooks/use-network-sync/use-network-sync.md) — _(no submodules)_- [use-network-sync](./src/hooks/use-network-sync/use-network-sync.md) — _(no submodules)_- [use-networked-entity](./src/hooks/use-networked-entity/use-networked-entity.md) — _(no submodules)_- [use-networked-entity](./src/hooks/use-networked-entity/use-networked-entity.md) — _(no submodules)_- [observability](./src/observability/observability.md) — _(no submodules)_- [observability](./src/observability/observability.md) — _(no submodules)_- [entity-sync](./src/sync/entity-sync/entity-sync.md) — _(no submodules)_- [entity-sync](./src/sync/entity-sync/entity-sync.md) — _(no submodules)_- [interest-manager](./src/sync/interest-manager/interest-manager.md) — _(no submodules)_- [interest-manager](./src/sync/interest-manager/interest-manager.md) — _(no submodules)_- [memory-transport](./src/transport/memory-transport/memory-transport.md) — _(no submodules)_- [memory-transport](./src/transport/memory-transport/memory-transport.md) — _(no submodules)_- [network-helpers](./src/utils/network-helpers/network-helpers.md) — _(no submodules)_- [network-helpers](./src/utils/network-helpers/network-helpers.md) — _(no submodules)_- [server-authority](./src/authority/server-authority/server-authority.md) — _(no submodules)_- [network-provider](./src/components/network-provider/network-provider.md) — _(no submodules)_ - [network-provider-context](./src/components/network-provider/network-provider-context.md) — Module-scope `React.Context` exported as a separate file so consumers can import the context object directly (`useConte… - [network-provider](./src/components/network-provider/network-provider.md) — _(no submodules)_- [network-stats](./src/components/network-stats/network-stats.md) — _(no submodules)_ - [network-stats](./src/components/network-stats/network-stats.md) — _(no submodules)_- [networked-entity](./src/components/networked-entity/networked-entity.md) — _(no submodules)_ - [apply-networked-frame](./src/components/networked-entity/apply-networked-frame.md) — Pure per-frame helper that writes a target `EntityTransform` into a Three.js group-shaped target. Local entities snap d… - [networked-entity](./src/components/networked-entity/networked-entity.md) — _(no submodules)_- [interpolation](./src/core/interpolation/interpolation.md) — _(no submodules)_ - [interpolation](./src/core/interpolation/interpolation.md) — _(no submodules)_- [prediction](./src/core/prediction/prediction.md) — _(no submodules)_ - [prediction](./src/core/prediction/prediction.md) — _(no submodules)_- [reconciliation-fsm](./src/core/reconciliation-fsm/reconciliation-fsm.md) — _(no submodules)_ - [reconciliation-fsm](./src/core/reconciliation-fsm/reconciliation-fsm.md) — _(no submodules)_- [snapshot-diff](./src/core/snapshot-diff/snapshot-diff.md) — _(no submodules)_ - [snapshot-diff](./src/core/snapshot-diff/snapshot-diff.md) — _(no submodules)_- [state-buffer](./src/core/state-buffer/state-buffer.md) — _(no submodules)_ - [state-buffer](./src/core/state-buffer/state-buffer.md) — _(no submodules)_- [wire-codec](./src/core/wire-codec/wire-codec.md) — _(no submodules)_ - [wire-codec](./src/core/wire-codec/wire-codec.md) — _(no submodules)_- [errors](./src/errors/errors.md) — _(no submodules)_ - [errors](./src/errors/errors.md) — _(no submodules)_- [use-network-predict](./src/hooks/use-network-predict/use-network-predict.md) — _(no submodules)_ - [use-network-predict](./src/hooks/use-network-predict/use-network-predict.md) — _(no submodules)_- [use-network-sync](./src/hooks/use-network-sync/use-network-sync.md) — _(no submodules)_ - [use-network-sync](./src/hooks/use-network-sync/use-network-sync.md) — _(no submodules)_- [use-networked-entity](./src/hooks/use-networked-entity/use-networked-entity.md) — _(no submodules)_ - [use-networked-entity](./src/hooks/use-networked-entity/use-networked-entity.md) — _(no submodules)_- [observability](./src/observability/observability.md) — _(no submodules)_ - [observability](./src/observability/observability.md) — _(no submodules)_- [entity-sync](./src/sync/entity-sync/entity-sync.md) — _(no submodules)_ - [entity-sync](./src/sync/entity-sync/entity-sync.md) — _(no submodules)_- [interest-manager](./src/sync/interest-manager/interest-manager.md) — _(no submodules)_ - [interest-manager](./src/sync/interest-manager/interest-manager.md) — _(no submodules)_- [memory-transport](./src/transport/memory-transport/memory-transport.md) — _(no submodules)_ - [memory-transport](./src/transport/memory-transport/memory-transport.md) — _(no submodules)_- [network-helpers](./src/utils/network-helpers/network-helpers.md) — _(no submodules)_ - [network-helpers](./src/utils/network-helpers/network-helpers.md) — _(no submodules)_ ## What this package owns - **Interpolation** — frame-loop smoothing of remote-peer transforms ([`core/interpolation`](./src/core/interpolation/interpolation.md)). - **Client-side prediction** — local input applied immediately, reconciled against authoritative snapshots ([`core/prediction`](./src/core/prediction/prediction.md)). - **Reconciliation FSM** — `synchronized → diverged → resyncing` state machine driven by divergence magnitude ([`core/reconciliation-fsm`](./src/core/reconciliation-fsm/reconciliation-fsm.md)). - **Snapshot diffing** — RFC-6902 JSON Patch between authoritative snapshots via `@suaveplan/diff` ([`core/snapshot-diff`](./src/core/snapshot-diff/snapshot-diff.md)). - **Wire codec** — Zod-validated frame encode/decode via `@suaveplan/serialize` ([`core/wire-codec`](./src/core/wire-codec/wire-codec.md)). - **Entity sync + interest management** ([`sync/entity-sync`](./src/sync/entity-sync/entity-sync.md), [`sync/interest-manager`](./src/sync/interest-manager/interest-manager.md)). - **Server authority** with anti-cheat hooks ([`authority/server-authority`](./src/authority/server-authority/server-authority.md)). - **In-memory transport** — deterministic real `Transport` implementation for integration tests ([`transport/memory-transport`](./src/transport/memory-transport/memory-transport.md)). - **React hooks** — `useNetworkSync`, `useNetworkedEntity`, `useNetworkPredict`. - **R3F components** — ``, ``, ``. ## Observability OTel meter `@suaveplan/r3f-networking`. Histograms `r3f_net.snapshot_dispatch_ms` and `r3f_net.prediction_divergence`; counters `r3f_net.snapshots_total{outcome}` and `r3f_net.peer_events_total{event}`. ## Error registry `defineCodes("R3F_NET", […])` — 8 codes: `SNAPSHOT_OUT_OF_ORDER`, `PEER_DROPPED`, `PREDICTION_DIVERGED`, `INVALID_OPTIONS`, `INVALID_SNAPSHOT`, `DISPOSED`, `TRANSPORT_FAILED`, `ABORTED`. ## License MIT