- Native (UDP) and browser (WebRTC / WASM) client support from a single codebase
- Pluggable transport layer (
Sockettrait — 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:
TickBufferedinput delivery,CommandHistory,local_duplicate() - Lag compensation:
Historianrolling 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
unsafeblocks; 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 -
DefaultClientTagandDefaultPluginin Bevy adapter — reduces phantom-type boilerplate for single-client apps - Historian component-kind filtering —
enable_historian_filteredsnapshots only specified components - Optional
metrics/tracingintegration —naia-metricsandnaia-bevy-metricsfeature-gated observability crates - Per-connection message channel backpressure —
ReliableSettings::max_queue_depthcaps the unacknowledged message queue;send_messagereturnsErr(MessageQueueFull)when the limit is reached
-
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)