Skip to content

Latest commit

 

History

History
47 lines (43 loc) · 3.63 KB

File metadata and controls

47 lines (43 loc) · 3.63 KB

Features

Shipped

  • Native (UDP) and browser (WebRTC / WASM) client support from a single codebase
  • Pluggable transport layer (Socket trait — UDP, WebRTC, and local-test implementations included)
  • Connection / disconnection events with customisable authentication
  • Heartbeats and host-timeout detection
  • Typed message passing: unordered-unreliable, sequenced-unreliable, unordered-reliable, ordered-reliable, tick-buffered
  • Typed request / response pairs over reliable channels
  • Entity replication with per-field delta compression (Property<T>)
  • Static entities (write-once, no per-tick diff tracking)
  • Replicated resources (server-side singletons, no room/scope config required)
  • Two-level interest management: rooms (coarse) + UserScope (fine-grained per-user visibility)
  • Authority delegation: server grants/revokes client write authority over individual entities
  • give_authority / take_authority — server-initiated authority transfer
  • Tick synchronisation: server tick, client tick (leading by RTT/2), sub-tick interpolation fractions
  • Client-side prediction primitives: TickBuffered input delivery, CommandHistory, local_duplicate()
  • Lag compensation: Historian rolling per-tick world snapshot buffer for server-side rewind hit-detection
  • Priority-based bandwidth allocation: per-entity gain, per-user gain, token-bucket send loop
  • Configurable per-connection bandwidth budget (BandwidthConfig::target_bytes_per_sec)
  • Bitwise serialisation (bit-packing, not byte-packing)
  • Quantized numeric types: UnsignedInteger<N>, SignedVariableFloat<BITS, FRAC>, etc.
  • Optional zstd packet compression with default, custom-dictionary, and dictionary-training modes
  • Connection diagnostics: RTT (EWMA + P50/P99), jitter, packet loss %, kbps sent/recv
  • Network condition simulation for local dev: LinkConditionerConfig (loss, latency, jitter presets)
  • Handshake flood mitigation (bounded pending-connection map)
  • Pending-auth timeout (auto-reject unauthenticated connections)
  • Panic-free stale-key lookup: user_opt / user_mut_opt
  • Reconnect correctness: clients re-receive all in-scope entities and resources on reconnect
  • Safety comments on all unsafe blocks; local-transport UB transmute eliminated
  • Bevy adapter (server + client) with multi-client phantom-type disambiguation
  • macroquad adapter (client)
  • BDD contract test harness (215 contracts across 8 feature files)
  • Criterion + iai-callgrind benchmark suite
  • Fuzz targets — five targets covering packet header, packet body, quantized serde types, replication protocol decoder, and handshake state machine
  • Enum support in #[derive(Message)] — enum message types with proc-macro derived serialization
  • DefaultClientTag and DefaultPlugin in Bevy adapter — reduces phantom-type boilerplate for single-client apps
  • Historian component-kind filtering — enable_historian_filtered snapshots only specified components
  • Optional metrics / tracing integration — naia-metrics and naia-bevy-metrics feature-gated observability crates
  • Per-connection message channel backpressure — ReliableSettings::max_queue_depth caps the unacknowledged message queue; send_message returns Err(MessageQueueFull) when the limit is reached

Planned

  • transport_quic — TLS 1.3 native transport (Quinn-based); XL effort, no set timeline
  • Per-component replication toggle — fine-grained enable/disable per component on a replicated entity, issue #186
  • iOS / Android native client socket (blocked on transport_quic)