Horizon server @PACK_VERSION@ — Minecraft 26.3, Fabric 0.19.5, Java 25 Install Python 3.10+ and native Java 25. Extract this ZIP and open a terminal here. python3 tools/server.py prepare Read Minecraft's EULA at https://www.minecraft.net/eula. Create/edit .local/server/optimized/eula.txt to contain eula=true if you agree, then: python3 tools/server.py run --heap 4G Windows: use python in place of python3 if needed. Server downloads and assets stay in .local. No game code, third-party mod JARs or credentials are bundled. Lithium and FerriteCore optimize the original simulation/storage; tick rate and vanilla gameplay rules are retained. No Paper-style gameplay configuration. From the server console: horizonserver bench populated-50 120 horizonserver stop From an operator's in-game chat, prefix each command with /. JSON/CSV reports appear in the instance's horizon-benchmarks directory. They record actual peak players, tick execution durations, observed tick count per elapsed second, JVM heap/GC and platform metadata. meanRate is tick execution capacity, NOT TPS. An idle server does not establish performance for 50 active players. Baseline: python3 tools/server.py prepare --baseline python3 tools/server.py run --baseline --heap 4G Use separate world copies with the same seed, settings, Java and maximum heap. Only run one at a time unless you give them distinct ports/resources. When benchmarking 50 players include normal exploration, entity farms, redstone and chunk loading; repeat with 1, 10 and 100. Do not change simulation/view distance between matched runs or turn off game logic to manufacture a speedup. This first release has not been validated under a 50-player real workload. Optional Java 25 HotSpot experiment: add --compact-headers to the run command. Reports capture the actual compact object header flag and collector names. Compare against the same workload with the flag omitted; object allocation changes do not establish a whole-server RAM/TPS gain. Optional collector comparison: select --gc g1 or --gc zgc on the run command. Match world, player activity, heap, Java and header mode; use one collector at a time. gc_time_ms includes collector cycle accounting, not a measured pause total. Use JFR pause events for pause analysis and compare RSS/CPU/TPS together. Compare generated reports: python3 tools/compare_benchmarks.py baseline-ticks.json optimized-ticks.json --strict Baseline must be a separate instance: --baseline adds no optimizers but doesn't delete mods from an existing optimized instance. Use clean directories.