BandwidthOptimizer is a client-and-server network bandwidth optimization mod for heavily modded Minecraft servers. It reduces repeated and compressible PLAY traffic while trying to preserve the original Minecraft packet stream after decoding.
It is designed for modpacks and public servers where login sync, custom payloads, machine networks, storage systems, and repeated chunk visits can generate large amounts of network traffic. It is not an FPS optimizer, and it should not be treated as a replacement for normal server, proxy, or network tuning.
!BandwidthOptimizer preview
BandwidthOptimizer is still under active development. Bugs and mod compatibility issues are still possible, especially in large modpacks, proxy networks, and servers with heavy custom payload traffic.
The mod is designed to optimize network packets, not to modify world data or save files. When a packet, boundary, or mod interaction looks unsafe, BandwidthOptimizer tries to fall back to direct or bypass behavior instead of forcing optimization.
If you encounter an issue, please report it with client logs, server logs, proxy logs if applicable, and BandwidthOptimizer report files. Compatibility reports, suggestions, and contributions are welcome.
full, ref, and patch transport decisions.BandwidthOptimizer works below normal gameplay logic. On the sending side, it observes packets after Minecraft or the loader has encoded a complete packet into bytes. The transport layer may then wrap, batch, compress, or bypass that encoded packet.
On the receiving side, the transport frame is unwrapped back into the original encoded packet bytes before normal packet handling continues. The design goal is packet-stream equivalence: after restoration, the receiver should see the same packet types, packet contents, and relative order that it would have seen without BandwidthOptimizer.
| Layer | Purpose |
|---|---|
| Transparent transport | Carries already encoded packet bytes without rewriting gameplay logic. |
| Streaming Zstd | Compresses packet bodies that benefit from byte-level compression. |
| Literal/template mapping | Reduces repeated packet structures while keeping sender and receiver state synchronized. |
| Light batch path | Uses cheaper batch encoding for sensitive flush paths where full template work is too expensive. |
| Chunk transport | Chooses full, ref, patch, or bypass for chunk-related traffic based on available cache state and safety checks. |
| Boundary control | Forces flush, bypass, warmup, or reset around protocol transitions, login/config/play changes, proxy switches, and stale epochs. |
| Reports | Records raw traffic, optimized traffic, bypass causes, packet ranks, and decoder failures for troubleshooting. |
Bandwidth reduction depends on the modpack, player activity, proxy setup, and which packets dominate the traffic. The examples below are from BandwidthOptimizer report files collected during real heavily modded server testing. They are examples, not guaranteed results.
The main metric for this mod is the compression ratio of traffic that actually enters BandwidthOptimizer's transport path. Whole-server raw/actual totals are useful context, but they also include direct packets, compatibility bypasses, cache reuse, and traffic from mods that should not or cannot be compressed. For example, some mod traffic such as WATUT/YSM-style presence or model updates may be bypassed or may compress poorly, so it should not be mixed into the main transport-compression claim.
Live HUD snapshots:
| Environment | Client optimized flow | Server raw to actual | Server optimized flow | Direct flow | Players | Source |
|---|---|---|---|---|---|---|
| Create Delight Remake server 1 | 23.21 MB -> 3.93 MB (16.9%) | 305.35 GB -> 51.12 GB (16.7%) | 40.28 GB (13.2%) | 49.46 GB (16.2%) | 13 | HUD snapshot, v2.7.6.10. |
| Create Delight Remake server 2 | 24.51 MB -> 4.15 MB (16.9%) | 516.70 GB -> 83.24 GB (16.1%) | 57.57 GB (11.1%) | 57.01 GB (11.0%) | 15 | HUD snapshot, v2.7.6.10. |
Source-report managed transport totals:
| Environment | Managed transport | Without WATUT/YSM-like streams | Notes |
|---|---|---|---|
| Create-focused core server | 38976.09 MiB -> 9455.03 MiB (24.3%) | 34580.44 MiB -> 5236.56 MiB (15.1%) | Real mixed traffic with large already-compressed/poorly-compressible sources. |
| Create-focused mirror server | 1046.16 MiB -> 253.89 MiB (24.3%) | 902.82 MiB -> 113.55 MiB (12.6%) | Smaller mixed sample; WATUT-like traffic is visible. |
| Create-focused test server | 1174.31 MiB -> 112.24 MiB (9.6%) | same sample | No WATUT/YSM exception in this TopN sample. |
| Create Delight | 7865.72 MiB -> 1622.43 MiB (20.6%) | 7774.54 MiB -> 1539.90 MiB (19.8%) | Public modpack source-report snapshot. |
| Create Delight secondary snapshot | 4567.66 MiB -> 603.15 MiB (13.2%) | not separated | Earlier report snapshot. |
High-impact traffic-source examples:
| Source | Environment | Raw observed | Actual transmitted | Actual/raw ratio |
|---|---|---|---|---|
ClientboundLevelChunkWithLightPacket | Create-focused core server | 9062.88 MiB | 481.85 MiB | 5.3% |
ClientboundLevelChunkWithLightPacket | Create-focused test server | 713.65 MiB | 16.84 MiB | 2.4% |
ClientboundTabListPacket | Create-focused core server | 6354.97 MiB | 655.45 MiB | 10.3% |
lightmanscurrency:network | Create-focused core server | 8206.80 MiB | 593.69 MiB | 7.2% |
create:deployer block entity data | Create Delight | 510.41 MiB | 71.61 MiB | 14.0% |
Low-benefit traffic-source examples:
| Source | Environment | Raw observed | Actual transmitted | Actual/raw ratio | Path |
|---|---|---|---|---|---|
watut:main | Create-focused core server | 4157.94 MiB | 3974.80 MiB | 95.6% | BATCH_DIRECT_FALLBACK |
yes_steve_model:2_6_0 | Create-focused core server | 514.63 MiB | 510.50 MiB | 99.2% | BATCH_TRANSPORT_SHARE |
watut:main | Create-focused mirror server | 146.07 MiB | 143.07 MiB | 97.9% | BATCH_TRANSPORT_SHARE |
watut:main | Create Delight | 91.18 MiB | 82.53 MiB | 90.5% | BATCH_TRANSPORT_SHARE |
These streams are already compressed, encrypted, or near-random enough that a second compression layer has little room to help. They are still shown here because they explain why mixed-server totals can look worse than the high-impact packet families above.
To reproduce comparable measurements on your own server:
optimized flow line, or filter source reports to rows whose
path enters transport, such as BATCH_TRANSPORT_*, SINGLE_TRANSPORT, or
chunk transport rows.bandwidthoptimizer:transport
carrier packets as new raw source traffic.Important report locations:
bandwidthoptimizer-native/transport-source-report/latest-source-report.md
bandwidthoptimizer-native/transport-bypass-report/latest-bypass-report.md
bandwidthoptimizer-native/decoder-exception-dump/
Mechanomania was also checked with BandwidthOptimizer diagnostic output in the current test set. The available snapshot contained bypass and packet-rank reports but not a source raw/actual summary, so it is listed as a tested environment rather than used as a compression-ratio claim.
The author has tested BandwidthOptimizer in several heavily modded environments, including:
This means these environments have been used for compatibility testing. It does not guarantee that every possible mod combination, proxy topology, or server configuration is covered.
Choose the build that matches both your Minecraft version and loader.
| Loader | Minecraft | Notes |
|---|---|---|
| Forge | 1.19.2 | Forge 43.x target. |
| Forge | 1.20.1 | Forge 47.x target. |
| Fabric / Quilt | 1.20.1 | Requires Fabric API. Published for Fabric and Quilt loaders. |
| Fabric / Quilt | 1.21.1 | Requires Fabric API. Published for Fabric and Quilt loaders. |
| NeoForge | 1.21.1 | NeoForge 21.x target. |
Forge and NeoForge builds use loader config files generated under config/.
Fabric and Quilt builds include matching runtime code and still require Fabric
API.
mods folder.mods folder.If client and server versions do not match, the transport channel may be disabled or fail to negotiate correctly.
Main loader-generated config files:
config/bandwidthoptimizer-common.toml
config/bandwidthoptimizer-client.toml
Important areas:
| Area | Purpose |
|---|---|
| PLAY batch options | Controls reference deduplication, SHA-256 dictionary, template dictionary, Zstd, streaming Zstd, and async batch encoding. |
| Template dictionary limits | Caps packet size, entry count, payload bytes, diff runs, and changed bytes for mapping work. |
| Chunk cache budget | Controls client-side chunk cache memory and persistent backup behavior. |
| Debug analysis | Enables heavier manual analysis commands such as transport reports and packet ranks. |
| Decoder dump | Writes detailed packet dumps when decoder failures are detected. |
| Runtime properties | Advanced overrides such as bandwidthoptimizer.transport.batchWindowMillis, bandwidthoptimizer.transport.mappingEnabled, and bandwidthoptimizer.transport.zstdEnabled. |
Most servers should start with the default configuration and only change these options while comparing report output before and after the change.
| Command | Description |
|---|---|
/bandwidthoptimizer | Shows available BandwidthOptimizer commands. |
/bandwidthoptimizer hud | Toggles the client HUD. |
/bandwidthoptimizer stats | Shows server bandwidth totals. |
/bandwidthoptimizer stats total | Shows persisted total server bandwidth stats. |
/bandwidthoptimizer stats players [limit] | Shows top player/channel bandwidth stats. |
/bandwidthoptimizer stats reset | Resets persisted server bandwidth stats. |
/bandwidthoptimizer test transportreport run [ticks] | Starts a short transport compression report. Requires debug analysis. |
/bandwidthoptimizer test transportreport status | Shows transport report capture status. |
/bandwidthoptimizer test packetrank run [ticks] | Starts a packet-rank capture. Requires debug analysis. |
/bandwidthoptimizer test packetrank status | Shows packet-rank capture status. |
BandwidthOptimizer intentionally bypasses or flushes around packets and states where optimization could change observable timing or ordering. This includes protocol transitions, strong timing boundaries, stale transport epochs, unsafe serverbound carrier sizes, selected compatibility cases, and packets where direct delivery is safer than wrapping.
Velocity proxy setups are supported and tested, but proxy switching and reconnect behavior can expose timing-sensitive bugs in any transport layer. When reporting a proxy issue, include client logs, backend server logs, proxy logs, and the generated BandwidthOptimizer report files.
When reporting a problem, please include:
latest-source-report.md and latest-bypass-report.md if available.Thanks to the server owners, modpack maintainers, and players who provided logs, packet dumps, compatibility reports, and real traffic samples from heavily modded servers. Those reports are what make the optimization and compatibility rules practical instead of theoretical.
This project is licensed under GNU LGPL 2.1-only.
