---
title: "Server-authoritative multiplayer without a netcode plugin: Gessa vs Unity vs Unreal"
description: "Gessa ships server authority, client prediction, lag compensation, and replay in the engine rather than as a plugin, and is honest that it does not adopt rollback, runs a single region in this release, and has first-generation interest management."
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/compare/server-authoritative-multiplayer/
---

# Server-authoritative multiplayer without a netcode plugin: Gessa vs Unity vs Unreal

_Last verified 2026-09-06 against engine v1.0.232. Competitor sources were accessed 2026-09-06; every Gessa cell binds to the generated engine reference and the build fails if a bound surface disappears._

Gessa's multiplayer is server-authoritative in the engine itself: one authority per room owns simulation, clients predict locally and reconcile against the server, the server rewinds bounded history for lag compensation, and a session can be replayed. None of that is a plugin a creator installs and wires. The honest tradeoff is that Gessa deliberately does not adopt rollback, runs a single region in this release, and ships first-generation, room-scoped interest management. Unity reaches this model through the Netcode for GameObjects package; Unreal reaches it through its built-in networking and the Iris replication system.

The authority and interest boundaries are described in [the netcode model explanation](../explanation/netcode-model.md); the pinned numeric policy (rewind default and clamp, fairness ceiling, tick and input policy) lives in [the netcode contract reference](../reference/netcode-contract.md) and is not restated here.

## Where Gessa stands

| Capability | Gessa | Unity | Unreal |
| --- | --- | --- | --- |
| Server-authoritative rooms, one authority per room | {% gessaCell status="supported" binds="check:runtime-single-authority" /%} | Supported {% competitorCell engine="unity" version="com.unity.netcode.gameobjects 2.13" url="https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.13/" accessed="2026-09-06" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/networking-overview-for-unreal-engine" accessed="2026-09-06" /%} |
| Client-side prediction and reconciliation | {% gessaCell status="supported" binds="check:runtime-netcode-prediction-hardgates" /%} | Partial {% competitorCell engine="unity" version="com.unity.netcode.gameobjects 2.13" url="https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.13/" accessed="2026-09-06" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/networking-overview-for-unreal-engine" accessed="2026-09-06" /%} |
| Server-rewind lag compensation | {% gessaCell status="supported" binds="check:netcode-timing-literals" /%} | Not first-party {% competitorCell engine="unity" version="com.unity.netcode.gameobjects 2.13" url="https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.13/" accessed="2026-09-06" /%} | Not first-party in overview {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/networking-overview-for-unreal-engine" accessed="2026-09-06" /%} |
| Replication with delta snapshots and acknowledgements | {% gessaCell status="supported" binds="check:netcode-replication-fanout-boundary" /%} | Supported {% competitorCell engine="unity" version="com.unity.netcode.gameobjects 2.13" url="https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.13/" accessed="2026-09-06" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/iris-replication-system-in-unreal-engine" accessed="2026-09-06" /%} |
| Interest management and relevancy filtering | {% gessaCell status="partial" binds="NetworkProfileComponent" /%} | Supported {% competitorCell engine="unity" version="com.unity.netcode.gameobjects 2.13" url="https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.13/" accessed="2026-09-06" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/iris-replication-system-in-unreal-engine" accessed="2026-09-06" /%} |
| Reconnect and resume into a running room | {% gessaCell status="supported" binds="check:reconnect-policy" /%} | Supported {% competitorCell engine="unity" version="com.unity.netcode.gameobjects 2.13" url="https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.13/" accessed="2026-09-06" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/networking-overview-for-unreal-engine" accessed="2026-09-06" /%} |
| Deterministic replay of a session | {% gessaCell status="partial" binds="check:runtime-replay-release-gate" /%} | Not first-party {% competitorCell engine="unity" version="com.unity.netcode.gameobjects 2.13" url="https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.13/" accessed="2026-09-06" /%} | Not first-party {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/networking-overview-for-unreal-engine" accessed="2026-09-06" /%} |
| Rollback / lockstep netcode | {% gessaCell status="not_yet" binds="netcode.rollback" /%} | Third-party {% competitorCell engine="unity" version="com.unity.netcode.gameobjects 2.13" url="https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.13/" accessed="2026-09-06" /%} | Third-party {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/networking-overview-for-unreal-engine" accessed="2026-09-06" /%} |
| Matchmaking as a production-closed service | {% gessaCell status="unknown" binds="netcode.matchmaking" /%} | Separate service {% competitorCell engine="unity" version="com.unity.netcode.gameobjects 2.13" url="https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.13/" accessed="2026-09-06" /%} | Separate service {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/networking-overview-for-unreal-engine" accessed="2026-09-06" /%} |
| Multi-region distributed transport | {% gessaCell status="not_yet" binds="netcode.multi_region" /%} | Supported {% competitorCell engine="unity" version="com.unity.netcode.gameobjects 2.13" url="https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.13/" accessed="2026-09-06" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/networking-overview-for-unreal-engine" accessed="2026-09-06" /%} |

The `NetworkProfileComponent` surface carries the per-entity interest and interpolation intent behind the interest-management row; the authority, prediction, lag-compensation, replication, and replay rows are backed by the `check:runtime-single-authority`, `check:runtime-netcode-prediction-hardgates`, `check:netcode-timing-literals`, `check:netcode-replication-fanout-boundary`, and `check:runtime-replay-release-gate` gates in the build.

## The gaps, named here

- No rollback, by design. Gessa is a state-synchronising, server-authoritative engine, not a lockstep one; it does not adopt rollback. The row reads not_yet because rollback is a family the engine deliberately does not carry, not a feature in progress.
- Interest management is first-generation. It is expressed per entity through the `NetworkProfileComponent` interest fields and is room-scoped; cross-room relevancy is still a release-blocking item, so the cell reads partial rather than supported.
- Single region, this release. Multi-region distributed transport is not shipped, so that row reads not_yet.
- Matchmaking is not proven production-closed. Matchmaking rooms and a worker exist in the codebase, but there is no passing service-level gate to bind a supported or partial claim to, so the cell reads unknown rather than overstating it.
- Replay is single-machine stable, not a cross-platform guarantee. The replay row reads partial: the release gate proves replay stability for a session, not bit-identical determinism across every platform.

## Where Unity and Unreal are ahead

- Unreal's Iris replication system is built to scale to higher player counts and larger, more interactive worlds, and Unreal ships mature dedicated-server hosting and multi-region deployment. See the Unreal networking and Iris documentation cited in the table.
- Unity's Netcode for GameObjects plus Unity Gaming Services provides a matchmaking service, relay, and multi-region hosting as a supported ecosystem. See the Netcode for GameObjects documentation cited in the table.
- Both ecosystems have third-party rollback netcode options for the lockstep, fighting-game class of title that Gessa does not target.

Gessa's answer is not to match that hosting-and-services breadth. It is to ship authority, prediction, lag compensation, replication, and replay in the engine, with no plugin to install, and to be explicit that it does not adopt rollback and runs a single region today. The other comparison axes are in the [compare index](index.md).
