Docs menu

Build on Horizon

Horizon APIs

Horizon has six surfaces that other programs and people build on. Each one has an API (the contract: what you may call, read or write, and what Horizon promises about it) and an SDK (the tools that help you use it). This section has one page per surface, plus the rules every surface follows: stability and versioning.

SurfaceForAPI todayStabilityReference
Modsmod authorsWIT horizon:mods@0.1.0, manifest api 0.1 (code) and 0.2 (content)previewmods-reference.md (generated)
Shadersshader authorsnone yet: packs were removed on 2026-10-24plannednone
Agent controlagents, scripts, testshorizon-ctl, its MCP server, the game's control socketpreviewhorizon-ctl-commands.md (generated)
Servershosts, panels, botshorizon-server commands, server.toml, control API /api/v1stableserver-reference.md (generated)
Launcherplayers' agents, pack makershorizon-launcher commands and its MCP serverpreviewlauncher-commands.md (generated)
Data formatstools that read Horizon's filesbenchmark reports, telemetry, settings files, signed checksumsstable or preview, per formaton that page

How these APIs are designed

  • From the people who use them. Each API starts from what a mod author, a pack author, a server host or an agent needs to do, written down as tasks ("a host backs up the world from a script"), and from how Horizon is built: Rust, wgpu, WebAssembly components and a server thread that runs every world. A function exists because a task needs it.
  • Our own design. Horizon's APIs are not modelled on any other project's. Contributors may know other mod loaders, renderers and server platforms exist, but their source and API references are never read, copied or paraphrased here, and our names, shapes and docs are not taken from theirs. Vanilla Minecraft 26.3 is the reference for game concepts: ids, commands, server.properties, data packs and resource packs.
  • Safe by default. Mods run in a sandbox and can only use the capabilities their manifest declares; the control sockets listen on this computer only, behind a token; nothing here is on by default where it would change vanilla's look or behaviour.
  • Free when unused. An API nobody uses costs nothing per tick or per frame: no engine, no thread, no allocation.
  • One contract for every mode. In-frame single player, the server thread, LAN and the dedicated server run the same gameplay code (AGENTS.md), so a server-side API serves all of them.

References are generated

A reference page is written by code from the source it describes, and a test fails when the two differ:

PageGenerated fromUpdate it with
mods-reference.mdcrates/horizon-mod-sdk/wit/horizon.wit, the manifest's capabilitiesHORIZON_WRITE_DOCS=1 cargo test -p horizon-mods --features pack --test api_reference
server-reference.mdhorizon-server's help, config::TEMPLATE, api::ROUTESHORIZON_WRITE_DOCS=1 cargo test -p horizon-server reference
horizon-ctl-commands.mdthe command table in crates/horizon-client/src/bin/horizon-ctl/commands.rshorizon-ctl help --markdown > docs/horizon-ctl-commands.md
launcher-commands.mdlauncher/src/cli.rsHORIZON_WRITE_DOCS=1 cargo test --manifest-path launcher/Cargo.toml the_launcher_reference

So a pull request that changes an API also changes its reference, and the reviewer sees the API's diff in the reference's diff. The guides (overview, how-to, examples) are written by hand.

Each surface's page

Every page has the same parts: Overview (what you can build), Guide (where to start), Reference, Examples, Stability (the level of each part, per stability.md), Changelog and Not there yet (what is planned, so nobody builds on a guess).

The website shows these pages at playhorizon.dev/docs/api, built from this folder, and a summary for players and authors at playhorizon.dev/docs/apis (website/docs/apis.md).

Edit this page on GitHub · Spotted something wrong? Open an issue or ask on Discord.

Not an official Minecraft product. Not approved by or associated with Mojang or Microsoft.