116a7f7dca
Launchers copy a player's prepared resources to a new release while its preparer declares the same OUTPUT_VERSION (the launcher side is its own pull request). The number is bumped by hand; CI keeps it honest: the parity job already prepares with every change to the preparer, and tools/prepare_output.py check now fails when that preparation's digest is not the one crates/horizon-prepare/output-versions.txt gives the current number, or when the file changed other than by appending a version. The digest canonicalises what differs between two runs of the same preparer (JSON key order, creative tab tag order, lambda class addresses, logs, the sounds): 10 preparations by 5 preparer versions on the three Mac runners give one digest, and a Linux preparation by an older preparer gives the Mac runners' digest for it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Horizon documentation
To play, use the launcher; the project site is playhorizon.dev. These pages are for developers. What is being done now and next, the work board and how to help: the hub (ROADMAP.md, roadmap/README.md for keeping it current).
Build and run
- AGENTS.md and Architecture: where each part of the code lives, how
Gameis organised, which harness checks which area. - Build from source: your own copy of the game, resource preparation,
cargo run. - Native client: options, controls, the dedicated server,
horizon-ctlscripting, packaging, architecture. - Host a server: install
horizon-server, prepare the game files, first run,server.toml, the commands, the web panel, backups, services and Docker; what works today and what doesn't yet. - Hosting a server: design:
horizon-server, the design and the plan: install,server.toml, the CLI, the web panel, backups, services, Docker, and the bot benchmark against vanilla. - Agent control: what AI agents can drive in the launcher and the game, and the design of the control socket,
horizon-ctland MCP. - Graphics: the Simple and Advanced graphics settings, the graphics benchmark and what it measured.
- Benchmark: Horizon against vanilla 26.3 and vanilla with performance mods, on the same machine, world, path and settings: what is measured, how it is kept fair, how to reproduce it.
- Extras: optional zoom, minimap, FPS and keystroke overlays and auto-reconnect, all off by default.
- Shader packs: Horizon's own WGSL shader packs, how to make and check one (
horizon-shader). - Mods: Horizon's own mod system (Rust, sandboxed WebAssembly), how to make and install mods.
- Modpacks: porting whole packs (ATM10 and smaller): import, inventory, carry-over, an agent per mod with a harness against the Java original, coverage, and how "10x" is measured.
- Launcher: installs, updates and starts builds; its CLI and MCP server; releasing it.
- Versioning: how releases are numbered from 0.2 (
v0.2.x,launcher@0.2.x), how installs from before 0.2 get there, and the steps for the day 0.2 ships. - Resource packs: everything a 26.3 resource pack can change, whether Horizon honours it, and the proof.
- Opt-in data collection: the consent, exactly what is sent, how it is stored and sent.
- Benchmark report format: the versioned JSON every benchmark writes (game, launcher,
tools/perf_bench.py), the local log and, with consent, the upload. - Horizon APIs: every surface other programs build on (mods, shaders, agent control, servers, the launcher, data formats), each with its guide, generated reference, stability and changelog, and the stability and versioning policy.
- Menus: every screen is vanilla's (title, world list, create world, multiplayer, options, pause). Horizon's own settings hang off vanilla's Options the way mods add theirs: Horizon Settings... and Mods... in the last two slots of the Options grid (Horizon Settings opens Graphics, Advanced Graphics, Controller Settings, Extras and Mods, each a vanilla options list), with Horizon Graphics and Advanced Graphics also at the top of Video Settings and Controller Settings at the bottom of Controls. The title screen's and pause menu's Friends buttons open Join a Friend and Play with Friends (play-with-friends.md).
Parity
- Rust rewrite status: completion criteria, how to reproduce the validation, and per-area scope.
- Parity workflow:
tools/parity.py, the gate, other machines, merging. - Area notes: block behaviours and ticking, section meshing.
- Version ports: how a new Minecraft release is detected, diffed against the pinned one and ported, and what stays manual.
- Decompilation and research lab and decompilation status: the local game inspection workspace the harnesses build on.
Architecture: world generation
- World generation: the pipeline from noise to features.
- Noise generation, compiled density functions, structure density, terrain filling.
- Biomes: lookup, temperatures.
- Surfaces: material surfaces, material conditions, rule libraries, vertical anchors, value providers.
- Carving, heightmaps, feature placement.
Architecture: world data and simulation
- World data: chunk storage, palettes, region files.
- Block-state codecs, scheduled ticks.
- Collision geometry: shapes, collision, movement and fluids.
- Face visibility: which model faces the mesher emits.