Source: https://shadowfrag.com/netcode/

# Move now. _Make the shot count._

Immediate local movement, precise [shot references](https://shadowfrag.com/glossary/#term-hit-reference) and server-checked combat. See what the current build does, what the latest tests measured, and where the limits still are.

[See the latest tests](https://shadowfrag.com/netcode/#capacity)[Open the traffic explorer](https://shadowfrag.com/netcode/#traffic)[Latest networking work](https://shadowfrag.com/blog/less-work-between-input-and-server/)

![A SHADOWFRAG ninja aiming the Arctic railgun](https://shadowfrag.com/game/weapons/rail-1536.webp)

Your aimThe server’s check**One shot. One result.**

## Less waiting. _More confidence in the fight._

[Netcode](https://shadowfrag.com/glossary/#term-netcode) is how everyone’s version of a match stays connected. In a game this fast, it has three jobs you can feel.

### You press jump. Your ninja moves.

Your client starts the move locally. It does not wait for a trip to the server and back before you can react.

[Prediction + reconciliation](https://shadowfrag.com/netcode/#architecture)

### Your flick belongs to that shot.

A shot keeps the aiming context selected for it. Later mouse movement or a render delay cannot quietly rewrite the attack.

[Shot references + history](https://shadowfrag.com/netcode/#architecture)

### The same rules apply to everyone.

The server checks hits, [cooldowns](https://shadowfrag.com/glossary/#term-cooldown), [shields](https://shadowfrag.com/glossary/#term-shield) and ammo. A client cannot simply announce that it scored a kill.

[Server authority](https://shadowfrag.com/netcode/#fair-play)

**128 simulation steps a second**The server advances the rules every 7.8125 ms and publishes combat scenes at 64 Hz. Your mouse, the renderer and your Internet ping are separate parts of the experience.

## Different weapons. _The right kind of history._

An instant rail, a flying arrow and a teleport cannot all be treated the same way. Pick one to follow what happens.

### Your aim stays with your shot.

When you flick onto a moving ninja and fire, that instant matters. The server checks the aim and recent view attached to that action.

1.  #### Capture the action
    
    Your game saves where you aimed and which moment of the fight the shot belongs to.
    
2.  #### Check the fight
    
    The server checks the target in that allowed slice of history, with strict limits on how far back it can look.
    
3.  #### Confirm the result
    
    The result comes back separately from the visual effects. A repeated message cannot count as another shot.
    

**Under the hood**

The reference is the eligible scene submitted to the bounded [CPU render queue](https://shadowfrag.com/glossary/#term-render-queue), selected using the input event’s chronology. It is not hardware proof of what reached the display. Issued frame tokens, [decoded-scene receipts](https://shadowfrag.com/glossary/#term-acknowledgement), life/[warp identity](https://shadowfrag.com/glossary/#term-life-warp-identity), origin history and strict age bounds remain required. An expired reference cannot be silently replaced with a newer one.

### The arrow still has to get there.

[Projectile](https://shadowfrag.com/glossary/#term-projectile) travel creates the chance to lead, dodge and use cover. That opportunity must survive a change in [frame rate](https://shadowfrag.com/glossary/#term-frames-per-second) or a late [packet](https://shadowfrag.com/glossary/#term-network-packet).

1.  #### Launch in the world
    
    Your arrow starts from the position approved by the server.
    
2.  #### Follow the flight
    
    Your PC draws the flight. The server checks the whole path between steps to catch contact with moving players and cover.
    
3.  #### Resolve the contact
    
    The server ends the flight when it hits or expires. A late message cannot bring an already-finished arrow back.
    

**Under the hood**

[Ballistics](https://shadowfrag.com/glossary/#term-projectile) use current-world launch and collision, not the rail’s historical [target rewind](https://shadowfrag.com/glossary/#term-historical-hit-check). [Swept relative collision](https://shadowfrag.com/glossary/#term-swept-collision) checks the interval between simulation states. Launch and terminal receipts are independent; retained terminal identities prevent resurrection. [Projectile](https://shadowfrag.com/glossary/#term-projectile) travel time is not mistaken for network confirmation delay.

### Fast movement. Clear boundaries.

Leaps share the same movement rules on [client and server](https://shadowfrag.com/glossary/#term-client-server). A teleport is a real change of place, not a ninja sliding invisibly through the space between.

1.  #### Move immediately
    
    [Local prediction](https://shadowfrag.com/glossary/#term-client-prediction) begins the move without waiting for the server’s reply.
    
2.  #### Agree on the result
    
    The server follows the same movement rules. If it corrects your position, your newer inputs are applied from there.
    
3.  #### Cut at the warp
    
    The game starts a new path at your destination. It does not draw or test a collision along an imaginary journey through the gap.
    

**Under the hood**

Movement [prediction](https://shadowfrag.com/glossary/#term-client-prediction) and [reconciliation](https://shadowfrag.com/glossary/#term-reconciliation) share the controller. Respawn, occupant and warp transitions are explicit. Collision does not sweep a player through the gap between teleport endpoints. Model flips, leans, capes and smoke are presentation; they do not rotate the [authoritative hit geometry](https://shadowfrag.com/glossary/#term-hitbox).

## The current build.

Implementation checked against the game source and the completed 26–27 October study. New game, Practice and dedicated-server launches share the same default [transport](https://shadowfrag.com/glossary/#term-transport-backend).

Default [transport](https://shadowfrag.com/glossary/#term-transport-backend)

[PicoQUIC](https://shadowfrag.com/glossary/#term-picoquic)/[CUBIC](https://shadowfrag.com/glossary/#term-cubic)

Selectable alternative

[Quiche](https://shadowfrag.com/glossary/#term-quiche)/[CUBIC](https://shadowfrag.com/glossary/#term-cubic)

Compatible [wire protocol](https://shadowfrag.com/glossary/#term-wire-protocol)

37

Configured [player limit](https://shadowfrag.com/glossary/#term-player-cap)

64, including [bots](https://shadowfrag.com/glossary/#term-bot)

[Paged state](https://shadowfrag.com/glossary/#term-paged-storage), [readiness-based waits](https://shadowfrag.com/glossary/#term-readiness-wait) and bounded message scheduling reduce avoidable work. Receipt ownership and a stale input-epoch fix preserve recovery without loosening the server’s combat checks. [Read the implementation changes](https://shadowfrag.com/blog/less-work-between-input-and-server/).

## 64 players. _The latest capacity tests._

The configured shipping limit remains 64, including [bots](https://shadowfrag.com/glossary/#term-bot). The 26–27 October campaign also confirmed a specific 128-player [Highlands](https://shadowfrag.com/glossary/#term-shogun-highlands) [FFA](https://shadowfrag.com/glossary/#term-free-for-all) workload across three clean LAN runs, including five minutes of active play.

### 64 players in a dense fight

Ironworks with [ninja stars](https://shadowfrag.com/glossary/#term-ninja-stars) passed all three clean confirmations at the normal [bandwidth budget](https://shadowfrag.com/glossary/#term-bandwidth). This remains the general reference.

[Weapon-request feedback](https://shadowfrag.com/glossary/#term-weapon-request-feedback) [p99](https://shadowfrag.com/glossary/#term-p99)

14.40–19.39 ms

[Received-position age](https://shadowfrag.com/glossary/#term-position-age) [p99](https://shadowfrag.com/glossary/#term-p99)

16.25–16.38 ms

### 128 players, under specific conditions

Spread-out [Highlands](https://shadowfrag.com/glossary/#term-shogun-highlands) [FFA](https://shadowfrag.com/glossary/#term-free-for-all), mixed weapon cohorts, net, shadow and chi. This is a conditional research result; it does not raise the game’s limit or establish full [Shogun](https://shadowfrag.com/glossary/#term-shogun) capacity.

[Weapon-request feedback](https://shadowfrag.com/glossary/#term-weapon-request-feedback) [p99](https://shadowfrag.com/glossary/#term-p99)

21.68–28.67 ms

[Received-position age](https://shadowfrag.com/glossary/#term-position-age) [p99](https://shadowfrag.com/glossary/#term-p99)

17.66–25.47 ms

| Workload | Measured window | Server tick p99 | Position-age p99 | Request-feedback p99 |
| --- | --- | --- | --- | --- |
| Ironworks · 64 playersSeed 826701 | 40 s | 1.20 ms | 16.38 ms | 18.36 ms |
| Ironworks · 64 playersSeed 826702 | 40 s | 1.55 ms | 16.32 ms | 19.39 ms |
| Ironworks · 64 playersSeed 826703 | 310 s | 1.40 ms | 16.25 ms | 14.40 ms |
| Shogun Highlands · 128 playersSeed 826701 | 40 s | 1.95 ms | 17.66 ms | 21.68 ms |
| Shogun Highlands · 128 playersSeed 826702 | 40 s | 1.95 ms | 17.79 ms | 28.67 ms |
| Shogun Highlands · 128 playersSeed 826703 | 310 s | 1.95 ms | 25.47 ms | 22.60 ms |

Each [position-age](https://shadowfrag.com/glossary/#term-position-age) and feedback figure is the maximum of individual clients’ [p99](https://shadowfrag.com/glossary/#term-p99) values. Feedback measures the software [acknowledgement](https://shadowfrag.com/glossary/#term-acknowledgement) of a weapon request, excluding [projectile](https://shadowfrag.com/glossary/#term-projectile) flight. The long 128-player run recorded 614 [late input](https://shadowfrag.com/glossary/#term-input-deadline) commands and 13 [late actions](https://shadowfrag.com/glossary/#term-input-deadline), despite passing the declared screen.

**What the test includes**

Synthetic real-protocol [FFA](https://shadowfrag.com/glossary/#term-free-for-all) clients across two wired-gigabit hosts. Linux Ryzen 7 5800H [client generator](https://shadowfrag.com/glossary/#term-synthetic-protocol-client); Windows i5-12500H server. Rendering, audio and full [server-bot AI](https://shadowfrag.com/glossary/#term-bot) are measured separately. These runs measure networking and the authoritative [FFA](https://shadowfrag.com/glossary/#term-free-for-all) simulation. They do not combine full [server-bot AI](https://shadowfrag.com/glossary/#term-bot), player rendering/audio and real human input into a qualified match.

The direct-LAN screen required server-tick [p99](https://shadowfrag.com/glossary/#term-p99) at most 5.5 ms, tick [p99.9](https://shadowfrag.com/glossary/#term-p999) at most 7.8125 ms, and worst-client [position-age](https://shadowfrag.com/glossary/#term-position-age) and feedback [p99](https://shadowfrag.com/glossary/#term-p99) at most 50 ms. Generator timing, full acquisition and zero [input-buffer handoffs](https://shadowfrag.com/glossary/#term-input-buffer-handoff)/invalid records were also required. Deliberately delayed paths need their own comparison.

[Read the capacity study](https://shadowfrag.com/blog/capacity-beyond-64/) or [download the measurement summary ↓](https://shadowfrag.com/evidence/current-netcode.json).

### Where the higher counts fell short

A connected client is the beginning of a test. Timing, freshness and recovery still have to hold up.

#### 80 players · dense Ironworks

One clean repeat needed two [input-buffer handoffs](https://shadowfrag.com/glossary/#term-input-buffer-handoff), failing the declared zero-handoff rule. Other long runs overlapped unrelated testing.

#### 160 players · Highlands

Two clean runs passed. A third needed two [input-buffer handoffs](https://shadowfrag.com/glossary/#term-input-buffer-handoff), so the complete series failed the declared rule.

#### 128 players · dense Ironworks

Twice the normal [bandwidth](https://shadowfrag.com/glossary/#term-bandwidth) did not establish dense 128-player play. One run missed the feedback and [position-age](https://shadowfrag.com/glossary/#term-position-age) limits; the long run also missed input timing and needed handoffs.

#### 192 players · large-map fixtures

The [client generator](https://shadowfrag.com/glossary/#term-synthetic-protocol-client) missed its input interval. Connections and traffic were observed, but this run does not establish the server’s maximum.

### Delay, loss and jitter leave different traces

One completed clean 64-player Ironworks star encounter per condition. These are separate live encounters, with the original differences and limitations retained.

| Path | Position-age p99 | Request-feedback p99 | Input-buffer handoffs |
| --- | --- | --- | --- |
| Direct LAN | 16.32 ms | 13.89 ms | 0 |
| 40 ms added RTT | 40.19 ms | 58.78 ms | 0 |
| 40 ms added RTT + 1% loss, no jitter | 47.62 ms | 68.09 ms | 0 |
| 40 ms added RTT + 1% loss + ±2 ms jitter | 87.04 ms | 86.53 ms | 2 |

The combined [jitter](https://shadowfrag.com/glossary/#term-jitter)/loss case also recorded 35 [late actions](https://shadowfrag.com/glossary/#term-input-deadline). [Transport](https://shadowfrag.com/glossary/#term-transport-backend) “considered lost” counters include recovery decisions and are not physical [packet](https://shadowfrag.com/glossary/#term-network-packet)\-drop counts. These observations guide further investigation; no timing or congestion-control relaxation was adopted from them.

## A weapon’s cost _depends on the fight._

Sixteen [active/unused pairs](https://shadowfrag.com/glossary/#term-paired-comparison) compare eight weapons and abilities on two maps, with 64 players and one [seed](https://shadowfrag.com/glossary/#term-seed) per pair. The figures below are changes in total server upload for those encounters.

| Weapon or ability | Ironworks | Shogun Highlands |
| --- | --- | --- |
| Rail | +12.84 | +12.71 |
| Bow | +7.94 | +8.17 |
| Ninja stars | +23.93 | +24.10 |
| Grenades | +9.78 | +18.18 |
| Net | +0.77 | +0.50 |
| Shadow warp | +2.74 | +2.48 |
| Chi-jump | +7.38 | +6.89 |
| Melee | +11.79 | +12.25 |

Deaths, respawn ammunition, visibility and movement changed between encounters. These are measured encounter differences, not additive equipment prices or a supported-player calculator. The older [fitted model](https://shadowfrag.com/glossary/#term-interpolation-model) remains available below as an explicitly dated archive.

## More room _for the fight._

We asked what each repeated byte was doing for the player. Then we measured the changes and kept the ones that preserved the rules.

**33.1 — %**

### Less game payload from the server

**61.4 — %**

### Less game payload from players

**32-client archive · 20–21 October**

Measured rates across implementation stages. These percentages describe game-message bytes—not equal gains in [FPS](https://shadowfrag.com/glossary/#term-fps), ping or server capacity.

[Inspect the counts and timing](https://shadowfrag.com/netcode/#traffic)

### Remember the outfit.

Your PC already knows the ninja’s look. Repeating the wardrobe would spend [bandwidth](https://shadowfrag.com/glossary/#term-bandwidth) without improving the fight.

**What changed technically**

[Round-locked appearance](https://shadowfrag.com/glossary/#term-roster-baseline) moves through an occupant-bound [reliable roster](https://shadowfrag.com/glossary/#term-roster-baseline). The 20 October archive removes 20 cosmetic/suit/band bytes from owner corrections: 283 → 263 bytes in that pass. Score-only roster changes retain cached identity. Late joiners still receive a complete baseline.

### Send the fields this action needs.

The game sends bow-draw details while you are drawing a bow. Other attacks carry the information needed to check that kind of attack.

**What changed technically**

Typed actions keep [FireView](https://shadowfrag.com/glossary/#term-hit-reference) on rail/[melee](https://shadowfrag.com/glossary/#term-melee) and draw dependencies on bow release/cancel. Validated envelope identity is inherited only within the same [packet](https://shadowfrag.com/glossary/#term-network-packet). The archived wire-27 compact owner record is 115–227 bytes. Active draw identity retains its epoch and sequence, including across input recovery.

### Pack smaller. Keep the meaning.

Smaller messages leave more room on the connection without rounding away a precise aim or changing how a jump works.

**What changed technically**

[Exact-default masks](https://shadowfrag.com/glossary/#term-compact-encoding) omit only known bit patterns; nonzero words and negative zero are preserved. Existing canonical actor integers use [varint](https://shadowfrag.com/glossary/#term-compact-encoding)/[ZigZag](https://shadowfrag.com/glossary/#term-compact-encoding) encoding: 21–46 bytes per actor, with a full-frame fallback when compression would grow it. No previous unreliable [packet](https://shadowfrag.com/glossary/#term-network-packet) is needed to decode a scene.

### Keep the safety net for lost packets.

A dropped [packet](https://shadowfrag.com/glossary/#term-network-packet) should not erase a move. Repetition and receipts have a job; we made their representation cheaper.

**What changed technically**

Recent commands retain their loss coverage. Nonempty [acknowledgement](https://shadowfrag.com/glossary/#term-acknowledgement) windows keep their complete 128-bit gap map. Fresh input can carry due receipts; standalone [acknowledgements](https://shadowfrag.com/glossary/#term-acknowledgement) remain for idle/bootstrap/recovery. [QUIC](https://shadowfrag.com/glossary/#term-quic) receipt alone is not proof that a full scene decoded.

### Share work. Do not queue old fights.

The server can prepare common information once, while keeping each player’s timing and identity separate.

**What changed technically**

Immutable actor bytes are prepared once per publication. [Projectile](https://shadowfrag.com/glossary/#term-projectile) retention uses bounded deadline indexes rather than scanning everything. [Native QUIC](https://shadowfrag.com/glossary/#term-quic) send polling resumes when work can produce output. [Queue](https://shadowfrag.com/glossary/#term-queue) bounds and independent expiry remain in place; enlarging a [queue](https://shadowfrag.com/glossary/#term-queue) is not treated as an optimization.

### Let input keep working between frames.

A display wait should not also become a pause in input, [prediction](https://shadowfrag.com/glossary/#term-client-prediction) and incoming results.

**What changed technically**

Those services have an independent owner; rendering consumes [immutable publications](https://shadowfrag.com/glossary/#term-immutable-publication). A [native-resolution scene](https://shadowfrag.com/glossary/#term-native-resolution) without [FXAA](https://shadowfrag.com/glossary/#term-fxaa) can avoid an extra composition pass. The matched ultrawide [fixture](https://shadowfrag.com/glossary/#term-test-fixture) improved [mean frame time](https://shadowfrag.com/glossary/#term-mean) by 8.7%; that renderer result is separate from [bandwidth](https://shadowfrag.com/glossary/#term-bandwidth) and is not a universal [FPS](https://shadowfrag.com/glossary/#term-fps) promise.

### Use the state the match needs.

A small match should not repeatedly copy storage sized for every possible player or [projectile](https://shadowfrag.com/glossary/#term-projectile).

**What changed technically**

Stable, [lazily allocated pages](https://shadowfrag.com/glossary/#term-paged-storage) retain numeric slots and borrowed references. Simulation, history and presentation follow the constructed extent; reused storage is reset before exposure. This is [bounded prefix storage](https://shadowfrag.com/glossary/#term-paged-storage), not an O(active-count) promise for every sparse high-slot case.

### Wake when there is work.

The [network worker](https://shadowfrag.com/glossary/#term-readiness-wait) can wait for incoming [packets](https://shadowfrag.com/glossary/#term-network-packet), outgoing work or the next useful deadline.

**What changed technically**

Native readiness and work notifications replace the unconditional 100-microsecond idle polling ceiling. Urgent messages, fresh [scene fragments](https://shadowfrag.com/glossary/#term-frame-fragment), durable state and cosmetics have bounded service turns. Congestion control, [pacing](https://shadowfrag.com/glossary/#term-pacing) and authenticated ingress deadlines remain enforced.

### Keep retries from queueing twice.

A retry should recover a missing result without repeatedly adding another copy that has not left yet.

**What changed technically**

One [journal receipt](https://shadowfrag.com/glossary/#term-receipt-journal) owns at most one [unsent plaintext attempt](https://shadowfrag.com/glossary/#term-receipt-journal) across application/native [queues](https://shadowfrag.com/glossary/#term-queue). [ACK](https://shadowfrag.com/glossary/#term-acknowledgement) validation requires a submitted identity. [Projectile](https://shadowfrag.com/glossary/#term-projectile)\-lifecycle retry timing uses validated [RTT](https://shadowfrag.com/glossary/#term-rtt) samples with a 31.25–250 ms bound; action/hit-result recovery retains 31.25 ms. Already prepared [QUIC](https://shadowfrag.com/glossary/#term-quic) [packets](https://shadowfrag.com/glossary/#term-network-packet) cannot be recalled.

### The things we kept.

Charged bows, full movement, [bot](https://shadowfrag.com/glossary/#term-bot) abilities, authoritative [cooldowns](https://shadowfrag.com/glossary/#term-cooldown) and the same hit geometry. The compact protocol does not hide reachable enemies or require the last unreliable [packet](https://shadowfrag.com/glossary/#term-network-packet) to decode the next one.

## Network traffic. _Every byte accounted for._

The explorer starts with real 26–27 October [wire-37](https://shadowfrag.com/glossary/#term-wire-protocol) captures: three clean 64-player Ironworks runs and three 128-player [Highlands](https://shadowfrag.com/glossary/#term-shogun-highlands) research runs, using [PicoQUIC](https://shadowfrag.com/glossary/#term-picoquic)/[CUBIC](https://shadowfrag.com/glossary/#term-cubic) across two physical LAN hosts. Change direction, inspect a message or export the counters. Earlier implementation recordings remain selectable as history.

[Download the recordings ↓](https://shadowfrag.com/evidence/network-lab.json)

Inspect a recording

Include message types with zero observed bytes

26–27 Oct 2026 · wire 37 · 64 protocol clients · Dense Ironworks FFA · ninja stars · 3 clean confirmations. The configured game limit remains 64, including bots.

Received network traffic**192.64 kB/s** — Average per client · includes transport

Game-message payload**167.35 kB/s** — Game records after QUIC delivery

Network packets**380.7/s** — Average per client · not game-message count

Bytes accounted for**4,956,487,693** — Raw received IP bytes across the sample

100% = all received [IP bytes](https://shadowfrag.com/glossary/#term-wire-bytes). [Transport overhead](https://shadowfrag.com/glossary/#term-transport-overhead) is included.

| Message / purpose | Share | Traffic rate | Records / second | Bytes / record |
| --- | --- | --- | --- | --- |
| Players in the fight — FramePart | 58.35% | 112.41 kB/s | 128.0 | 878.2 |
| Shots, jumps & effects — Effects | 13.45% | 25.91 kB/s | 57.5 | 450.4 |
| Arrows, stars & grenades — Projectile | 8.23% | 15.85 kB/s | 198.2 | 80.0 |
| Transport remainder — QUIC / remainder | 7.59% | 14.62 kB/s | — | — |
| IP + UDP envelopes — IPv4 / UDP | 5.53% | 10.66 kB/s | 380.7 | 28.0 |
| Your player — Owner | 4.24% | 8.17 kB/s | 64.0 | 127.6 |
| Match & objectives — Objective | 1.49% | 2.88 kB/s | 16.0 | 180.0 |
| Names, looks & scores — Roster | 0.69% | 1.32 kB/s | 12.9 | 102.6 |
| Confirmed action results — Result | 0.20% | 0.38 kB/s | 3.5 | 110.0 |
| Shared clock — Time | 0.18% | 0.35 kB/s | 8.0 | 44.0 |
| Spectator view — Spectate | 0.04% | 0.09 kB/s | 2.0 | 43.0 |

Inspect a message[Back to message totals](https://shadowfrag.com/netcode/#traffic-message-table)

### Players in the fight

`FramePart`

**58.35%**of selected traffic

Where the ninjas are, how they are moving, and which life you are looking at.

Complete [combat scenes](https://shadowfrag.com/glossary/#term-snapshot) arrive in bounded fragments, including the recipient’s actor. The client installs the whole scene together. The compact format reconstructs the same canonical actor state; it does not add pose rounding or depend on the previous [packet](https://shadowfrag.com/glossary/#term-network-packet).

| Contents | Within message | Of all selected bytes | kB/s / player | Sample bytes |
| --- | --- | --- | --- | --- |
| Player state | 92.71% | 54.10% | 104.22 kB/s | 2,681,460,887 |
| Scene headers | 1.82% | 1.06% | 2.05 kB/s | 52,692,992 |
| Fragment envelopes | 5.47% | 3.19% | 6.14 kB/s | 158,075,712 |

**Current scene attribution**

The table uses the [wire-37](https://shadowfrag.com/glossary/#term-wire-protocol) capture’s measured actor, scene-header and fragment-envelope counters. It does not infer compressed per-field sizes from the older canonical player diagram. Player positions and combat identity remain authoritative game state.

#### Receiver counter windows

These are recorded receiver-counter windows, including setup/drain captured by each endpoint. Client counters cover about 44/314 seconds; the server covers about 40/310. Rates divide summed bytes by mean receiver duration; per-client rates divide again by population. Counter windows are not the same as the active-play or [latency](https://shadowfrag.com/glossary/#term-latency)\-screen windows.

Selected receiver duration: 402.03 s across 3 recording(s). Current per-record fields below come from the [wire-37](https://shadowfrag.com/glossary/#term-wire-protocol) instrumentation.

**Follow the delivery: queued → sent → received**

Smaller traffic is useful only if the right information arrives on time. This flow always shows server → players, even when the table is showing inputs.

Accepted by server transport**10.80 MB/s** — Queued game bytes; not a delivery guarantee

Server sent on the network**12.42 MB/s** — Includes transport and packet envelopes

Game bytes received**10.71 MB/s** — All clients; after QUIC delivery

Expired / replaced**68 / 3,752** — Server records during selected windows

These are different accounting points, not a byte-for-byte subtraction funnel. [Transport](https://shadowfrag.com/glossary/#term-transport-backend) admission is not guaranteed transmission. Receiver and sender sample boundaries differ slightly. Expired/replaced counters describe server records, not lost IP [packets](https://shadowfrag.com/glossary/#term-network-packet).

**Compare current and historical recordings**

### Recordings at this population.

Timing columns show the worst-client [p99](https://shadowfrag.com/glossary/#term-p99), or the range across runs. The current physical-LAN workloads and earlier shared-host archives differ in equipment, topology and map state. This table does not isolate a performance improvement between builds.

| Recording | Game payload | Received IP traffic | Scene age · p99 | Action feedback · p99 | Acquisition |
| --- | --- | --- | --- | --- | --- |
| Current build — 26–27 Oct · 3 sample(s) | 167.35 kB/s | 192.64 kB/s | 16.26–16.38 ms | 14.40–19.39 ms | Completed |
| Original archive — 20 Oct · 1 sample(s) | 27.11 kB/s | 44.20 kB/s | 4,984.90 ms | 57.75 ms | Partial / failed |
| Appearance-cache archive — 20 Oct | Failed before sampling |  |  |  |  |
| Compact archive — 21 Oct | Not measured at this population |  |  |  |  |

26–27 October: three clean confirmations per current workload. 20 October: one short sample per recorded population. 21 October compact archive: three short samples at 16 and 32 clients. Missing cells mean no recording, not zero traffic.

**Counter windows, individual runs and source hashes**

Windows i5-12500H server and Linux Ryzen 7 5800H [protocol clients](https://shadowfrag.com/glossary/#term-synthetic-protocol-client) over wired gigabit IPv4 LAN. These are recorded receiver-counter windows, including setup/drain captured by each endpoint. Client counters cover about 44/314 seconds; the server covers about 40/310. Rates divide summed bytes by mean receiver duration; per-client rates divide again by population. Counter windows are not the same as the active-play or [latency](https://shadowfrag.com/glossary/#term-latency)\-screen windows.

| Run | Counter duration | Endpoints | Server tick p99 | Scene age p99 | Feedback p99 | Feedback samples | Status |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Run 1 | 44.01 s | 65/65 | 1.20 ms | 16.38 ms | 18.36 ms | 3,370 | Complete |
| Run 2 | 44.01 s | 65/65 | 1.55 ms | 16.32 ms | 19.39 ms | 3,398 | Complete |
| Run 3 | 314.01 s | 65/65 | 1.40 ms | 16.26 ms | 14.40 ms | 33,250 | Complete |

“Feedback” is a software-measured request disposition, excluding [projectile](https://shadowfrag.com/glossary/#term-projectile) flight. Repeated input/event counters mean an identity was seen more than once; they are not [QUIC](https://shadowfrag.com/glossary/#term-quic) [retransmission](https://shadowfrag.com/glossary/#term-packet-recovery) counts. The 128-player result is conditional research. Current gameplay remains capped at 64 including [bots](https://shadowfrag.com/glossary/#term-bot).

Known IPv4 + [UDP](https://shadowfrag.com/glossary/#term-datagram) overhead is 28 bytes per received [datagram](https://shadowfrag.com/glossary/#term-datagram). The remainder combines [QUIC](https://shadowfrag.com/glossary/#term-quic) framing, tags, [acknowledgements](https://shadowfrag.com/glossary/#term-acknowledgement), recovery and boundary buffering. Ethernet/Wi-Fi bytes are outside the accounting. Decimal units: 1 kB = 1,000 bytes; 1 Mbit/s = 1,000,000 bits/s.

[Wire protocol 37](https://shadowfrag.com/glossary/#term-wire-protocol) · [picoquic](https://shadowfrag.com/glossary/#term-picoquic) · industrial · map hash 3546931156 · 64 clients / 0 [bots](https://shadowfrag.com/glossary/#term-bot)

`out/engine-capacity-20261026/lan-confirm-baseline/industrial-stars-64-seed-826701-eight-workers/attempt-001/metrics.json` — SHA-256 7411fe11e064775fdf760e47fca1b3085423100914e425b19cfdde2991d64e49`out/engine-capacity-20261026/lan-confirm-baseline/industrial-stars-64-seed-826701-eight-workers/attempt-001/windows/metrics.json` — SHA-256 07c51558ab014f9399196311b84b72322920c13a25d0492bad9f3d698fdc459c

`out/engine-capacity-20261026/lan-confirm-baseline/industrial-stars-64-seed-826702-eight-workers/attempt-001/metrics.json` — SHA-256 fbcb1202f4580c6d39b0e14e6d3d2fe4b697829549ab7b16ac2856a1fa1e3f06`out/engine-capacity-20261026/lan-confirm-baseline/industrial-stars-64-seed-826702-eight-workers/attempt-001/windows/metrics.json` — SHA-256 98c7eb3c26f0d53401145905358e88789ac06cc326e75ac78c4f1d46c94273be

`out/engine-capacity-20261026/lan-confirm-baseline/industrial-stars-64-soak-eight-workers/attempt-001/metrics.json` — SHA-256 fd94bff6371a2575592ed467c159986362ff77c3ad343af480d1ed5f17dd7912`out/engine-capacity-20261026/lan-confirm-baseline/industrial-stars-64-soak-eight-workers/attempt-001/windows/metrics.json` — SHA-256 a9084f7607cb1770177096f4ff818b3c25c57e68ea4ef1f070348e62ed035f8a

JavaScript is off. The current 64-player [wire-37](https://shadowfrag.com/glossary/#term-wire-protocol) recording is shown above; download the JSON for the other workloads and historical recordings.

**Earlier uncompressed snapshot-scaling illustration**

## More ninjas. _More people watching._

Add a player and there is one more ninja to describe. There is also one more connection that needs everyone else’s updates. That is why the cost grows faster than the headcount.

This small calculator recreates the **old, uncompressed [snapshot](https://shadowfrag.com/glossary/#term-snapshot) arithmetic** from the original report. It isolates that scaling effect. It is not the current wire codec or a supported-player calculator.

Population in the old-format model

**90.11 kB/s**Snapshots for one recipient

**23.07 Mbit/s**Snapshots sent to everyone

**2**Fragments per complete scene

**Exact arithmetic**

Frame = 32 + 40 × players bytes. Fragments = ceil(frame / 1,052). Rate per recipient = (frame + 48 × fragments) × 64 bytes/s. Includes the recipient’s actor, excludes owner corrections, all other messages and [QUIC](https://shadowfrag.com/glossary/#term-quic)/IP overhead. Input up to 128 is a mathematical illustration; the game limit remains 64.

## The current _projectile payload calculator._

Wire 37 sends a 96-byte launch and a 64-byte [terminal record](https://shadowfrag.com/glossary/#term-projectile-lifecycle) for each [projectile](https://shadowfrag.com/glossary/#term-projectile) recipient. Explore that known [payload](https://shadowfrag.com/glossary/#term-application-payload) directly using the current encoder’s sizes.

### Lifecycle payload

**8.192 Mbps**

128.00 kbit/s per receiving client. This covers [projectile lifecycle](https://shadowfrag.com/glossary/#term-projectile-lifecycle) [payload](https://shadowfrag.com/glossary/#term-application-payload) only.

160 bytes × receiving clients × launches per second.

### One part of the connection

This calculates one launch and one terminal per recipient. Retries, result receipts, movement, scenes, objectives, [QUIC](https://shadowfrag.com/glossary/#term-quic)/IP/[UDP](https://shadowfrag.com/glossary/#term-datagram) and link framing are outside this arithmetic. The result cannot establish a supported player count or the total cost of equipping a weapon.

The [current sixteen encounter comparisons](https://shadowfrag.com/netcode/#encounters) show measured changes under real workloads. [Download the current counters and encoder-source hashes ↓](https://shadowfrag.com/evidence/network-lab.json).

**Earlier fitted equipment model · 21 October 2026**

## The archived _weapon-cost model._

This 21 October study models a fixed 8–12-player class and action schedule. Its fitted costs describe that older build. The current game’s sixteen 64-player encounter pairs are [shown separately above](https://shadowfrag.com/netcode/#encounters); neither study authorizes a player-cap increase.

All outgoing traffic from the server.**700.23 kB/s**

Fitted estimate · before the study’s allowance

Base population traffic**654.99 [kB/s](https://shadowfrag.com/glossary/#term-data-rate-units)**

Bow-holder terms**39.11 [kB/s](https://shadowfrag.com/glossary/#term-data-rate-units)**

Shadow-holder terms**6.14 [kB/s](https://shadowfrag.com/glossary/#term-data-rate-units)**

Combined bow × shadow term**0.00 [kB/s](https://shadowfrag.com/glossary/#term-data-rate-units)**

Observed [median](https://shadowfrag.com/glossary/#term-median): **700.85 [kB/s](https://shadowfrag.com/glossary/#term-data-rate-units)**. Full observed range: 699.90 [kB/s](https://shadowfrag.com/glossary/#term-data-rate-units)–704.64 [kB/s](https://shadowfrag.com/glossary/#term-data-rate-units), from 3 runs.

Native estimate + empirical allowance**704.94 kB/s** — 700.23 kB/s (terms rounded up) + 4.71 kB/s. This is not a guaranteed peak rate.

### Explore the shape of the cost.

Choose a cell to load that class mix. The current shadow-holder count stays fixed. A dot marks an actually measured configuration; other cells are [interpolation](https://shadowfrag.com/glossary/#term-interpolation-model).

| Population | 0 bow | 1 bow | 2 bow | 3 bow | 4 bow |
| --- | --- | --- | --- | --- | --- |
| 8 players | 386.8● | 395.5 | 404.2 | 412.9 | 421.6● |
| 9 players | 448.7 | 458.5 | 468.3 | 478.1 | 487.8 |
| 10 players | 515.1 | 526.0 | 536.8 | 547.7 | 558.5 |
| 11 players | 585.9 | 597.8 | 609.8 | 621.7 | 633.7 |
| 12 players | 661.1● | 674.2 | 687.2 | 700.2● | 713.3● |

### What we learned

In this workload, an additional bow holder adds about **8.69 [kB/s](https://shadowfrag.com/glossary/#term-data-rate-units)** of server outgoing traffic at eight players and **13.04 [kB/s](https://shadowfrag.com/glossary/#term-data-rate-units)** at twelve.

An additional shadow holder adds about **1.08 [kB/s](https://shadowfrag.com/glossary/#term-data-rate-units)** at eight and **1.53 [kB/s](https://shadowfrag.com/glossary/#term-data-rate-units)** at twelve. The costs grow differently because the two features produce different traffic.

These are fitted costs for this class/action schedule—not a universal price for equipping a weapon. Rail, stars, [shrapnel](https://shadowfrag.com/glossary/#term-shrapnel), [melee](https://shadowfrag.com/glossary/#term-melee), nets and [chi-jumps](https://shadowfrag.com/glossary/#term-chi-jump) do not have isolated prices in this study.

**All 14 measured configurations**

Click a configuration to load it. Switching the direction cards above changes this table too. Values are observed [medians](https://shadowfrag.com/glossary/#term-median) and full ranges across three runs. A fit may sit outside that range; the separate allowance is evaluated below.

| Load configuration | Observed median | Observed min–max | Fitted estimate | Fit − median |
| --- | --- | --- | --- | --- |
| 8 players · 0 bow · 0 shadow | 381.97 kB/s | 380.98 kB/s–382.45 kB/s | 382.50 kB/s | 0.53 kB/s |
| 8 players · 0 bow · 4 shadow | 385.82 kB/s | 385.12 kB/s–388.14 kB/s | 386.83 kB/s | 1.02 kB/s |
| 8 players · 4 bow · 0 shadow | 415.76 kB/s | 415.44 kB/s–415.94 kB/s | 417.26 kB/s | 1.50 kB/s |
| 8 players · 4 bow · 4 shadow | 421.95 kB/s | 419.67 kB/s–422.27 kB/s | 421.60 kB/s | -0.35 kB/s |
| 10 players · 0 bow · 0 shadow | 512.14 kB/s | 510.77 kB/s–512.93 kB/s | 509.86 kB/s | -2.28 kB/s |
| 10 players · 0 bow · 2 shadow | 514.93 kB/s | 514.09 kB/s–515.04 kB/s | 512.47 kB/s | -2.45 kB/s |
| 10 players · 2 bow · 0 shadow | 535.49 kB/s | 533.96 kB/s–536.25 kB/s | 531.58 kB/s | -3.90 kB/s |
| 10 players · 2 bow · 2 shadow | 536.76 kB/s | 536.35 kB/s–538.91 kB/s | 534.20 kB/s | -2.56 kB/s |
| 11 players · 3 bow · 3 shadow | 621.81 kB/s | 620.11 kB/s–623.73 kB/s | 620.31 kB/s | -1.50 kB/s |
| 12 players · 0 bow · 0 shadow | 652.48 kB/s | 652.11 kB/s–652.81 kB/s | 654.99 kB/s | 2.50 kB/s |
| 12 players · 0 bow · 4 shadow | 661.47 kB/s | 660.12 kB/s–662.62 kB/s | 661.12 kB/s | -0.35 kB/s |
| 12 players · 3 bow · 4 shadow | 700.85 kB/s | 699.90 kB/s–704.64 kB/s | 700.23 kB/s | -0.63 kB/s |
| 12 players · 4 bow · 0 shadow | 708.21 kB/s | 706.27 kB/s–709.89 kB/s | 707.13 kB/s | -1.08 kB/s |
| 12 players · 4 bow · 4 shadow | 713.55 kB/s | 709.11 kB/s–713.99 kB/s | 713.26 kB/s | -0.29 kB/s |

**Model terms, failed first attempt and fresh validation**

42 clean runs: 33 primary and nine follow-up. Each used 15 seconds of [warm-up](https://shadowfrag.com/glossary/#term-warm-up) and 60 seconds of measurement, on Industrial with the fixed movement/action schedule. The original model underestimated server outgoing rates in two of six evaluation runs, by up to 4,104 [B/s](https://shadowfrag.com/glossary/#term-data-rate-units) (0.575%). Those failures were retained.

The revision added directed player pairs, N × (N − 1). Prior evaluation data became development data; six **new** final runs used configurations (11, 3, 3) and (12, 3, 4), each with three fresh [seeds](https://shadowfrag.com/glossary/#term-seed). The native evaluator agreed with the exported model for all 14 measured configurations.

| Resource | Fresh runs covered | Largest shortfall | Largest excess estimate | Allowance |
| --- | --- | --- | --- | --- |
| Server sends | 6 / 6 | 0 B/s | 5034 B/s | 4705 B/s |
| Server receives | 6 / 6 | 0 B/s | 4743 B/s | 4562 B/s |
| Busiest client receives | 6 / 6 | 0 B/s | 813 B/s | 830 B/s |
| Busiest client sends | 6 / 6 | 0 B/s | 290 B/s | 314 B/s |

Six successful final runs are a small empirical check, not a peak-rate guarantee or production certification. The original report’s simultaneous upper failure-probability bound is about 69%: this small sample cannot establish a rare-failure rate.

#### Exact terms for the selected direction

Multiply each driver by its coefficient and add the results, in [bytes per second](https://shadowfrag.com/glossary/#term-data-rate-units). The native planner rounds each term upward to a whole byte/second before adding the empirical allowance. N = players, B = bow holders, S = shadow holders. A B × S term captures combined class effects; it cannot be assigned entirely to either weapon.

| Driver | Coefficient · B/s | Exact rational coefficient |
| --- | --- | --- |
| 1 (intercept) | 50,760.783024 | 50760783024 / 1000000 |
| N (players) | 25,918.510664 | 25918510664 / 1000000 |
| S (shadow holders) | 183.673653 | 183673653 / 1000000 |
| N × B | 1,086.291830 | 1086291830 / 1000000 |
| N × S | 112.543722 | 112543722 / 1000000 |
| N × (N − 1) | 2,221.227989 | 2221227989 / 1000000 |

The supported study range is 8–12 players and up to four holders of each feature. New maps, weapon timings, class overlaps, firefight densities and player counts need their own measurements. [CPU](https://shadowfrag.com/glossary/#term-cpu), [GPU](https://shadowfrag.com/glossary/#term-gpu), burst traffic, [queues](https://shadowfrag.com/glossary/#term-queue) and Internet conditions are outside this model, so it cannot calculate an overall [player cap](https://shadowfrag.com/glossary/#term-player-cap).

[Observed configurations CSV ↓](https://shadowfrag.com/evidence/observed-wire-rates.csv) · [Exact terms, validation and source hashes JSON ↓](https://shadowfrag.com/evidence/network-lab.json)

JavaScript is off. The 12-player, three-bow, four-shadow example and all observed server-outgoing configurations remain readable above.

## Trust the rules. _Keep the evidence._

A good connection delivers the fight. The server still has to decide which actions are legal.

## A connection cannot remove distance. Good netcode can stop wasting time.

Your game starts your movement locally, while the server checks it against the shared rules. Other players are reconstructed from timestamped updates so an uneven flow of [packets](https://shadowfrag.com/glossary/#term-network-packet) does not have to become an uneven animation. Confirmed hits, [shields](https://shadowfrag.com/glossary/#term-shield) and ammo belong to the server.

The goal is a fight you can read and trust. Local response, smooth remote motion and [server validation](https://shadowfrag.com/glossary/#term-authoritative-state) solve different problems; no single [tick-rate](https://shadowfrag.com/glossary/#term-tick-rate) number replaces all three.

## Proven ideas, fitted to SHADOWFRAG

[Client prediction](https://shadowfrag.com/glossary/#term-client-prediction), [reconciliation](https://shadowfrag.com/glossary/#term-reconciliation), [snapshot interpolation](https://shadowfrag.com/glossary/#term-snapshot-interpolation) and [historical hit checks](https://shadowfrag.com/glossary/#term-historical-hit-check) are established [FPS](https://shadowfrag.com/glossary/#term-fps) techniques. SHADOWFRAG combines them with explicit identities for fast leaps, charged shots, teleports and respawns. Its own timing and combat rules sit above the [transport](https://shadowfrag.com/glossary/#term-transport-backend).

[Native QUIC](https://shadowfrag.com/glossary/#term-quic) carries both time-sensitive [datagrams](https://shadowfrag.com/glossary/#term-datagram) and [reliable control data](https://shadowfrag.com/glossary/#term-reliable-stream). [Datagrams](https://shadowfrag.com/glossary/#term-datagram) let newer state replace old state without waiting for a missing earlier [snapshot](https://shadowfrag.com/glossary/#term-snapshot). Important action results and [projectile lifecycles](https://shadowfrag.com/glossary/#term-projectile-lifecycle) still have game-level receipts and recovery. [PicoQUIC](https://shadowfrag.com/glossary/#term-picoquic) with [CUBIC](https://shadowfrag.com/glossary/#term-cubic) is now the default for new game, Practice and dedicated-server launches. [Quiche](https://shadowfrag.com/glossary/#term-quiche)/[CUBIC](https://shadowfrag.com/glossary/#term-cubic) remains selectable. The current [wire protocol](https://shadowfrag.com/glossary/#term-wire-protocol) is 37; clients and servers need compatible builds. A [transport](https://shadowfrag.com/glossary/#term-transport-backend) name by itself is not a [latency](https://shadowfrag.com/glossary/#term-latency) result.

## Do useful work, then let the worker wait

Player and [projectile](https://shadowfrag.com/glossary/#term-projectile) storage grows in [stable pages](https://shadowfrag.com/glossary/#term-paged-storage). Native [socket readiness](https://shadowfrag.com/glossary/#term-readiness-wait), outgoing work and useful deadlines wake the [network worker](https://shadowfrag.com/glossary/#term-readiness-wait). Fresh [scene fragments](https://shadowfrag.com/glossary/#term-frame-fragment), urgent results, durable records and cosmetic events receive bounded service turns.

Receipt ownership prevents a retry from creating another unsent plaintext copy. [Projectile](https://shadowfrag.com/glossary/#term-projectile)\-lifecycle recovery uses a bounded timing estimate; action and hit-result recovery keeps its shorter interval. A stale [input-epoch grant](https://shadowfrag.com/glossary/#term-input-epoch) is ignored when newer [authoritative state](https://shadowfrag.com/glossary/#term-authoritative-state) has already superseded it. None of these changes relaxes [movement deadlines](https://shadowfrag.com/glossary/#term-input-deadline), damage validation or historical hit bounds.

The 26–27 October LAN study keeps the configured shipping limit at 64 players including [bots](https://shadowfrag.com/glossary/#term-bot). Three clean 128-player [Highlands](https://shadowfrag.com/glossary/#term-shogun-highlands) [FFA](https://shadowfrag.com/glossary/#term-free-for-all) confirmations establish a conditional research result with [synthetic protocol clients](https://shadowfrag.com/glossary/#term-synthetic-protocol-client). Full [Shogun](https://shadowfrag.com/glossary/#term-shogun) AI, rendering, audio and broader Internet conditions need separate integrated [qualification](https://shadowfrag.com/glossary/#term-qualification). [Read the capacity results](https://shadowfrag.com/blog/capacity-beyond-64/) and [the implementation changes](https://shadowfrag.com/blog/less-work-between-input-and-server/).

For the underlying techniques, read [Snapshot Interpolation by Glenn Fiedler](https://gafferongames.com/post/snapshot_interpolation/), the [QUIC transport standard](https://www.rfc-editor.org/rfc/rfc9000.html), and the [QUIC datagram extension](https://www.rfc-editor.org/rfc/rfc9221.html). The measurements on this page come from SHADOWFRAG’s own retained test records.

## Fair play starts with the server

The client requests a move or an attack; it does not award itself damage. The server checks equipment, [cooldowns](https://shadowfrag.com/glossary/#term-cooldown), timing, life and target eligibility. Repeated messages keep their identity, and old messages cannot borrow a new player’s identity after a respawn or reconnect. [Packet](https://shadowfrag.com/glossary/#term-network-packet) and [queue](https://shadowfrag.com/glossary/#term-queue) bounds also limit the work an invalid request can create.

Those safeguards matter, but they are not a claim that cheating is impossible. Competitive [demo recordings](https://shadowfrag.com/glossary/#term-native-demo) provide additional evidence for review. [Read how player and referee demos work](https://shadowfrag.com/blog/demos-for-players-and-referees/).

### Still on the test bench

Mode-specific objective updates, safe timer anchors, acknowledged scene deltas and [projectile](https://shadowfrag.com/glossary/#term-projectile) relevance are opportunities to test—not savings included in these charts. Each needs a recovery rule for [lost packets](https://shadowfrag.com/glossary/#term-packet-loss), late joins, respawns and changing match state.

## No jargon _left behind._

The words used in the lab, in plain English.

[Weapon-request feedback](https://shadowfrag.com/glossary/#term-weapon-request-feedback)

The time for a software attack request to receive its outcome or acceptance. The current study separates it from [projectile](https://shadowfrag.com/glossary/#term-projectile) flight and contact time.

[Input-buffer handoff](https://shadowfrag.com/glossary/#term-input-buffer-handoff)

A coordinated change to the [input schedule](https://shadowfrag.com/glossary/#term-input-epoch) shared by a [client and server](https://shadowfrag.com/glossary/#term-client-server). The direct-LAN [confirmation screen](https://shadowfrag.com/glossary/#term-qualification) required zero such changes during a run.

[Research envelope](https://shadowfrag.com/glossary/#term-qualification)

The specific map, equipment, machines and conditions under which a test passed. It is separate from the game’s configured [player limit](https://shadowfrag.com/glossary/#term-player-cap).

[Prediction](https://shadowfrag.com/glossary/#term-client-prediction)

Your game starts your movement locally instead of waiting for a round trip to the server.

[Reconciliation](https://shadowfrag.com/glossary/#term-reconciliation)

The client corrects a [prediction](https://shadowfrag.com/glossary/#term-client-prediction) from the server’s answer, then replays inputs that still need to be applied.

[Snapshot](https://shadowfrag.com/glossary/#term-snapshot) / scene

A timestamped description of the players, not an image or video frame.

[Interpolation](https://shadowfrag.com/glossary/#term-interpolation-model)

Drawing a smooth path between known states, using a small buffer to absorb uneven [packet](https://shadowfrag.com/glossary/#term-network-packet) arrival.

[Hit reference](https://shadowfrag.com/glossary/#term-hit-reference)

The eligible scene and aiming context attached to a shot. It is not hardware proof of which pixels reached the monitor.

[Tick rate](https://shadowfrag.com/glossary/#term-tick-rate)

How often the server advances game rules. 128 Hz means one step every 7.8125 ms; it is not your ping.

[p99](https://shadowfrag.com/glossary/#term-p99)

The [99th percentile](https://shadowfrag.com/glossary/#term-p99): about 99 out of 100 samples are at or below this value. It is not a maximum.

[Fanout](https://shadowfrag.com/glossary/#term-fan-out)

Sending information about many players to many recipients. More players grow both sides of that work.

[Payload](https://shadowfrag.com/glossary/#term-application-payload) / overhead

[Payload](https://shadowfrag.com/glossary/#term-application-payload) is the game’s message. Overhead includes the envelopes and [transport](https://shadowfrag.com/glossary/#term-transport-backend) work needed to deliver it.

[Packet loss](https://shadowfrag.com/glossary/#term-packet-loss) / [jitter](https://shadowfrag.com/glossary/#term-jitter)

[Packets](https://shadowfrag.com/glossary/#term-network-packet) can disappear or arrive unevenly. Redundancy, receipt recovery and smoothing address different parts of that problem.

[Current measurements JSON ↓](https://shadowfrag.com/evidence/current-netcode.json)[Current + historical traffic JSON ↓](https://shadowfrag.com/evidence/network-lab.json)[Archived weapon observations CSV ↓](https://shadowfrag.com/evidence/observed-wire-rates.csv)[Earlier comparison projection JSON ↓](https://shadowfrag.com/evidence/netcode-study.json)[Development journal](https://shadowfrag.com/blog/)
