Source: https://shadowfrag.com/blog/keeping-multiplayer-updates-fresh/

# Keeping multiplayer updates fresh

By the SHADOWFRAG developer · Networking · Oct 25, 2026 · 3 min read

Star-heavy tests showed clients receiving traffic without getting a fresh scene. I traced the delivery stages, kept the changes that held up and retained the mixed follow-up results.

[Moonspire’s opposing pagodas and connecting routes, captured in the current SHADOWFRAG engine.](https://ds9.dynostatic.com/media.php?id=01M5THGFGWXFWTE34G57BRBM7W&revision=1)

Moonspire’s opposing pagodas and connecting routes, captured in the current SHADOWFRAG engine. Captured 2026-10-25.

**Update, 26–27 October 2026.** The follow-up makes [PicoQUIC](https://shadowfrag.com/glossary/#term-picoquic) the default [transport](https://shadowfrag.com/glossary/#term-transport-backend) with [CUBIC](https://shadowfrag.com/glossary/#term-cubic) managing congestion, stores state in growing pages of memory, waits for network work to become ready, and separates recovery rules for different message lifetimes. The latest capacity campaign also fixes an input grant tied to an outdated generation. The measurements below belong to the earlier [Quiche](https://shadowfrag.com/glossary/#term-quiche) investigation. [Read the subsequent networking work](https://shadowfrag.com/blog/less-work-between-input-and-server/) and [current tests](https://shadowfrag.com/netcode/#capacity).

A server can finish a simulation tick—one step of the game—quickly while clients still see an older version of the fight. Tests with **64 players using stars heavily** brought that difference into focus. The server's own processing time did not tell me whether fresh information had reached a player.

Stars produce frequent records about their [projectiles](https://shadowfrag.com/glossary/#term-projectile). Those records need to remain available until the receiver acknowledges them. Movement updates have a different need: they become stale quickly and have a freshness deadline. If the delivery path gets busy, a client can keep receiving [packets](https://shadowfrag.com/glossary/#term-network-packet) without assembling and accepting a fresh, complete scene.

## Following the record all the way to the client

I separated the stages in the investigation. First the authoritative simulation hands a record to the input/output worker. The [transport](https://shadowfrag.com/glossary/#term-transport-backend) must then accept it, its frame parts must reach the client, and the client must assemble and accept the scene. Success at an early stage does not show that the later stages completed.

Controlled tests reproduced retries catching up with original records that were still queued. They also showed records awaiting reliable delivery delaying fresh movement frames. Those tests established mechanisms to investigate, without proving that one counter or weapon explained the entire live problem.

## Limiting how much work happens at once

The accepted changes stage at most **256 records** and handle delivery in **four fair rounds** before returning to the [transport](https://shadowfrag.com/glossary/#term-transport-backend). An index lets receipt retries find active, unacknowledged records without searching inactive history. I also removed unnecessary sizing work when preparing the world update for a client.

An alternative used **eight rounds and 512 staged records**. I rejected it after its matched run showed worse waits at the slow end of [weapon feedback](https://shadowfrag.com/glossary/#term-weapon-request-feedback). A larger batch was not automatically a better one.

A separate investigation into the native network adapter found that an old cached wake-up time could delay a [packet](https://shadowfrag.com/glossary/#term-network-packet) already ready to send. The corrected adapter repeatedly passed fixed-clock tests that the original failed. That was a useful regression check, but the LAN campaigns used [Quiche](https://shadowfrag.com/glossary/#term-quiche), not [PicoQUIC](https://shadowfrag.com/glossary/#term-picoquic). They therefore did not measure a [PicoQUIC](https://shadowfrag.com/glossary/#term-picoquic) LAN speedup from the adapter fix.

## Keeping the results that went both ways

Five further [paired comparisons](https://shadowfrag.com/glossary/#term-paired-comparison) ran the original and revised builds under recorded desktop load. Changes in the worst client's [weapon feedback](https://shadowfrag.com/glossary/#term-weapon-request-feedback) went in both directions. I kept those results because a better result in one run, or an improved [median](https://shadowfrag.com/glossary/#term-median), would otherwise hide clients whose longer waits had worsened.

These were short observations on a local network, with machine activity recorded. They did not qualify Internet play, long sessions or a higher population. The game remained capped at **64 players including [bots](https://shadowfrag.com/glossary/#term-bot)**. [The netcode page](https://shadowfrag.com/netcode/) explains the delivery architecture and retains the dated studies so the improvement and its limits can be inspected together.

[Back to blog](https://shadowfrag.com/blog/)[Browse the glossary](https://shadowfrag.com/glossary/)

## Request an _invite code._

SHADOWFRAG is opening by invitation. Request a code and receive development updates. [Shadow Council](https://shadowfrag.com/glossary/#term-shadow-council) contributors receive priority when invitations begin.

Enable JavaScript to request an invite code and confirm your email address.

Email confirmation required. Codes will be issued later; a request does not guarantee access. Unsubscribe at any time. [Privacy](https://shadowfrag.com/privacy/)

Confirm your email to join the invitation list. Codes will be issued in a future round; a request does not guarantee access. Unsubscribe at any time.

Anyone can request a code. For [Shadow Council](https://shadowfrag.com/shadow-council/) priority, introduce yourself on Discord with your role, experience, region and time zone. Include examples of your maps or content if you have them.

[Join Discord](https://discord.gg/EHj7rZDNj)
