Skip to content

Cross Version Support

the-real-ltcg edited this page Jul 1, 2026 · 1 revision

Cross-Version Support

How it works

Not Enough Spectators runs a small backend Netty server inside the host client and replays the host's captured 26.2 packets to spectators. ViaBridge treats that like a backend server with ViaVersion installed:

  1. At startup it boots a minimal Via platform whose server protocol version is 26.2, and loads ViaBackwards + ViaRewind for the full range of older clients.
  2. A Mixin into SpectatorServerNetworkHandler#channelActive inserts a server-side ViaDecodeHandler / ViaEncodeHandler (with a fresh UserConnection) into every spectator channel.
  3. Via detects each spectator's version from its handshake and translates client <-> 26.2 in both directions.

Check it with /nesvia.

Current status (important)

Same-version (26.2) spectating works. Older-version spectating is currently blocked upstream, not by this mod.

A spectator on, e.g., 1.21.8 completes handshake, login, and the entire configuration phase — Via attaches and translates all the way through — then fails when the old client builds its registries from the received data:

Failed to load registries due to errors
  ... Failed to parse local data (chat_type, damage_type, dimension_type, enchantment, worldgen/biome, ...)
  ... Registry must be non-empty: minecraft:cat_variant, ...

The cause is that ViaBackwards has not yet finished converting 26.2's registry data down to older versions. 26.2 added brand-new registries (sulfur_cube_archetype, dialog, wolf_sound_variant, test_environment, …) that older clients don't understand and ViaBackwards must learn to rewrite/strip. This is the same ViaBackwards used everywhere (ViaProxy, ViaFabric, …), so no alternative setup avoids it.

When will older clients work?

As soon as ViaBackwards ships 26.2 down-conversion. The dependency tracks the ViaBackwards snapshot, so it starts working with just a refreshed rebuild — no code changes:

./gradlew build --refresh-dependencies

Clone this wiki locally