Files
Ludovic Marie a295df1fd7 Merge pull request #9277 from martipops/controller/menu-actions
🤖 Agent: verified merged with main 81dad4693 on the desktop: fmt, clippy -D warnings on the four client crates (all targets) and the --no-default-features server build, 2750 horizon-client/-lib tests and 1358 render tests pass. One point checked by hand: with no glyph a button's label is centred exactly where it was (x + floor(w/2) equals the old x + 2 + floor((w - 4)/2)), so mouse players see vanilla's buttons unchanged. pad_menu_e2e not rerun here (windowed, no display over ssh).
2026-11-05 03:51:41 +01:00
..
2026-11-05 00:48:29 +01:00
2026-11-04 15:42:09 +01:00

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 Game is organised, which harness checks which area.
  • Build from source: your own copy of the game, resource preparation, cargo run.
  • Build times: tools/build_times.py measures cold and incremental builds per crate and the critical path, writes a JSON report and a table, and compares two reports; the first numbers, Windows and Linux.
  • Native client: options, controls, the dedicated server, horizon-ctl scripting, 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.
  • The anticheat: the dedicated server's own checks, off unless server.toml's [anticheat] turns them on: violation levels, setback, alerts, kicks, the log, and how to write a check.
  • The chat filter: the dedicated server refuses hate slurs in chat, message commands, signs, anvil names and book titles: the list and its normalising, mutes, temporary bans, [chat_filter].
  • 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.
  • The next server: design: Horizon's dedicated server against vanilla and Pumpkin (measured), the targets, parallel ticking that keeps vanilla's order, the network front, the Horizon fast path, the plugin API and the plan.
  • Survival multiplayer: the official server's smp native mod (economy, market, trades, games of chance, spawn, homes, teleport requests, warps, land claims) and the server hook points it needs; not part of Horizon's own server.
  • For server owners: every server.properties key next to its server.toml field.
  • Agent control: what AI agents can drive in the launcher and the game, and the design of the control socket, horizon-ctl and MCP.
  • Graphics: the graphics settings screen (pages, search, descriptions), the graphics benchmark and what it measured.
  • Server against Pumpkin: Horizon's server and Pumpkin (Rust) under the same bots at 0, 20, 60 and 100 players: tick time, CPU, memory, chunks, join; where Horizon loses, and how to run it again.
  • 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.
  • Narrator: vanilla's text-to-speech (Ctrl+B): the voices per platform, how screens record what they narrate, horizon-ctl narration, and where it still differs from vanilla.
  • Shader packs: Horizon's own WGSL shader packs, how to make and check one (horizon-shader).
  • Mods: content mods (data) and native mods (Rust), how to make, install and publish them. Native mods: how the launcher builds them. Native hook points modelled on NeoForge: the proposal for new hooks.
  • Upgrading a 26.2 data pack: horizon-port-pack upgrade-datapack rewrites a 26.2 worldgen pack in 26.3's formats, and how the rewrite is checked against vanilla.
  • 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, [email protected]), 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), except Horizon's graphics settings, drawn in the design system's Blocks palette. 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 the graphics settings screen, at General or Advanced, and 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

Architecture: world generation

Architecture: world data and simulation

Java comparison profiling