Horizon

HubNow, next and how to help

Where Horizonis going.

What is being done, what comes next, what shipped and where you can help. No dates: things are Now, Next or Later. Read it in plain words, or switch to the technical picture.

Horizon is Minecraft: Java Edition 26.3 rewritten from scratch in Rust, so it runs faster on the same computer. Single player, LAN, servers, resource packs and Horizon's own mods work today, on your own copy of the game.A native Rust and wgpu reimplementation of Java 26.3: the same saves, rules and terrain, checked against the real game by more than 300 differential harnesses (a Java oracle and a Rust probe on the same inputs). Single player runs on its own server thread, like vanilla's integrated server.

Being done now

  1. 01Steady frames at long render distancesMaking Horizon faster than vanilla on every computer, with smooth camera movement even at 32 chunks, by spreading the work better over the processor's cores.Frame pacing at render distance 32 (#678): long frames come from work competing with the render thread. In review: no main-thread tick stutter at high render distances (#3827), each proto chunk's light view built once (#3815), video memory handed back by the vertex arena (#3466), chunk batches assembled on helper threads (#3036), free structure starts in the generation workers (#1760). Still open: far terrain at 48 to 64 chunks (#718) and CPU-bound fields of block entities (#717). Every change shows before and after numbers from tools/perf_bench.py against vanilla 26.3 (docs/benchmark.md).
  2. 02Modpacks' world generation, nativelyMaking the world-generation mods of popular modpacks (new structures, YUNG's dungeons and mineshafts, packs built on Lithostitched) generate their worlds in Horizon, natively and fast.horizon-port-pack carries a pack's data-driven content over, and 26.2 data packs are upgraded to 26.3's format (#3369). In review: worlds taller than 32 sections and each level's shape from its dimension type (#3480, #3488), data-pack biomes in local and remote worlds (#3491), block state providers (#3802), surface rules by biome id (#3366), Lithostitched's pool and processor modifiers (#1777). Mods whose Java code does more than world generation don't run (docs/modpacks.md).
  3. 03Single player as a server: the last differencesSingle player now runs a small server in the background, as vanilla does. We are fixing what still behaves differently there; every fix also works for LAN and server players.Since #1514 single player runs on the server thread (game/integrated.rs) and the window joins it as a client. The open [server-thread] issues list the gaps. In review: breeding's advancement and statistic (#3873), the client's menu when the server replaces the player (#3841), splashes when falling in water (#3621). docs/server-levels.md.
  4. 04Vanilla parity: the player-visible gaps, closedEvery method of the Java game is tracked with where Horizon does it, and the differences players can see are being closed, list by list: mobs, blocks, items, screens, rendering, servers.The port ledger (tools/port_ledger.py, tools/port_map/, #3139) gives every 26.3 method a verdict and links the harnesses that cover it (#3526). The player-visible gaps are ten lists, one per area (#3512 to #3521); a fix translates the vanilla method, ticks its row and carries the parity label. Start from .claude/skills/vanilla-parity.
  5. 05ModsMods for Horizon, as one line of work led by the modding team: native mods the launcher builds into your game, mods on servers, mod screens and settings, tools for mod makers, the registry and machines.One item for all modding work (#3911), led by levzzz5154; the order between the parts is theirs. Native mods on stable hook points (game/native_hooks.rs, #3345, #3346, #3434, #3435) built by the launcher (#3388, #3855); server-side hooks (#3878, #3706); mod-owned screens, input and drawing; tools for mod makers (templates, native.py check); the registry (#1634, #1642, #1659); machines with inventories and menus (#1189); mods that read and change the world through the server. docs/native-mods.md.

Next

  1. 01Fresh benchmarks against vanillaNew public numbers comparing Horizon with vanilla on many kinds of computers, measured the same way every time, with a history that shows what each release changed.Redo the comparison after the current performance work (#1073); reliability, coverage and presentation (#1346); a scene must count as loaded only once its first chunk arrives (#1749). Next: a performance history across releases (an automatic comparison of each release with the last, on a timeline), more report fields (server TPS and MSPT, power, battery drain, temperature, throttling) and more hardware (a MacBook on battery, low-end laptops, community reports). Players' reports come in through --benchmark and horizon-launcher data benchmark (docs/benchmark.md).Performance
  2. 02Faster world creation and entry on small CPUsCreating a world and joining it should be quick even on a four-thread laptop, where a fresh world at 32 chunks can make you wait minutes for the first terrain.Cut the per-column generation cost (noise sampling, surface rules, aquifers) and the lock convoy on structure starts, and leave one core free for the rest of the game as vanilla does (#1760 and #1778, in review, are listed under 'Steady frames at long render distances'). Still to profile on small CPUs: the first seconds of a fresh world deliver no chunk, and fluids remesh for about a minute after loading. Measured with tools/perf_bench.py (docs/benchmark.md, docs/profiling.md).Performance
  3. 03Low-end computers: Steam Deck, old Macs, 8 GBHorizon should run well on small machines: integrated graphics, the Steam Deck, older Macs and 8 GB of memory, with a battery mode that saves power on laptops.Partly done: an opt-in 60 FPS cap with fewer workers on battery, Far Detail Reduced for integrated GPUs and animated textures on the GPU (both shipped). Left: measured targets and fixes per class of machine (memory use, worker counts, startup) on a Steam Deck, old Intel and Apple Silicon Macs and 8 GB computers, reported on the Benchmarks page.Performance
  4. 04Native upscalingDraw the game at a lower resolution and sharpen it to your screen's size, in the way of FSR or DLSS, to gain frames on weaker graphics cards. An optional graphics setting.A render-scale setting below the window size with an upscaler of our own that runs on every wgpu backend. Proof: frame time against native resolution on integrated GPUs, and screenshots for image quality. Issue #1403.Performance
  5. 05Server console, bans and a full admin APIManage a server from a console, ban and pardon players, and drive it from other tools through a full admin API and an MCP server for AI agents.horizon-server console (a text interface), ban, pardon, ban-ip and mcp over stdio. Admin API additions: the player list, kick, ban, op and whitelist, an SSE stream of logs and events, a text metrics endpoint, config GET and PATCH, backup delete and download. The last pieces merged: bans edited while the server is stopped (#9767) and the MCP tools' contracts pinned by a test (#9748). The panel's later features and vanilla's management protocol are their own item (server-panel-management). docs/server.md, docs/api/server.md.Servers and multiplayer
  6. 06Hosting polish: Windows service, safe updatesSmoother hosting: a real Windows service, a backup before every update, backups that keep the world and each player's state, and a changed view distance or message without a restart.A Windows service wrapper instead of the logon scheduled task; backups.before_update; hot reload of config for view distance and the message of the day (needs engine support); backups that keep world and player state (#1808, a contributor's draft, in review). docs/hosting.md, docs/server.md.Servers and multiplayer
  7. 07One single-player path: remove the in-frame worldSingle player has one way to run, the server thread, so every fix works everywhere and there are fewer bugs. The older in-frame mode is removed.--in-frame (also --no-server-thread and HORIZON_SERVER_THREAD=0) ticked the world inside the window's Game. #6473 removes it with the code only it reached (the window's world loader and player tick, its portal travel and loading screen, the in-frame LAN host); the harnesses run on the server thread. See also 'Single player as a server' and docs/server-levels.md.Gameplay parity
  8. 08Faster block lookupsSpeeding up the code that reads and writes the blocks of the world, which almost everything in the game goes through: generation, lighting, meshing and ticking.PalettedContainer and PackedStorage find an entry's word by multiply and shift instead of an integer division (#1790, #1794); meshing looks up baked models by index, not by name (#1747). Each change keeps the paletted storage harnesses identical and shows its microbenchmark in its pull request.Performance
  9. 09Playing on servers: everything shows as it shouldWhen you play on a server, other players, mobs, items and menus look and behave as in vanilla: skins, poses, item names, inventories and server networks.Client-of-a-server fixes in game/remote*.rs and horizon-protocol: mobs' aggressive and item-use flags (#1802, #1798), ghost items after a remote menu (#1795), skins (#1652), cookies and transfer packets for proxy networks (#1650), firework boosts (#1671), living-entity attributes and simulation distance (#1731), styled item names (#1702), primed TNT between updates (#1710).Servers and multiplayer
  10. 10Shader packs, written again from scratchShader packs were removed and are being rebuilt from scratch. They come back, off by default, once the best-known packs draw properly.A clean-room rewrite in horizon-shaderpack, from the packs' public format documentation only: reading packs, the preprocessor and .properties files are merged (#1584, #1585, #1586); translating programs to WGSL through naga, buffers, uniforms and the terrain, entity, sky, weather and hand stages are in review (#1698 to #1801).Rendering
  11. 11A new launcher designA redesigned launcher: every button where you expect it, the fewest clicks to play, add an instance or add mods, smooth animations, and instant startup.Based on the site concept by the Team (Bricolage Grotesque, a night sky and an animated pixel sunset). Screens and flows are designed first, then small PRs; tokens in crates/horizon-theme and rules in docs/design-system.md, the game's vanilla look unchanged. Measured before and after: startup, frame time and idle CPU/GPU, reduced motion honoured. Mods screens separate Horizon native mods from Java mods; a running instance can be stopped from the launcher.Launcher
  12. 12SplitscreenPlay with a friend on the same screen, each with a controller.Issue #2054, built by martipops as a series: up to 16 local players on the server thread's multiplayer (#3541), each controller driving its own player (#3794), joining with a controller (#3801), players in windows of their own (#3825) and the profile page (#3826).Gameplay parity

Recently shipped

  1. 01Enchanted loot in End citiesArmour and tools in End city chests should come enchanted, as in vanilla.loot.rs implements enchant_with_levels: find why the End city chest table's rolls come out bare, and compare them with vanilla's for a few seeds. Issues #1437, #1660. The loot's enchantment functions now reach every table that rolls (#1911, #2037).In v0.2.73
  2. 02End city banners keep their patternBanners in End cities show as plain magenta instead of with their pattern.Compare the banner block entities the End city templates place with vanilla's (EndCityPieces, the templates' block entity NBT, BannerBlockEntity's patterns), in crates/horizon-world/src/worldgen/structure/. Issue #1438; possibly related: #526. The templates' block entities now keep their patterns (#1928).In v0.2.67
  3. 03Play in your languageItem names, container titles and server messages follow the language you pick, as in vanilla. Today parts of the game stay in English.Translatable components resolved through the selected language for items, containers and server text (#1806), on top of the bundled languages the prepared resources carry (#1594). Left: the client's own screens (#1672) and the main menu with zh_cn.In v0.2.65

How to help

Play it and tell us what differs from vanilla (Discord or GitHub), run the benchmark on your computer, vote for what you want next, or pick one of the Help wanted items.Read CONTRIBUTING.md, pick a Help wanted item or a To do card, check vanilla's code for the behaviour, and paste the block python3 tools/pr_ready.py prints in your pull request.

ContributeHelp wantedReport a bugSuggest something(opens in a new tab)

Now

Being worked on, with pull requests open or just merged.

Performance

Steady frames at long render distances

Making Horizon faster than vanilla on every computer, with smooth camera movement even at 32 chunks, by spreading the work better over the processor's cores.Frame pacing at render distance 32 (#678): long frames come from work competing with the render thread. In review: no main-thread tick stutter at high render distances (#3827), each proto chunk's light view built once (#3815), video memory handed back by the vertex arena (#3466), chunk batches assembled on helper threads (#3036), free structure starts in the generation workers (#1760). Still open: far terrain at 48 to 64 chunks (#718) and CPU-bound fields of block entities (#717). Every change shows before and after numbers from tools/perf_bench.py against vanilla 26.3 (docs/benchmark.md).

#3827#3815#3466#3036#1760#678#718#717docs/benchmark.md

PerformanceOngoing

Servers that hold 20 TPS with 50 to 100 players

Servers that keep 20 ticks per second with 50 to 100 players. Today Horizon holds it up to 50 bots and drops to about 10 at 100.Measured against vanilla on equal work (docs/server.md, Scale): Horizon is ahead with few players and when exploring, but vanilla's tick is shorter with 25 to 50 players near spawn. Ideas on the list: send entity changes instead of rebuilding every entity each tick (about 15 percent), fewer memory reads in random ticks and collision scans, cheaper item collision checks, mob AI and natural spawning. The bot benchmark (horizon-bots) is the proof.

#3847#2608docs/server.md

ModpacksOngoing

Modpacks' world generation, natively

Making the world-generation mods of popular modpacks (new structures, YUNG's dungeons and mineshafts, packs built on Lithostitched) generate their worlds in Horizon, natively and fast.horizon-port-pack carries a pack's data-driven content over, and 26.2 data packs are upgraded to 26.3's format (#3369). In review: worlds taller than 32 sections and each level's shape from its dimension type (#3480, #3488), data-pack biomes in local and remote worlds (#3491), block state providers (#3802), surface rules by biome id (#3366), Lithostitched's pool and processor modifiers (#1777). Mods whose Java code does more than world generation don't run (docs/modpacks.md).

#3369#3480#3488#3491#3802#3366#1777docs/modpacks.md

Mods and APIOngoing

Mods

Mods for Horizon, as one line of work led by the modding team: native mods the launcher builds into your game, mods on servers, mod screens and settings, tools for mod makers, the registry and machines.One item for all modding work (#3911), led by levzzz5154; the order between the parts is theirs. Native mods on stable hook points (game/native_hooks.rs, #3345, #3346, #3434, #3435) built by the launcher (#3388, #3855); server-side hooks (#3878, #3706); mod-owned screens, input and drawing; tools for mod makers (templates, native.py check); the registry (#1634, #1642, #1659); machines with inventories and menus (#1189); mods that read and change the world through the server. docs/native-mods.md.

#3855#3351#3353#3360#3706#3878#3345#3346#3388#3434#3435#1634#1642#1659#1596#1635docs/native-mods.md

Gameplay parityOngoing

Single player as a server: the last differences

Single player now runs a small server in the background, as vanilla does. We are fixing what still behaves differently there; every fix also works for LAN and server players.Since #1514 single player runs on the server thread (game/integrated.rs) and the window joins it as a client. The open [server-thread] issues list the gaps. In review: breeding's advancement and statistic (#3873), the client's menu when the server replaces the player (#3841), splashes when falling in water (#3621). docs/server-levels.md.

#1514#3873#3841#3621docs/server-levels.md

LauncherOngoing

Minecraft Java instances in the launcher

Play the real Java game from the Horizon launcher too: vanilla and modded instances, any version, mods from Modrinth filtered to what fits, and your instances imported from other launchers.For an account that owns the game: any version downloaded with the Java it needs (#3406), Java instances, the version list and the CLI (#3395), the start command read from the version JSON (#3419). Next: Play for a Java instance, Fabric and Quilt, then NeoForge and Forge; Modrinth with compatibility filtering and dependencies; imports from Prism, MultiMC, the CurseForge app, the Modrinth App, ATLauncher and the official launcher, each from its documented on-disk format.

#3395#3406#3419#3506

Code and toolsOngoing

Vanilla parity: the player-visible gaps, closed

Every method of the Java game is tracked with where Horizon does it, and the differences players can see are being closed, list by list: mobs, blocks, items, screens, rendering, servers.The port ledger (tools/port_ledger.py, tools/port_map/, #3139) gives every 26.3 method a verdict and links the harnesses that cover it (#3526). The player-visible gaps are ten lists, one per area (#3512 to #3521); a fix translates the vanilla method, ticks its row and carries the parity label. Start from .claude/skills/vanilla-parity.

#3512#3513#3514#3515#3516#3517#3518#3519#3520#3521#3526#3139tools/port_ledger.py

Next

Decided, and up after what is being done now.

Performance

Fresh benchmarks against vanilla

New public numbers comparing Horizon with vanilla on many kinds of computers, measured the same way every time, with a history that shows what each release changed.Redo the comparison after the current performance work (#1073); reliability, coverage and presentation (#1346); a scene must count as loaded only once its first chunk arrives (#1749). Next: a performance history across releases (an automatic comparison of each release with the last, on a timeline), more report fields (server TPS and MSPT, power, battery drain, temperature, throttling) and more hardware (a MacBook on battery, low-end laptops, community reports). Players' reports come in through --benchmark and horizon-launcher data benchmark (docs/benchmark.md).

#1073#1346#1749docs/benchmark.md

Performance

Faster world creation and entry on small CPUs

Creating a world and joining it should be quick even on a four-thread laptop, where a fresh world at 32 chunks can make you wait minutes for the first terrain.Cut the per-column generation cost (noise sampling, surface rules, aquifers) and the lock convoy on structure starts, and leave one core free for the rest of the game as vanilla does (#1760 and #1778, in review, are listed under 'Steady frames at long render distances'). Still to profile on small CPUs: the first seconds of a fresh world deliver no chunk, and fluids remesh for about a minute after loading. Measured with tools/perf_bench.py (docs/benchmark.md, docs/profiling.md).

docs/benchmark.mddocs/profiling.md

Performance

Low-end computers: Steam Deck, old Macs, 8 GB

Horizon should run well on small machines: integrated graphics, the Steam Deck, older Macs and 8 GB of memory, with a battery mode that saves power on laptops.Partly done: an opt-in 60 FPS cap with fewer workers on battery, Far Detail Reduced for integrated GPUs and animated textures on the GPU (both shipped). Left: measured targets and fixes per class of machine (memory use, worker counts, startup) on a Steam Deck, old Intel and Apple Silicon Macs and 8 GB computers, reported on the Benchmarks page.

docs/benchmark.mdplayhorizon.dev/docs/performance

Performance

Native upscaling

Draw the game at a lower resolution and sharpen it to your screen's size, in the way of FSR or DLSS, to gain frames on weaker graphics cards. An optional graphics setting.A render-scale setting below the window size with an upscaler of our own that runs on every wgpu backend. Proof: frame time against native resolution on integrated GPUs, and screenshots for image quality. Issue #1403.

#1403#3762#3763#3764

Performance

Faster block lookups

Speeding up the code that reads and writes the blocks of the world, which almost everything in the game goes through: generation, lighting, meshing and ticking.PalettedContainer and PackedStorage find an entry's word by multiply and shift instead of an integer division (#1790, #1794); meshing looks up baked models by index, not by name (#1747). Each change keeps the paletted storage harnesses identical and shows its microbenchmark in its pull request.

#1790#1794#1747

Servers and multiplayer

Server console, bans and a full admin API

Manage a server from a console, ban and pardon players, and drive it from other tools through a full admin API and an MCP server for AI agents.horizon-server console (a text interface), ban, pardon, ban-ip and mcp over stdio. Admin API additions: the player list, kick, ban, op and whitelist, an SSE stream of logs and events, a text metrics endpoint, config GET and PATCH, backup delete and download. The last pieces merged: bans edited while the server is stopped (#9767) and the MCP tools' contracts pinned by a test (#9748). The panel's later features and vanilla's management protocol are their own item (server-panel-management). docs/server.md, docs/api/server.md.

#9767#9748docs/server.mddocs/api/server.md

Servers and multiplayer

Hosting polish: Windows service, safe updates

Smoother hosting: a real Windows service, a backup before every update, backups that keep the world and each player's state, and a changed view distance or message without a restart.A Windows service wrapper instead of the logon scheduled task; backups.before_update; hot reload of config for view distance and the message of the day (needs engine support); backups that keep world and player state (#1808, a contributor's draft, in review). docs/hosting.md, docs/server.md.

#1808docs/hosting.md

Servers and multiplayerOngoing

Playing on servers: everything shows as it should

When you play on a server, other players, mobs, items and menus look and behave as in vanilla: skins, poses, item names, inventories and server networks.Client-of-a-server fixes in game/remote*.rs and horizon-protocol: mobs' aggressive and item-use flags (#1802, #1798), ghost items after a remote menu (#1795), skins (#1652), cookies and transfer packets for proxy networks (#1650), firework boosts (#1671), living-entity attributes and simulation distance (#1731), styled item names (#1702), primed TNT between updates (#1710).

#1802#1798#1795#1652#1650#1671#1731#1702#1710

Gameplay parity

One single-player path: remove the in-frame world

Single player has one way to run, the server thread, so every fix works everywhere and there are fewer bugs. The older in-frame mode is removed.--in-frame (also --no-server-thread and HORIZON_SERVER_THREAD=0) ticked the world inside the window's Game. #6473 removes it with the code only it reached (the window's world loader and player tick, its portal travel and loading screen, the in-frame LAN host); the harnesses run on the server thread. See also 'Single player as a server' and docs/server-levels.md.

#6473docs/server-levels.md

Gameplay parity

Splitscreen

Play with a friend on the same screen, each with a controller.Issue #2054, built by martipops as a series: up to 16 local players on the server thread's multiplayer (#3541), each controller driving its own player (#3794), joining with a controller (#3801), players in windows of their own (#3825) and the profile page (#3826).

#2054#3541#3777#3794#3801#3825#3826

RenderingOngoing

Shader packs, written again from scratch

Shader packs were removed and are being rebuilt from scratch. They come back, off by default, once the best-known packs draw properly.A clean-room rewrite in horizon-shaderpack, from the packs' public format documentation only: reading packs, the preprocessor and .properties files are merged (#1584, #1585, #1586); translating programs to WGSL through naga, buffers, uniforms and the terrain, entity, sky, weather and hand stages are in review (#1698 to #1801).

#1561#1584#1586#1698#1771#1786#1801#9045#6233#6485#3734#3125

Launcher

A new launcher design

A redesigned launcher: every button where you expect it, the fewest clicks to play, add an instance or add mods, smooth animations, and instant startup.Based on the site concept by the Team (Bricolage Grotesque, a night sky and an animated pixel sunset). Screens and flows are designed first, then small PRs; tokens in crates/horizon-theme and rules in docs/design-system.md, the game's vanilla look unchanged. Measured before and after: startup, frame time and idle CPU/GPU, reduced motion honoured. Mods screens separate Horizon native mods from Java mods; a running instance can be stopped from the launcher.

#3635#3636#3637docs/design-system.mdcrates/horizon-theme

Later

Decided, further out.

Performance

Exact far terrain from real chunks

Far terrain drawn from the world you really built and explored, caves and builds included, not only a preview from the seed.Keep a 3D mip store on disk built from real chunks, drawn by the GPU beside the seed preview for areas nobody has visited. Written from scratch and measured before it is kept. Builds on Far Detail and the far-terrain levels of detail already shipped; the open work on them is #718.

#718#4678

Performance

A batch of targeted optimisations

Several smaller speed-ups, each measured: idle block entities that sleep, cheaper particles, faster structure placement, high-rate mice and very large texture packs.Block entities and hoppers that skip work when idle (the hopper item scan is already skipped when no item is near); a particle frustum test first (also a parity gap), then particle quads built on the GPU; jigsaw shortcuts that skip blocked connectors and pool elements known not to fit, with layouts unchanged (trial chambers and ancient cities first); batched raw mouse input on Windows for 8000 Hz mice; a better atlas packer for huge resource packs (a 64x pack builds a 704 MiB atlas for 452 MiB of textures); sign-heavy scenes (#1461). Profile first, keep what pays, show before and after numbers.

#1461docs/profiling.md#7752#8251#10229

Modpacks

Older Fabric and Forge mods

Recognise mods built for versions before 26.1 in the mod browser, so they can be checked and carried over like newer ones.A mapping table from intermediary and SRG names so pre-26.1 jars can be classified, and a rename for mod ids with dashes (fabric-api); the port step then treats them like newer jars (docs/mod-browser.md).

docs/mod-browser.md#10262

Modpacks

A modpack's own resource and shader packs

Imported modpacks carry their resource packs into a profile of their own. Shader-pack conversion is still pending.Resource-pack carry-over is implemented locally: Modrinth common/client overrides, CurseForge's override folder, installed instances (ZIP and directory packs), and hash-checked indexed ZIP downloads. The launcher keeps profile edits and lets resource-only profiles play; packs are enabled in Resource Packs. Synthetic import and profile tests cover the file pipeline; in-game rendering has not been verified. Shader-pack conversion is still pending, so this combined item remains partial (docs/modpacks.md).

docs/modpacks.md

Modpacks

Whole modpacks, such as ATM10, rewritten

Rewriting a complete big modpack for Horizon so it runs far better than the original. Not a priority now: the work above comes first.The project's first goal for modpacks: support them ten times better than vanilla and port any of them. It was set aside in favour of compatibility through the browser. What exists: ATM10's world generates and 42 of its 496 mods are carried at least in part (docs/modpacks.md). It depends on 'Mods with code' and the native mod API.

docs/modpacks.md

Modpacks

Running Java mods that aren't rewritten

Run Java mods that nobody has rewritten for Horizon yet, through a bridge or a converter. Hard and not started: the Convert button and native rewrites come first.Earlier research (#527, closed) found that Java mods can't simply run, because they call Minecraft's own classes. Option to look at again: a bridge for simple Fabric mods.

#527

Modpacks

CurseForge in the mod browser (coming soon)

Coming soon: search and download CurseForge mods and modpacks from the launcher, as you can with Modrinth today.The mod browser lists CurseForge as coming soon (docs/mod-browser.md): it needs CurseForge API access. Meanwhile packs import from a CurseForge zip or instance folder, and jars only CurseForge hosts come from the player's own instance (docs/modpacks.md).

docs/mod-browser.mddocs/modpacks.md

Modpacks

A Convert to Rust button for what isn't rewritten yet

When a mod, shader pack or modpack hasn't been rewritten for Horizon, one button converts what can be converted, so you don't have to wait for the rewrite.Generalise the mod browser's Port step (horizon-port-pack: the data, assets, worldgen and block and item definitions of Java mods, .mrpack and CurseForge zips) to every kind of content: code mods as native mods (see 'Mods with code') and shader packs, converting an Iris/OptiFine pack into Horizon's format. The browser says what works before the install. Java code itself does not run (docs/modpacks.md, docs/mod-browser.md).

docs/modpacks.mddocs/mod-browser.md

Modpacks

Mods with code: machines, magic, mobs

Making mods that add machines, magic and mobs work in Horizon, in steps, starting with machines. They are most of what a big modpack is made of.333 of the 496 mods in a big pack (ATM10) contain code. Issue #1854 ranks the gaps (ticking block entities, networking, rendering, menus, inventories) that unlock them in tiers, with machines first as the recommended path. Code mods are native mods now (docs/native-mods.md): each port is a horizon-mixins bundle. The path isn't started yet (docs/modpacks.md).

#1854docs/modpacks.mddocs/native-mods.md

Modpacks

Data packs in the mod browser

Search and install data packs from the launcher's mod browser, for the world you choose, as you do mods and resource packs.A Datapacks tab beside Mods and Resource packs: install into a chosen world's datapacks folder, with the same checks and 'works in Horizon' notes as the other kinds (docs/mod-browser.md).

docs/mod-browser.md

Servers and multiplayer

Server panel extras and vanilla's management protocol

More of a server managed from its web panel (bans, worlds, logs and crash reports, modpacks), and vanilla's own server-management tools working with a Horizon server.The panel's later features (bans, worlds, server.properties import, logs and crash reports, modpacks) and vanilla's management protocol (the JSON-RPC over WebSocket that the management-server-* keys configure), so vanilla's tools can manage a Horizon server. Split from server-admin. docs/server.md, docs/api/server.md.

docs/server.mddocs/api/server.md

Servers and multiplayer

Join servers on older versions

Join servers that run older Minecraft versions, such as 1.21 or 1.8 PvP servers, from Horizon.Asked often in the suggestion queue. Horizon speaks 26.3's protocol; the path is a native protocol adapter in Rust that translates older versions' packets, not a downloaded Java proxy. Java instances in the launcher already play any version with the real game.

#3023

Servers and multiplayer

Online-mode checks for Play with Friends

Friends who join through an invite code could prove who they are with their Microsoft account, as on online-mode servers.Play with Friends joins over an encrypted tunnel with an invite code (docs/play-with-friends.md, 'Identity'). Online-mode checks against Mojang's session servers can be added on top of the same tunnel; they need Microsoft sign-in first, which is coming soon. Play with Friends stays self-hosted between players, with no relay run by the project.

docs/play-with-friends.md

Servers and multiplayer

Prepare a version without Java

Set up Horizon, a server first, without Java on your computer: published tables are combined with your own copy of the game.Today horizon-prepare runs Mojang's exporters with Java. Issue #1750 proposes publishing the computed version tables once from CI and assembling the rest locally from the player's own jar and assets, provided the tables hold no Mojang content; a contributor offered a pull request, and it would help phones too. A server-only prepare from server.jar alone is the first step (docs/server.md).

#1750docs/server.md

Servers and multiplayer

Guided hosting with Tailscale and an invite button

In the launcher, a guide and a button to host a server and invite friends over Tailscale, so nobody has to open ports on a router.On the Servers page (create, start, back up, update and invite are shipped) add a Tailscale setup that explains and checks each step, and an invite button that hands friends what they need to join over the tailnet. Buttons first, no docs needed, with the details in an Advanced section. Remote access over Tailscale is already described in docs/server.md.

docs/hosting.mddocs/server.md

Servers and multiplayer

An official Docker image for servers

An official image to run a Horizon dedicated server in Docker with one command, your own copy of the game files mounted in.The repository has the Dockerfile (packaging/server/Dockerfile: a multi-stage build on Debian bookworm-slim, user horizon, volume /data, port 25565, game files mounted read-only, HORIZON_EULA and friends answering the first-start questions), and anyone can build it (docs/hosting.md, section 9). Left: publish the image to a public registry from the release workflow, tagged per release, so it follows the same checks, and update the docs and the launcher. The image never holds Mojang's files.

docs/hosting.mddocs/server.md

Servers and multiplayer

A server you install with one command

Install and run a Horizon dedicated server from a terminal with a single command, no launcher needed, for VPSes and headless machines.A player's idea (#horizon-ideas). horizon-server already runs headless; left: an install script (Linux/macOS shell, Windows PowerShell) that fetches the signed release, checks it, asks for or points at the player's own game files and starts the server, documented in docs/hosting.md.

docs/hosting.md

Servers and multiplayer

Ready-made setups for hosting panels

Install a Horizon server from the panels hosts use, such as Pterodactyl and AMP, the usual way for each panel.Asked in the suggestion queue for Pterodactyl eggs and AMP templates. Builds on the one-command install ('A server you install with one command') and horizon-server's server.toml (docs/hosting.md).

docs/hosting.md

Mods and API

Scripts for mods

Small mods written as scripts, in the style of KubeJS, with no compiler.Waits for native mods to settle: a script layer over the native hook points is to be designed.

docs/native-mods.md

Mods and API

Orbital Laser on the normal game

The community mod Orbital Laser, made for a fork of Horizon, running on the normal game as a native mod and listed in the registry.A native port (a horizon-mixins bundle, docs/native-mods.md) of https://github.com/Stink-O/orbital-laser (MIT), which today runs through its author's fork. Tested in the game, and listed in the registry.

github.com/Stink-O/orbital-laser

Mods and API

Native versions of popular client mods

Built-in versions of the client mods players ask for: block info on hover, a world map, inventory tweaks and schematic overlays.Done: a mod list and menu, minimap, zoom, keystrokes, an FPS counter and a recipe viewer, as native mods (horizon-mods/native/). Asked for: an angled world map that shows hills, overhangs and caves, inventory tweaks (drag and scroll to move items), block info tooltips and schematic overlays.

docs/extras.mddocs/native-mods.md

Mods and API

Create-style physics as a native mod

Contraptions and physics like the Create and Aeronautics mods, as a mod for Horizon rather than part of the base game.Issue #805 (porting QOL mods) closed with this answer: it would come as a native Horizon mod.

#805#6302#5313#5556

Mods and API

Proximity voice chat as a native mod

Hear nearby players talk, as with the voice chat mods of other Minecraft versions, as a Horizon mod.A native mod (docs/native-mods.md). It needs a way to carry voice between players and an audio path in the game before anything can be built.

docs/native-mods.md

Gameplay parity

Every Minecraft version, prepared automatically

Every past and future Minecraft version prepared for Horizon automatically. When Mojang releases one, Horizon follows it, and every system is checked against it again.The port pipeline (docs/version-ports.md, tools/version_port.py) detects a release, prepares it, diffs its classes against the pinned 26.3, regenerates the data-driven tables, runs every parity harness on it and writes a port report that becomes issues. The goal is as little human work as possible for any version, past or future. Detection and the first slices are merged; the scheduled agent that runs it every day isn't installed yet. Two versions in one build are out of scope.

docs/version-ports.md#4758

Gameplay parity

Controllers: tested on real pads, and in the launcher

Make controller support solid: tested with real PlayStation and Xbox pads and a Steam Deck, and usable in the launcher too.The game side is merged (docs/controllers.md): pads read with gilrs, menus, rumble, glyphs, remapping and DualSense adaptive triggers, lightbar and haptics, but not yet confirmed on real pads or a Steam Deck (DualSense haptics stay behind a switch until then). Left: a test pass on real hardware, and the same focus navigation in the GPUI launcher.

docs/controllers.md#10298#8678

Gameplay parity

The full debug screen

Vanilla's complete F3 screen: debug options, a profiler chart, ten-second captures and an atlas dump.Today F3 shows position, chunk, light, biome and FPS (docs/native-client.md). Vanilla also has F3+F6 debug options with profiles, F3+1 the profiler pie, F3+L a ten-second capture and F3+S the atlas dump (#562 asked for the F3 editor).

#562docs/native-client.md

Gameplay parity

Pistons push players and mobs

Pistons and slime blocks will push players, mobs and items as in vanilla. Today moving blocks pass through them.Port PistonMovingBlockEntity.moveCollidedEntities and moveStuckEntities (honey), the slime bounce and Entity.limitPistonMovement for MoverType.PISTON, in single player and for a server's players. Issues #1496, #1609, #1608, #1704, #1758.

#1496#1609#1608#1704#1758

Gameplay parity

Villages and combat, exactly as in vanilla

Villages and fights behaving as in vanilla: iron golems defending villages, villagers remembering their homes, mace smashes and knockback.Villages: iron golem village goals, villager memories across saves, villager age, job-site claiming on dedicated servers, flower offers (#1639 is one report). Combat: the mobs' attack_knockback attribute, mace smash logic, the hit knockback source on the host, the fire burnout biome tag. Each is checked against vanilla by a harness (docs/rust-parity.md).

#1639docs/rust-parity.md

Gameplay parity

Choose the audio output device

Pick the speakers or headphones Horizon plays through, in Music & Sounds.An output device list in Music & Sounds, falling back to the system default. #1035 started it: a player on an older Windows computer had no sound at all, and a device choice is how such cases are found and fixed.

#1035

Rendering

A light default shader pack

A small built-in look (tone mapping, colour grade, a cheap vignette) that costs almost nothing, for players who want a nicer picture without a heavy pack.An opt-in, composite-only pack on the native shader API, under about 0.3 ms at 1080p, shown on the Shader Packs page. Pack option sliders and profiles, and a Failed row with the full error, belong with it.

docs/shaders.md

Rendering

Optional ray tracing

An optional ray-tracing mode for graphics cards that support it (RTX and recent AMD): shadows, water reflections and global lighting on top of the vanilla look.A spike with ray-traced sun shadows, off by default, is a draft (#1180). Reflections, global illumination, Apple M3 and newer if it is cheap, and a performance report per card come after.

#1180

Rendering

MSAA, anisotropic filtering, exclusive fullscreen

More graphics options: multisample anti-aliasing, anisotropic filtering and an exclusive fullscreen mode. Today Horizon has FXAA and borderless fullscreen.Not implemented (docs/graphics.md). Anisotropic filtering needs linear magnification in wgpu, which blurs close blocks, so close-up sharpness has to be kept first; MSAA would sit beside FXAA, and SMAA or TAA are asked for too; exclusive fullscreen where the backend supports it.

docs/graphics.md

Rendering

Well-known shader looks, rewritten for Horizon

Popular shader packs rewritten in Horizon's format, so good packs exist from the start. Only packs whose licence is open source and compatible with ours are rewritten, never anything else.The first candidates are Photon, Chocapic13 and MakeUp Ultra Fast, each only after its licence is read and recorded: a pack is rewritten only if it is open source and compatible with Horizon's licence, and the rewrite is written from the shader format's documentation and the look on screen, not from anyone's code. Today only the Golden Hour example exists ([crates/horizon-shader-api/packs/golden_hour](https://github.com/horizon-rust/horizon/blob/main/crates/horizon-shader-api/packs/golden_hour)).

docs/shaders.mdcrates/horizon-shader-api/packs/golden_hour

Launcher

Lean installs that use less disk

Smaller installs: Horizon keeps one shared copy of the prepared game files and removes what only the preparation needed.A shared resource store keyed by the preparer's digest, no prepare intermediates left behind, the current and the previous version kept, and an automatic clean-up. Not started.

Launcher

A launcher screen readers can read

Screen readers read the launcher's buttons, lists and settings, and every part of it works from the keyboard.Issue #4537: the launcher is GPUI (not Electron), so it exposes nothing to UI Automation, NSAccessibility or AT-SPI yet. Needs an accessibility tree from GPUI (an AccessKit bridge) and a role and label on each widget.

#4537

Launcher

A visible beta label

A clear 'beta' label in the launcher and the game, so nobody is surprised that Horizon is still being built.Show Beta in the launcher's header and about page, on the game's title screen and on the website, beside the version number (docs/versioning.md).

docs/versioning.md

Platforms

Horizon on Linux ARM64

Game and launcher builds for 64-bit ARM Linux computers.Issue #1709: aarch64 builds of the game and the launcher in the release workflow, tested on a real ARM machine with its Vulkan driver. The server build already drops audio and controllers (--no-default-features).

#1709

Platforms

The launcher builds Horizon on other systems

On a system Horizon has no download for, such as FreeBSD, the launcher offers to build the game on your computer, as it already does for native mods.Issue #4354: when no release asset matches the platform, the launcher fetches the tagged source and runs the same pinned-toolchain cargo build --locked its native-mod builds use, with a warning about the time it takes. The build is unsigned, so the launcher marks the version as built locally.

#4354docs/native-mods.md

Platforms

Horizon on Windows ARM64

A native Horizon for Windows on ARM computers, such as Snapdragon laptops.Releases are x64 for Windows and Linux and arm64 for macOS. Needs an aarch64-pc-windows-msvc build in the release workflow and a machine to test on.

docs/release-flow.md

PlatformsOngoing

Android, iOS and the browser

Versions of Horizon for Android, iOS and web browsers. Nothing official yet; contributors have started the first pieces.No official build. Android was first closed as not planned, with touch controls, a mobile interface, packaging and loading the player's own assets all missing; the roadmap now includes it, iOS and a build for the browser as long-term goals. First pieces from contributors: horizon-dualsense compiling on iOS (#1813) and helper-thread limits on Android (#1751). Preparing without Java (#1750) matters here too. Horizon ships none of Mojang's files on any platform.

#1813#1751#9134#8069#4153

Platforms

Horizon on Intel Macs

Builds of the game and the launcher for Macs with an Intel processor.x86_64 game and launcher builds, picked per processor (#1171). Before it ships it needs a run on a real Intel Mac: Rosetta on Apple Silicon only proves the CPU code. Requests: #1161, #1792.

#1171#1161#1792

Platforms

Wayland and Hyprland polish

Fixes for Linux desktops that use Wayland and Hyprland: fullscreen, the clipboard, the GUI scale after a restart and the like.Open: the GUI Scale is clamped to 2 after a restart under Hyprland, while XWayland keeps it (#1866). Earlier reports covered fullscreen dropping on menu clicks, the clipboard and a white overlay (#1007, closed). Checked on a real Wayland session.

#1866

Platforms

A Nix flake

Install Horizon on NixOS through a Nix flake.A player's idea (#horizon-ideas). The launcher's AppImage ships with each launcher release (packaging/linux/appimage.sh): one file with the libraries GPUI needs, which replaces itself when it updates. A flake.nix packaging the release binaries with their runtime libraries (Vulkan loader, X11/Wayland, ALSA) is still missing, the way horizon-parity's NixOS setup runs them today.

packaging/linux/appimage.sh

Horizon extras

A complete video studio inside the game

Record, replay and edit videos without leaving the game: record in a keypress, replay a session, cut and finish the video. One of Horizon's original goals.Three stages. Recording: capture gameplay in a keypress with an encoder thread and little frame-time cost. Replay: a replay mode for recorded sessions. Editing: cuts, camera paths, titles and export. None of it exists yet; the agent-control socket (docs/agent-control.md) already lets tools drive the game for scripted shots.

docs/agent-control.md#10025

Horizon extras

Game menus in the launcher's style

An optional look for the game's own menus and options that matches the Horizon launcher. Off by default: the vanilla menus stay as they are.A player's idea (#horizon-ideas). A built-in resource pack or a Horizon setting that restyles the title, pause and options screens with the launcher's design tokens (crates/horizon-theme), following docs/design-system.md; off by default because it changes the vanilla look.

docs/design-system.md

AI and agents

An optional AI teammate

An optional AI teammate you can talk to by voice. It plays beside you, helps or finishes the game with you, runs on your computer first, and exists only if you turn it on. The No AI switch hides it.Draft pull requests: the companion (#1068), its safety modes and their evaluation (#1069) and a route that finishes the game (#1070). In the drafts: a companion that follows, fights, mines, crafts, sleeps and respawns; chat and push-to-talk voice, with speech recognition and a choice of voices; presets (very strong, helper, beat the game); a guard model with Clean, Kid and Salty modes; perception levels from Fair to All-knowing; hardware detection with a simple mode and an Advanced tab; local models first, cloud keys optional. The No AI switch is already in the game. Left: the speedrun route doesn't finish the game reliably yet, voices for more languages, and the safety evaluation, which must pass before it ships.

#1068#1069#1070

AI and agents

A versioned agent-control protocol

A stable, documented way for AI agents and scripts to drive the game and the launcher, with versions and an event stream so tools keep working as Horizon changes.hello answers with the API version, the release and the features; horizon-ctl --api; MCP serverInfo; reply schemas generated into the reference; a test. namespace for hooks; transcript compatibility tests; subscribe as a stream of events on one connection; Horizon option files by key and saved-server commands. Agent control itself (horizon-ctl, both MCP servers, the No AI switch) is done: docs/agent-control.md, docs/api/agent-control.md.

docs/agent-control.mddocs/api/agent-control.mddocs/api/stability.md

AI and agents

Port mods with your own AI agent

You can port a mod to Horizon with your own AI agent on your own computer. Horizon documents how and gives you the tools, but provides no hosted agents.A player runs their own agent locally with horizon-ctl and the MCP servers (docs/agent-control.md), cargo horizon-mod, horizon-port-pack and the parity harnesses as the check. Horizon writes the guide (playhorizon.dev/docs/agents, docs/modpacks.md) and runs no agents, accounts or keys for players. The No AI switch turns all of it off.

playhorizon.dev/docs/agentsdocs/modpacks.mddocs/agent-control.md

Community

A video series about Horizon

A series of videos about how Horizon is made and what is new, with each upload announced on Discord.Kira already shows new uploads in a read-only Discord channel (done). The series follows each stage of the project: a script, edits, titles and a thumbnail per video.

Community

Horizon on X (coming soon)

Coming soon: an official Horizon account on X, used to announce releases and the weekly summary.Kira already posts the roadmap items marked announce = true when they ship, and the weekly summary, as soon as the account's credentials exist (roadmap/README.md, 'The journal'). Waiting for the account itself.

roadmap/README.md

Code and tools

Pipeline protection and a GitHub App for agents

Safer releases: changes to the release machinery need the owner's review, and AI agents use a smaller identity of their own instead of a personal account..github/CODEOWNERS lists the workflows, the release and signing tools, the update-checking code and the installers (#1015); the branch protection that makes it count waits for the horizon-agent GitHub App, which reads and writes code, pull requests and issues but can't change settings, workflows, secrets or members, and whose tokens last an hour. It needs the owner to create the App and switch the protection on (docs/security.md).

docs/security.md

Code and tools

Signed updates everywhere, installers included

Every download Horizon makes is checked against the project's signature, including the first install with install.sh and install.ps1.Releases carry signed checksums, and the launcher and horizon-server update refuse anything unsigned (#1011, #1014). Left: the first install through install.sh and install.ps1 still trusts only the checksum GitHub publishes, because verifying Ed25519 signatures needs OpenSSL 3, which macOS doesn't ship (docs/security.md).

docs/security.md#10354

Help wanted

Good first contributions: a clear vanilla behaviour, an issue with the steps, a place to start.

Performance

Benchmark your computer

Run Horizon's built-in benchmark and share the report: every new computer makes the performance work more accurate. No coding needed.horizon-launcher play --arg=--benchmark --arg=standard writes a JSON report; horizon-launcher data benchmark <report> shows what would be sent and uploads it (playhorizon.dev/docs/performance). Results from three installs with the same hardware appear on the Benchmarks page. Example: #1711.

playhorizon.dev/docs/performance

Recently shipped

Out in a release. The journal has every change.

Gameplay parityv0.2.73

Enchanted loot in End cities

Armour and tools in End city chests should come enchanted, as in vanilla.loot.rs implements enchant_with_levels: find why the End city chest table's rolls come out bare, and compare them with vanilla's for a few seeds. Issues #1437, #1660. The loot's enchantment functions now reach every table that rolls (#1911, #2037).

#1437#1660#1911#2037

Gameplay parityv0.2.67

End city banners keep their pattern

Banners in End cities show as plain magenta instead of with their pattern.Compare the banner block entities the End city templates place with vanilla's (EndCityPieces, the templates' block entity NBT, BannerBlockEntity's patterns), in crates/horizon-world/src/worldgen/structure/. Issue #1438; possibly related: #526. The templates' block entities now keep their patterns (#1928).

#1438#526#1928

Gameplay parityv0.2.65

Play in your language

Item names, container titles and server messages follow the language you pick, as in vanilla. Today parts of the game stay in English.Translatable components resolved through the selected language for items, containers and server text (#1806), on top of the bundled languages the prepared resources carry (#1594). Left: the client's own screens (#1672) and the main menu with zh_cn.

#1806#1594#1672

Gameplay parityv0.2.67

Chickens flap while they fall

Chickens should flap their wings while they fall, not stand still in the air.Vanilla's Chicken.aiStep updates flap and flapSpeed when the chicken isn't on the ground, and the model's wings follow them. Issue #1706.

#1706#1892

Gameplay parityv0.2.67

Ctrl+Backspace and scroll bars in menus

Ctrl+Backspace should delete a whole word in the creative search, and every list's scroll bar should be draggable.EditBox deletes by word with Ctrl (#1764); the Game Rules and Statistics lists' scroll bars can't be dragged (#1782, after #978).

#1764#1782#1884#1931

Gameplay parityv0.2.67

A pointing hand over buttons

The mouse pointer should turn into a pointing hand over menu buttons, as in vanilla 26.3.26.3's AbstractWidget asks for a cursor from CursorTypes when it is hovered; winit's CursorIcon::Pointer gives the same shape. Issue #1347.

#1347#1897

Gameplay parityv0.2.67

Chat settings and team prefixes

The Hidden and Commands Only chat settings should hide chat, and team prefixes should appear before names in chat.Vanilla checks ChatVisiblity before it delivers chat and system messages (#1376), and chat uses the team-formatted display name (#1378). Both issues have exact steps to reproduce.

#1376#1378#1932#1841

Gameplay parityv0.2.67

Cooldowns drawn on items

After you throw an ender pearl, its slot should show the cooldown sweeping away, as in vanilla.Vanilla draws ItemCooldowns' percent as a white overlay over the slot (GuiGraphicsExtractor.itemDecorations and itemCooldown) in the hotbar and in inventories. Issue #1763.

#1763#1933

Servers and multiplayerv0.2.67

Pre-generate an area with /pregen

A /pregen command that builds an area of the world ahead of time, so players don't wait for new terrain when they explore.Generates, lights and saves an area before anyone walks there (#1805, a contributor's pull request, in review). Useful on servers, and it moves the generation cost away from the first visit; the generation speed-ups are under 'Steady frames at long render distances'.

#1805

Renderingv0.2.70

Horizon's own shader format and kit

Horizon's own way to make shader packs, with tools to write and test them. Every pack is checked before it runs, and the registry will list them.horizon-shader-api (API 0.1, experimental): WGSL stages with typed inputs inside the renderer's passes, options as WGSL override constants, and the horizon-shader new|check|pack tool with templates and the example pack Golden Hour. Merged: the check every pack passes (#1820) and the tool, templates and guide (#1822). In review: the post stage running in the game with hot reload (#1861), the sky stage (#1863) and registry checks that use the game's own check (#1855). Left: the material, lighting and shadow stages, a last-good fallback on reload, a GPU-time overlay per stage and budgets (docs/shaders.md, docs/api/shaders.md). The Iris/OptiFine loader is a separate item, 'Shader packs, written again from scratch'.

#1820#1822#1861#1863#1855docs/shaders.mddocs/api/shaders.md

Horizon extrasv0.2.58

Discord Rich Presence

Your Discord profile can show that you are playing Horizon, with a switch to turn it off.A Discord IPC client on its own thread (#1787) and the presence with its setting (#1788). Merged: it ships with the next release.

#1787#1788

Servers and multiplayerv0.2.67

Server dialogs and login screens

Servers that show dialogs, such as the register and login screens of AuthMe, will work in Horizon.26.3's dialog packets and model (#1720), the dialog screen with its buttons and actions (#1734), then text and boolean inputs (#1735).

#1720#1734#1735

Launcherlauncher@0.2.17

Microsoft sign-in

Sign in with your Microsoft account in the launcher to play on online-mode servers.Device-code sign-in in the launcher, tokens in the system keychain (long secrets split over several items, #2879), the session handed to the game and online-mode login in the client (docs/microsoft-account.md). Release builds carry the app's client id; Play needs an account that owns Java Edition.

docs/microsoft-account.md#2879

Renderingv0.2.74

HDR monitors

Output for HDR monitors: brighter highlights and richer colour where your screen supports it.HDR10 (PQ) or scRGB output (#2021, #2292), with its own settings screen, Auto from what the compositor or Windows reports, and calibration (docs/graphics.md). Since then: light sources shine by kind, and light itself above paper white (#6671). Next: LabPBR emission, an HDR output for shader packs (#3125).

#1441#2021#2292

Platformsv0.2.63

OpenGL for old computers

Horizon now starts on old PCs whose graphics card has no Vulkan or DirectX 12 driver: it switches to OpenGL by itself, and Options > Graphics can pick OpenGL by hand.wgpu's GL backend (WGL on Windows, EGL on Linux) as the last fallback after Vulkan and DirectX 12 (#1917), sprite arrays and CPU sprite animation for drivers without compute (#1920), no indirect draws below GL 4.3 (#1936). Minimum OpenGL 3.3 core. Shader packs don't run on it yet.

#1917#1920#1936

Servers and multiplayerv0.2.48

Server resource packs

Servers can send you their resource pack: Horizon asks, downloads it and applies it, like vanilla.The dedicated server offers server.properties' pack (#1562); the client's pack manager, downloads, prompt and Server Resource Packs setting (#1569, #1570).

#1562#1569#1570

Gameplay parityv0.2.39

Single player on its own server thread

Single player runs on a server thread, as vanilla does, so the world keeps ticking smoothly while the window draws.game/integrated.rs runs a second Game with one level per dimension; the window joins it through memory like a LAN guest (#1514).

#1514docs/server-levels.md

Performancev0.2.17

GPU occlusion culling on Macs

On Macs the GPU now skips terrain hidden behind hills and caves: 8 to 48% more frames per second at 32 chunks on an M4 Pro.GPU occlusion culling on Metal (#1434).

#1434

Performancev0.2.5

Animated textures on the GPU

Water, lava and other animated blocks are now animated by the graphics card: 1.7 to 2.4 times better 1% lows on Intel graphics.Frames uploaded once, no per-tick CPU blend or copy (#1239).

#1239

Performancev0.2.5

Far Detail for integrated graphics

An optional Reduced setting for far terrain, suggested on integrated graphics, that saves 2 to 4 ms of GPU time per frame.Opt-in reduced far terrain (#1199), on far-terrain chunk summaries built on the workers (#1029).

#1199#1029

Horizon extrasv2026.10.22

Dynamic lights

An optional extra: torches you hold, drop or set on fire light up what is around them.Held, dropped and burning light sources (#1162), in Horizon Extras, off by default.

#1162

Servers and multiplayerlauncher-v0.15.0

Host a server from the launcher

The launcher's Servers page creates, starts, backs up and updates a Horizon server with buttons, and invites friends.The launcher's Servers page (#1026) over horizon-server (docs/hosting.md).

#1026docs/hosting.md

The roadmap lives in the repository: ROADMAP.md, generated from roadmap/roadmap.toml. Pull requests carry the roadmap:<id> label of their item.

Every open issue and pull request, placed by its state on GitHub, as on Kira's work board in Discord.

To do47

Open and free: pick one, and say so with /claim on Discord.

  1. Issue #15034Delay when dropping an item while sprinting and jumpingkira-horizon[bot]
  2. Issue #15032Can't choose where the game is installed; it takes 21GB on my SSDkira-horizon[bot]
  3. Issue #15029[Vulkan] HDR not detected on MUXless/Hybrid Laptops due to cross-GPU SurfaceFormat mismatchlux-perpetua
  4. Issue #15024+147991008360bryanrucoyy2025-prog
  5. Issue #15023isaqueebryan2020@gmail.combryanrucoyy2025-prog
  6. Issue #15012Starling won't Starr no androidkira-horizon[bot]
  7. Issue #14999Native hooks: turn the local player from a client mod (lock-on, facing a target)ChampHarris
  8. Issue #14997renderer + linux warnings on terminalLumyrix
  9. Issue #14994Decode explicit SNBT bytes according to command and data codecslevzzz5154
  10. Issue #14989Render and describe direct smithing trim pattern holderslevzzz5154
  11. Issue #14986Realms: parity indicators and maintainable screen modulesmasa-masa-0314
  12. Issue #14959Problems with armor standsRrezon4514
Show 35 more
  1. Issue #14948Single-player browser port: embedded WASM and local resource importfianalins
  2. Issue #14946Missing icuuc.dll on Windows 8.1kira-horizon[bot]
  3. Issue #14936Horizon Modsmarianogaysex
  4. Issue #14922Perf: entity tracking copies every encoded packet body once per viewerDetimes
  5. Issue #14905'Rust' in 'Rust Edition' in logo is not angled the same as 'Edition'kira-horizon[bot]
  6. Issue #14894Spec approval request: complete rich-description metadata admission for PR14870TheMrZZ
  7. Issue #14891Shader packs: `real_packs` harness panics in naga with index out of boundspomidorkaapk
  8. Issue #14890Shader packs: uint sampler on a float image, symbolic `image.*` sizes, and flip-only programs are not handledpomidorkaapk
  9. Issue #14889Shader packs: normalized storage-image qualifiers (`rgba16`) are rejected on float buffers (`Rgba16Float`)pomidorkaapk
  10. Issue #14888Shader packs: a geometry stage on the main `gbuffers_terrain` is skipped, so terrain never reaches the pack bufferspomidorkaapk
  11. Issue #14887Shader packs: 2-D compute workgroups using `subgroup_id`/`subgroup_invocation_id` are rejected by nagapomidorkaapk
  12. Issue #14886Shader packs: FidelityFX SPD fails to translate — naga GLSL frontend lacks `subgroupQuadSwap*`pomidorkaapk
  13. Issue #14871Lag on menukira-horizon[bot]
  14. Issue #14858Loot boxes open with a delay when clickedkira-horizon[bot]
  15. Issue #14857A zombie villager's random profession comes from a made-up random, so it never matches vanilla'sSolenopsisbot
  16. Issue #14845Custom screens created with /dialog aren't clickable.rojaoo
  17. Issue #14844Achievements Systemkira-horizon[bot]
  18. Issue #14821Horizon Client crashes on Windows 11 with Intel i7-1068NG7lzh201008
  19. Issue #14816Can't use spear against other playerkira-horizon[bot]
  20. Issue #14812Boat Passenger Synchronization Bug – Passenger Teleportingkira-horizon[bot]
  21. Issue #14793general lagkira-horizon[bot]
  22. Issue #14792Native mod hooks needed for ClientCommands port: packets, enchanting RNG, brushable lootyasrkazy5-lang
  23. Issue #14791Game Turning Into OOOOOEvolveGamerz
  24. Issue #14759verisonsPrathamuchai
  25. Issue #14731Trial chambers don't spawn mobsFelixBRosen
  26. Issue #14730Eating takes too long in the Rust EditionFelixBRosen
  27. Issue #14718I am beautiful the putki Mara xx f****** f***mdtamim01946595943-sudo
  28. Issue #14714Mods showing as Unsupported on Horizon Androidkira-horizon[bot]
  29. Issue #14713A stable ABI tier for API mods, and mixin mods as a developer tier (idea, follows #5109)BlueGradientHorizon
  30. Issue #14685Please add prism launcher (from flatpak, specifically) support.slimesarecool
  31. Issue #14682Shader packs, M6 step d: register the shader runtime through horizon-game and drop the engine's shader-crate exceptionsludovic111
  32. Issue #14681Shader packs, M6 step c: move the executors and their glue to a platform crate, horizon-shader-runtimeludovic111
  33. Issue #14680Shader packs, M6 step b2: Horizon's WGSL executor (native_*) goes through ExternalPipelineludovic111
  34. Issue #14679Shader packs, M6 step b1: the shaders/ executor (pack_post) goes through ExternalPipelineludovic111
  35. Issue #14649mass selling diamondskira-horizon[bot]

In progress21

Claimed, assigned, or a draft pull request.

  1. Issue #15057Chicken eggs: three breeds spawned in one biome all come out as the same breedkira-horizon[bot]
  2. PR #15056Mobs: parallel mob islands with ordered RNG and full-state verification (draft)rdbtCVS
  3. Issue #15046Border light updates lose independent layer identity and allocated-zero storage stateTheMrZZ
  4. Issue #15039 · PR #15049A player opening a copper chest hears the wooden chest's soundKBroneZ
  5. PR #15035Preview the anvil with a server's data-pack enchantmentsKBroneZ
  6. PR #15010Wardrobe: an in-game outfit editor for cosmeticsCocofireHD
  7. Issue #14980Positional biome reads skip vanilla's BiomeManager zoom, so a mob at a biome border gets the neighbouring variantSolenopsisbot
  8. Issue #14972Elide prototype-equivalent max_stack_size across remaining saved-stack familiesTheMrZZ
  9. Issue #14958Small Issue with End Crystal and launching the player.bl00dyedward
  10. PR #14819Polytone: a GPU particle type's own shader, its records and uniformsvnsmoreira
  11. Issue #14807Parity regression: wire_streamgithub-actions[bot]
  12. Issue #14779iOS: horizon-client doesn't build or run for aarch64-apple-iosRaymon82777
Show 9 more
  1. Issue #14769A zombie standing in powder snow catches fire in daylightilguerro
  2. Issue #14768A burning zombie sets you alight whatever the difficulty, your weapon or your shieldilguerro
  3. Issue #14767Camels stay sitting when hurt, sit silently, and stare in the wrong directionsilguerro
  4. Issue #14763Conduits attack mobs that are not enemies, and no client ever sees the hunting particleilguerro
  5. Issue #14747Registry: the published index still has icons without ?v=, because horizon-mods builds it with a tool from 2026-11-05hildlabs
  6. Issue #14647 · PR #14676A mob landing on farmland or turtle eggs rolls from its own random, not the level'sNikitaMGrimm
  7. PR #14646Mob AI names the random it draws from: the level's or the mob's ownNikitaMGrimm
  8. PR #14645Items, frames, vehicles, bolts and fangs keep a random typed as their ownNikitaMGrimm
  9. PR #14644A projectile's and a fishing hook's own random have the entity's typeNikitaMGrimm

In review149

A pull request is ready for review.

  1. Issue #15054 · PR #15055A comparator beside a decorated pot always reads 0ilguerro
  2. Issue #15048 · PR #15052A summoned rabbit keeps yaw 0; vanilla turns it towards the constructor's wanted position (the world origin)Solenopsisbot
  3. Issue #15047 · PR #15050port-pack: a mods.toml whose mod id is an unexpanded ${...} placeholder is rejected with a TOML parse errorreservedbytes
  4. PR #15042Main compiles again: cem.rs's list of layer keys no longer shadows the own-file mapNikitaMGrimm
  5. PR #15041Dim is a level key: any dimension, the three built-ins as constants (#11282, 9/9)UMCEKO
  6. PR #15037fix: name the cem layer keys instead of shadowing the own mapMSedgeMC
  7. Issue #15033 · PR #15038Restore CI on main after the bulk PR mergerdbtCVS
  8. PR #15031default chunk upload budget to 8 MiB on integrated GPUsdarkliro
  9. PR #15030Levels in a list keyed by level, each with its dimension type (#11282, 8/9)UMCEKO
  10. PR #15028Sky, shading and ambient light follow the dimension type (#11282, 7/9)UMCEKO
  11. Issue #15022 · PR #15044An end crystal never clears a loaded Fire; vanilla's first tick doesSolenopsisbot
  12. Issue #15020 · PR #15043A wind charge or breeze wind charge loses its loaded Air and FireSolenopsisbot
Show 137 more
  1. PR #15019perf(assets): parallelize independent recipe and datapack json loadingMik00000
  2. Issue #15017 · PR #15036A projectile dispensed facing down spawns at 299.90000000000003 instead of 299.9Solenopsisbot
  3. PR #15015perf(anvil): offload chunk compression during region flush to worker poolMik00000
  4. Issue #15013 · PR #15021Launcher: Microsoft sign-in fails with 'Could not reach Microsoft' when IPv6 to login.microsoftonline.com is broken (no IPv4 fallback)k3v1nn
  5. PR #15011perf(world): parallelize region conversion in WorldUpgraderMik00000
  6. PR #15007gfx: allow indirect multi-draw on Raptor Lake with Mesa >= 26.0.8darkliro
  7. PR #15006Send every eligible entity through End gatewaysilguerro
  8. PR #15004Portals and execute in scale coordinates by the dimension types (#11282, 6/9)UMCEKO
  9. PR #15000port: a bee let out of a hive posts block_changeMSedgeMC
  10. PR #14995port: a lectern's book state change posts block_changeMSedgeMC
  11. PR #14984The social player list scrolls only under the pointerMSedgeMC
  12. Issue #14981 · PR #14998Pushed arrows and client shulker bullets miss the bubble column pushRagbie
  13. PR #14979A resource pack's core/text draws world text (text displays, name tags)lucasmts59
  14. Issue #14977 · PR #14978A block entity's booleans given as ints are not read as bytesvermingov
  15. Issue #14975 · PR #14976An end gateway's ExactTeleport given as an int is not read as a bytevermingov
  16. Issue #14971 · PR #14974A falling block's HurtEntities, CancelDrop and DropItem given as ints are not read as bytesvermingov
  17. Issue #14970 · PR #14973A goat's horn flags given as ints are not read as bytesvermingov
  18. Issue #14964 · PR #15026An experience orb loads and saves Air as 300; vanilla keeps the saved supplySolenopsisbot
  19. PR #14962An invisible player far away does not keep a fox alertMSedgeMC
  20. PR #14961parity: Respond with acknowledgement packet when receiving PlayerRotatation packetSamB440
  21. Issue #14957 · PR #15018A squid out of water ignores NoGravity and levitation, so it still sinksSolenopsisbot
  22. PR #14954Guard add_padding against bits==0 and bits>=64Web-mc1
  23. Issue #14950 · PR #14982A resource pack's core/text doesn't reach world text (text displays, name tags), with or without improved transparencylucasmts59
  24. Issue #14942 · PR #15016A boat or minecart in powder snow never gains TicksFrozen; vanilla ticks it and saves itSolenopsisbot
  25. Issue #14941 · PR #15045A camel's /data get LastPoseTick drifts after a reload; vanilla keeps the saved absolute game timeSolenopsisbot
  26. Issue #14940 · PR #14943A shulker's AttachFace given as an int is not narrowed to a byte firstvermingov
  27. Issue #14939 · PR #14944Perf: tick_guests clones the held ItemStack of every guest every tick to compare itDetimes
  28. PR #14938Native hooks: hide one chat line from one receiver (native_chat_recipient)Detimes
  29. PR #14937Slot sources: /item and execute item reads and writes resolve registered holdersTheMrZZ
  30. Issue #14926 · PR #14927A horse's unknown coat or markings id is clamped; vanilla wraps itvermingov
  31. Issue #14925 · PR #14933Perf: resend_biomes clones and encodes the same biome packet for every receiverDetimes
  32. Issue #14924 · PR #14931Perf: player equipment is converted to network stacks every tick for every guestDetimes
  33. Issue #14923 · PR #14934Perf: the recording branch of the block broadcast tests every changed block against every viewerDetimes
  34. Issue #14921 · PR #14930Perf: effect_meta looks up the particle registry with strings for every visible effect, every guest, every tickDetimes
  35. Issue #14919 · PR #14929Native mods: measure any entity data value (entity_data::value_len public)Detimes
  36. Issue #14918 · PR #14947Servers: the client's own attack speed replaces the server's, so sprint hits skip vanilla's slowdown (Hypixel setbacks)PugrillaDev
  37. PR #14911Prove the allay's jukebox source against vanilla 26.3TheMrZZ
  38. Issue #14907 · PR #14914An axolotl with an unknown Variant id is blue instead of lucyvermingov
  39. PR #14902Changing the Chat option keeps the reader's placeMSedgeMC
  40. PR #14901Double-clicking the chat box selects the wordMSedgeMC
  41. PR #14899Shader API 0.2: the [entity] stage, checked and not yet drawnNikitaMGrimm
  42. PR #14898Move guest server body tick into a private childTheMrZZ
  43. Issue #14897 · PR #14904A wolf's or cat's CollarColor outside 0..15 wraps instead of reading whitevermingov
  44. Issue #14896 · PR #14988An item frame loaded with a negative ItemRotation saves 7 instead of the loaded valueSolenopsisbot
  45. Issue #14895 · PR #14993A thrown egg, snowball or potion keeps an Item count above 1; vanilla's setItem forces it to 1Solenopsisbot
  46. Issue #14883 · PR #14885A fireball loads ExplosionPower without narrowing it to a bytevermingov
  47. Issue #14879 · PR #14882A mob or armor stand loads Fire without narrowing it to a shortvermingov
  48. Issue #14876 · PR #14877A mob loads HurtTime and DeathTime without narrowing them to a shortvermingov
  49. Issue #14873 · PR #14917Perf: the block-event queue is O(E²) per tick (Vec::remove(0) and a linear dedupe)Detimes
  50. PR #14868Native hooks: per-player simulation distanceDetimes
  51. Issue #14867 · PR #14869A dropped item loads Age and PickupDelay without narrowing them to a shortvermingov
  52. PR #14866Native hooks: a player starts spectating an entityDetimes
  53. PR #14865Native hooks: create, join and leave scoreboard teams, with colourDetimes
  54. PR #14863Native hooks: set an entity's glowing flag on the serverDetimes
  55. PR #14862Native hooks: send one clientbound play packet to one playerDetimes
  56. PR #14861Native hooks: registry id lookup from a registry nameDetimes
  57. Issue #14855 · PR #14859frame_map_writes and wolf_anger_writes share command_exec's work folder and read each other's scriptsNikitaMGrimm
  58. Issue #14853 · PR #14860An area effect cloud saves fall_distance 0.0d instead of the value it loadedvermingov
  59. Issue #14847 · PR #14852Evoker fangs save fall_distance 0.0d instead of the value they loadedvermingov
  60. Issue #14846 · PR #14848A trident saves fall_distance 0.0d instead of the value it loadedvermingov
  61. Issue #14836 · PR #14838Every world clock ticks and is saved, not only the Overworld's and the End'sXmilon
  62. Issue #14835 · PR #14837Sea level follows the level's generatorXmilon
  63. Issue #14834 · PR #14843A trident loaded with a negative `life` saves 0; vanilla keeps the loaded valueSolenopsisbot
  64. PR #14831A player's arrow that hurts another player dings for its shooter (#8053)vermingov
  65. PR #14826client: pump window messages and remove background GDI loop during renderer startupoloion
  66. Issue #14824 · PR #14864A llama spit or shulker bullet loses its saved Air, Fire and fall_distanceSolenopsisbot
  67. Issue #14823 · PR #14849A trident always saves damage 2.0d, crit 0b and PierceLevel 0b, ignoring loaded valuesSolenopsisbot
  68. PR #14818Core shaders: sampler parameters, unsized arrays, gl_VertexIndex and provided blocksvnsmoreira
  69. Issue #14814 · PR #14815Dynamic Resolution: let the world's resolution scale follow a target frame ratesenjinthedragon
  70. Issue #14809 · PR #14811Far detail: LOD tiles keep old samples after switching Full/Reducedtarzinio
  71. Issue #14806 · PR #14850A negative Fire is never cleared; vanilla resets an entity's Fire to 0 on its first tickSolenopsisbot
  72. Issue #14805 · PR #14829A mob saved while dead is dropped from its chunk, so its body is gone after a reloadSolenopsisbot
  73. Issue #14804 · PR #14839An item frame loses its saved Motion, OnGround and fall_distanceSolenopsisbot
  74. Issue #14801 · PR #14803tests: two Python tests fail to import when a 'tests' package is installedanasssssssss1
  75. Issue #14800 · PR #14822An arrow does not load or keep its saved Air; /data get always reports 300Solenopsisbot
  76. Issue #14799 · PR #14817, PR #14813An armor stand loses its saved pitch (Rotation[1]); vanilla loads and keeps itSolenopsisbot
  77. Issue #14798 · PR #14830An end crystal loses its saved Rotation and Motion; vanilla keeps bothSolenopsisbot
  78. PR #14795Nix: services.horizon-server, a NixOS module for a Horizon serveralexcatdad
  79. PR #14794Add data-driven villager professions and namespaced tradesjiiihpeeh
  80. PR #14786Chat Delay's held messages show their count and open on a clickMSedgeMC
  81. PR #14784The LAN port box says why its number is wrongMSedgeMC
  82. PR #14783Shader packs: the boats' patch test in the shadow pass costs nothing without boatssenjinthedragon
  83. PR #14781horizon-threads: resident memory on iOS through Mach task_infoRaymon82777
  84. PR #14780Resource packs: a renamed atlas sprite reads its resource's texturemalithedeveloper
  85. PR #14774The air supply the jar gives each typeMSedgeMC
  86. Issue #14773 · PR #14827rapidly using flint and steel has a delay when also holding an unusable itemkira-horizon[bot]
  87. PR #14771Launcher: a folder with 26.3's version file but not its game says to play 26.3 oncezenith600
  88. Issue #14770 · PR #14777Drowned and husk conversions finish a tick early and save the wrong timerilguerro
  89. Issue #14766 · PR #15059Goats ram the player feeding them, and a shield does not soften the ramilguerro
  90. Issue #14765 · PR #15058Foxes hide from the sun inside villages and never defend the player they trustilguerro
  91. Issue #14764 · PR #15053A fox eating a golden apple gets nothing from it, and a panda's pickup is never creditedilguerro
  92. Issue #14762 · PR #15051The beacon window lists diamond before emerald, and its buttons have no tooltipsilguerro
  93. PR #14760A stroll scores its ground the way the jar doesMSedgeMC
  94. Issue #14757 · PR #14758Worldgen: range choice and interval select sample every branch over the whole volumeilguerro
  95. Issue #14755 · PR #14756Worldgen: the range choice's bulk select takes a mispredicted branch per blockilguerro
  96. Issue #14754 · PR #14787A leash knot is saved with its chunk and survives a reload; vanilla's noSave leash_knot type never isSolenopsisbot
  97. Issue #14751 · PR #14870Reject data-pack descriptions that fail the rich Component metadata codecTheMrZZ
  98. PR #14746A fluid drip hangs on the fluid block's own face, and a flowing fluid dripsMSedgeMC
  99. PR #14744Game: review and complete Thai translations (th_th.json)NongTham
  100. PR #14743Fix saved passenger trees across entity kinds and lifecycleTheMrZZ
  101. PR #14739fix(game): resolve dynamic consumable component on item stack (#14634)foudretbr
  102. Issue #14738 · PR #14750Minecarts are immune to firekira-horizon[bot]
  103. PR #14734fix(client): allow full attack strength without cooldown indicator on high attack speed (fixes #14721)Mik00000
  104. Issue #14732 · PR #14733Powder snow and cauldrons: no hiss when a burning player is put out, and they still melt outside the world borderilguerro
  105. Issue #14728 · PR #14729Pets: the sitting pose, a cat's chest pose for other players, a bolting horse's target, a cat's strollilguerro
  106. PR #14726Single player: a worker-thread crash saves the world before the game endsSkr1zzzz
  107. Issue #14725 · PR #14761The four ignored pad parity tests that hand input between the pad and the keyboard or mouse fail on mainarismoko
  108. Issue #14724 · PR #14740Wind Burst mace does not knock back the Ender DragonTiggerTakkyTTT
  109. PR #14719Fix keyboard focus in sign and book editorsp-stzhuk
  110. PR #14716Client: removing entities seats passengers off only the vehicles among themSkr1zzzz
  111. PR #14712Client: spawning a falling block or TNT no longer walks the whole listSkr1zzzz
  112. PR #14711perf(net): parse packet frame headers onceYourPancakes
  113. PR #14709Single player: a tick that panics or fails still saves the worldSkr1zzzz
  114. PR #14708Server: the mob data generation finalizes with is read when the world opensAkirabane
  115. PR #14706Ukrainian: the 96 strings uk_ua.json lacked (radial menu, HDR, fuel)GIGABAIT93
  116. PR #14704Layer split: the "no prepared files" screen gets playhorizon.dev through a hookHiuoy
  117. Issue #14700 · PR #14701Structure-template loading builds a redundant NBT treeilguerro
  118. PR #14698Layer split: the "Horizon clients only" kick text comes through a hookHiuoy
  119. Issue #14694 · PR #14695`cave_air` is not air: fishing there is never open water, and the flying kick never firesilguerro
  120. PR #14687A stack's own tool and attribute modifiers reach the client and the hitMayonesu0
  121. PR #14686A loaded armor stand saves the movement_speed its first tick makesMayonesu0
  122. PR #14683docs: HDR pass rules, tone-weighted blending is for linear light and sharpening eases off above whiteNikitaMGrimm
  123. PR #14678Renderer: the ExternalPipeline hook for shader packs (layer plan M6, step a)ludovic111
  124. PR #14675game/fireworks: spawn firework boost particles at player current position (fixes #14422)glitchsnake
  125. PR #14674Projectiles beside honey slide down it: thrown, fireballs, arrows and tridentsRagbie
  126. Issue #14671 · PR #14684An end crystal saves fall_distance 0 and OnGround 0b instead of what it loadedvnsmoreira
  127. PR #14670perf(render): compact translucent particle uploadsYourPancakes
  128. PR #14669fix: player heads keep their custom skins with resource packsJustKarkat
  129. PR #14663A painting keeps its saved OnGround and fall_distancevnsmoreira
  130. Issue #14662 · PR #14666Controllers: the on-screen keyboard's Done makes new lines, and suggestions need it closedmartipops
  131. PR #14661HDR Lighting: a light source shines the same on every faceNikitaMGrimm
  132. Issue #14660 · PR #14668Flaky test: io_pool's kick test assumes a queued packet arrives before the session's unprompted oneNikitaMGrimm
  133. PR #14659An experience orb keeps its saved Fire and burns as vanilla doesMayonesu0
  134. Issue #14654 · PR #14657levels world border tests fail on a second run: their scratch world is not removedRagbie
  135. Issue #14652 · PR #14820, PR #14655Recipe viewer transfer skips worn, enchanted and renamed ingredientsJ5Casey
  136. Issue #14650 · PR #14735, PR #14651A mob sitting in a boat on water counts as in the water: a drowned or zombie in a boat never burns in daylightsenjinthedragon
  137. Issue #14643 · PR #14720native_lod_column is asked after vanilla's LOD evaluation, so a mod cannot make the far terrain cheaperSparticle62ops

Done99

Closed or merged in the last seven days.

  1. PR #15027Main compiles again: hold_fullbright's replay check and the firework tests' new_rocket callsNikitaMGrimm
  2. Issue #15025Main doesn't compile: hold_fullbright reads Game::studio_replay, which moved to Game::replayNikitaMGrimm
  3. PR #15014threads: detect performance cores on Linux hybrid CPUsdarkliro
  4. PR #15009Mobs: tick freezing after the move and block effectsDUzzL
  5. PR #14987A shulker keeps its armor attribute once its lid has movedDUzzL
  6. PR #14969A villager narrows a loaded FoodLevel to a byte (#14967)vermingov
  7. Issue #14967A villager loads FoodLevel without narrowing it to a bytevermingov
  8. Issue #14956A mob entering powder snow gains TicksFrozen a tick late: the freeze check runs before it movesSolenopsisbot
  9. PR #14955A zombie villager starts its cure when it loads a ConversionTimeDUzzL
  10. PR #14951Fix biome table panic when emptyWeb-mc1
  11. PR #14945A zombie villager's profession is the constructor's draw from its own random (#14857)CocofireHD
  12. PR #14935Slot sources: holder and tag codec, and slot-source tags in DataStoreTheMrZZ
Show 87 more
  1. PR #14932Perf: the replay excuse tests the distance before the entity kindDetimes
  2. PR #14928port: a crafter's grid counts for the recipe bookMSedgeMC
  3. Issue #14920Perf: guest replay excuse scans every entity, block write and guest per guest per tickDetimes
  4. PR #14910client: show custom server crafting recipes in recipe bookoloion
  5. PR #14900port: a disc coming or going posts block_changeMSedgeMC
  6. PR #14893port: water flowing past a lit candle posts block_changeMSedgeMC
  7. PR #14892Shader API 0.2: [frame] primaries, and the rule for new namesNikitaMGrimm
  8. Issue #14856A shulker that has opened its lid saves no minecraft:armor attribute; vanilla keeps it with the covered +20 modifierSolenopsisbot
  9. Issue #14832A zombie villager loaded with ConversionTime never starts curing, so the strength effect and its attack_damage modifier are missingSolenopsisbot
  10. PR #14785The merchant's trade scroller shows its cursorMSedgeMC
  11. PR #14776input: clear modifiers on focus loss and heal alt and super keys (fixes #14715)NongTham
  12. PR #14775test: allow-flight in bed_explosion parity harness (fixes #14664)NongTham
  13. PR #14772fix(game): evaluate attack_speed attribute modifiers for player attack cooldown (#14721)foudretbr
  14. PR #14745A mob that cannot be a baby does not take the food that grows itMSedgeMC
  15. PR #14742fix(input): reset debug keys modifier state on window focus loss (#14715)foudretbr
  16. PR #14737Silence a chest's comparator while a cat sits on itilguerro
  17. Issue #14736A cat sitting on a chest does not silence the comparator that reads itilguerro
  18. PR #14723Firework rockets: honour Silent, post EXPLODE, count block launchesilguerro
  19. Issue #14722Firework rockets: a Silent rocket still booms, no explosion vibration, and no "Times Used" from a blockilguerro
  20. Issue #14721Attack Speed Bugkira-horizon[bot]
  21. Issue #14715[Bug] Keyboard Input Handling Issues With Modifier-Key Combinationsgabrielkyleabellana-cyber
  22. PR #14710mobs: apply squid sinking velocity on land under NoAI (fixes #14467)glitchsnake
  23. PR #14707Docs: propose the Friends overlay Part 2 planmasa-masa-0314
  24. PR #14705Falling blocks: cache each model's vertices instead of rebuilding them every frameSkr1zzzz
  25. Issue #14664bed_explosion harness: client kicked with "Flying is not enabled" on main since a84f637dd6ludovic111
  26. PR #14658Map CEM's armour models to the layers 26.3 draws, and the rabbit's feetreaderkid
  27. PR #14627A cactus pricks a boat or a minecart a piston pushesMrCloudy2
  28. Issue #14626A cactus doesn't prick a boat or a minecart a piston pushesMrCloudy2
  29. PR #14623A projectile hits primed TNTMrCloudy2
  30. Issue #14622Projectiles fly through primed TNTMrCloudy2
  31. PR #14621Every wind burst of a tick pushes an entity that ticks after the projectilesMrCloudy2
  32. Issue #14620Only the first wind burst of a tick pushes a TNT that ticks after the projectilesMrCloudy2
  33. PR #14619A flying projectile is pushed by the water and lava it touchesMrCloudy2
  34. Issue #14618A thrown or hurting projectile isn't pushed by flowing water or lavaMrCloudy2
  35. Issue #14608Not showing custom crafting recipes from the server in the crafting bookJuniorJPDJ
  36. PR #14549AGENTS.md: review pull requests only when asked, and submit a decisionvivescene
  37. Issue #14545AGENTS.md: agents review pull requests only when asked, and post only findingsvivescene
  38. PR #14533A geyser goes through scaffolding seen from belowMrCloudy2
  39. Issue #14530A geyser stops at scaffolding in its columnMrCloudy2
  40. PR #14513Native hooks: line of sight between entities and a clear-sight block rayDetimes
  41. PR #14512Native hooks: read the vehicle an entity rides and its passengersDetimes
  42. PR #14510Native hooks: read the dedicated server's online mode, port and proxy forwardingDetimes
  43. PR #14509Native hooks: read a map's colours (native_map_colors)Detimes
  44. PR #14498A geyser launches projectiles, boats and minecartsMrCloudy2
  45. Issue #14497A geyser doesn't launch projectiles, boats or minecartsMrCloudy2
  46. PR #14490A wither's side head does not pick targets through a wallMSedgeMC
  47. PR #14484A wind charge's hit damages a boat or a minecartMrCloudy2
  48. Issue #14483A wind charge's hit doesn't damage a boat or a minecartMrCloudy2
  49. Issue #14467A NoAI squid on land keeps Motion 0; vanilla's Squid.aiStep still sets its sinking velocitySolenopsisbot
  50. PR #14462Items spilled from a destroyed shulker box or bundle pop upward againilguerro
  51. PR #14446Dispensers equip server players and respect armor stand slot locksMayonesu0
  52. PR #14445OptiFine CEM: map rabbit hind feet to 26.3 hind legs and skip equipment in model reach test (#14177)foudretbr
  53. PR #14441A sulfur cube's body takes a swallowable block through /item replacevoduff
  54. PR #14439Title screen's Friends icon is inactive without an invite-code resolver (spec #14167 step 4)ludovic111
  55. PR #14437Recipe book numbers a server's synced recipes as the server doesJ5Casey
  56. Issue #14435Recipe book numbers its displays without the world's data pack recipes, so server entries overwrite other recipesJ5Casey
  57. PR #14430Crates ship their own lang files: horizon_platform::lang (layer plan M5)ludovic111
  58. PR #14402Polytone: a particle with physics born inside a block never joinsvnsmoreira
  59. PR #14401Fix jmath::pow NaN special cases to match Java Math.powDUzzL
  60. Issue #14382jmath::pow returns 1.0 where Java's Math.pow returns NaNreservedbytes
  61. PR #14360/data on an item frame detaches its old map when only the stack's count changesNikitaMGrimm
  62. PR #14332Mod registry: bundle SQLite 3.54 through rusqlite 0.41yahya-nusseibeh
  63. PR #14277Native hooks: living_death_message (mob death message)Detimes
  64. PR #14271Native hooks: read-only entity lookup by UUID and entity data in any levelDetimes
  65. PR #14270perf(light): reuse scratch queues during incremental relight and preserve lazy section loadingMik00000
  66. Issue #14253Native hooks: line of sight between entities and a clear-sight block rayDetimes
  67. Issue #14251Native hooks: read the vehicle an entity rides and its passengersDetimes
  68. Issue #14249Native hooks: read the dedicated server's online mode, port and proxy forwardingDetimes
  69. Issue #14248Native hooks: read a map's colours (native_map_colors)Detimes
  70. Issue #14244Native hooks: living_death_message (mob death message)Detimes
  71. Issue #14233Native hooks: read-only entity lookup by UUID and entity data in any levelDetimes
  72. Issue #14178/data merge on an item frame keeps its old map's marker when only the stack's count changesNikitaMGrimm
  73. PR #14130port map: the destroy-progress stage and the daylight ticker rows are portsMSedgeMC
  74. PR #14021Weapon wear comes from a stack's weapon componentMSedgeMC
  75. PR #13988A banner with an invalid layer loads no patternsMSedgeMC
  76. Issue #13938Items spilled out of a destroyed shulker box or bundle can start moving downward instead of popping upilguerro
  77. PR #13762Preserve external locks on destroyed shulker boxesTheMrZZ
  78. PR #13761Match item count equality against the actual stackTheMrZZ
  79. PR #13753sculk: resume vibration particle on reload (fixes #12935)glitchsnake
  80. Issue #12937Dispensers do not equip server players and ignore armor stand slot locksilguerro
  81. Issue #12935Sculk vibrations lose dropped-item owners and player sources on reload, and their particles do not resumeilguerro
  82. Issue #11641Item count equality predicates ignore the actual stack countTheMrZZ
  83. Issue #11611Shulker block drops lose the actual external lock componentTheMrZZ
  84. PR #11559Use cached villager murder witnessesvoidsipp
  85. PR #11536Expire custom potion contents on tipped arrowsvoidsipp
  86. PR #11484Keep entity-specific Nether portal cooldownsvoidsipp
  87. Issue #8426CEM: baby armor layers of six mobs and the rabbit hind feet are unreachable (names_reach_horizons_models fails)arismoko

Every release with what it changed, grouped by roadmap item in Technical, and a summary of each week.

Merged

Merged, in the next release

58 changes merged since the last release.

  • Map CEM's armour models to the layers 26.3 draws, and the rabbit's feet
  • A cactus pricks a boat or a minecart a piston pushes
  • A projectile hits primed TNT
  • Every wind burst of a tick pushes an entity that ticks after the projectiles
  • A flying projectile is pushed by the water and lava it touches
  • A geyser goes through scaffolding seen from below
  • Native hooks: line of sight between entities and a clear-sight block ray
  • Native hooks: read the vehicle an entity rides and its passengers
  • Native hooks: read the dedicated server's online mode, port and proxy forwarding
  • A geyser launches projectiles, boats and minecarts
  • A wither's side head does not pick targets through a wall
  • A wind charge's hit damages a boat or a minecart
  • Items spilled from a destroyed shulker box or bundle pop upward again
  • A sulfur cube's body takes a swallowable block through /item replace
  • Recipe book numbers a server's synced recipes as the server does
  • Polytone: a particle with physics born inside a block never joins
  • Fix jmath::pow NaN special cases to match Java Math.pow
  • Mod registry: bundle SQLite 3.54 through rusqlite 0.41
  • Native hooks: living_death_message (mob death message)
  • Native hooks: read-only entity lookup by UUID and entity data in any level
  • perf(light): reuse scratch queues during incremental relight and preserve lazy section loading
  • Weapon wear comes from a stack's weapon component
  • A banner with an invalid layer loads no patterns
  • Match item count equality against the actual stack
  • Use cached villager murder witnesses
  • Expire custom potion contents on tipped arrows
  • Keep entity-specific Nether portal cooldowns
  • Mobs: tick freezing after the move and block effects
  • A zombie villager's profession is the constructor's draw from its own random (#14857)
  • test: allow-flight in bed_explosion parity harness (fixes #14664)
  • AGENTS.md: review pull requests only when asked, and submit a decision
  • Native hooks: read a map's colours (native_map_colors)
  • Dispensers equip server players and respect armor stand slot locks
  • port map: the destroy-progress stage and the daylight ticker rows are ports
  • Preserve external locks on destroyed shulker boxes
  • threads: detect performance cores on Linux hybrid CPUs
  • /data on an item frame detaches its old map when only the stack's count changes
  • sculk: resume vibration particle on reload (fixes #12935)
  • Main compiles again: hold_fullbright's replay check and the firework tests' new_rocket calls
  • Silence a chest's comparator while a cat sits on it
  • A shulker keeps its armor attribute once its lid has moved
  • A villager narrows a loaded FoodLevel to a byte (#14967)
  • A zombie villager starts its cure when it loads a ConversionTime
  • Fix biome table panic when empty
  • Slot sources: holder and tag codec, and slot-source tags in DataStore
  • Perf: the replay excuse tests the distance before the entity kind
  • port: a crafter's grid counts for the recipe book
  • client: show custom server crafting recipes in recipe book
  • port: a disc coming or going posts block_change
  • Shader API 0.2: [frame] primaries, and the rule for new names
  • The merchant's trade scroller shows its cursor
  • input: clear modifiers on focus loss and heal alt and super keys (fixes #14715)
  • fix(game): evaluate attack_speed attribute modifiers for player attack cooldown (#14721)
  • A mob that cannot be a baby does not take the food that grows it
  • fix(input): reset debug keys modifier state on window focus loss (#14715)
  • Firework rockets: honour Silent, post EXPLODE, count block launches
  • mobs: apply squid sinking velocity on land under NoAI (fixes #14467)
  • Falling blocks: cache each model's vertices instead of rebuilding them every frame

Other changes

  • Map CEM's armour models to the layers 26.3 draws, and the rabbit's feet#14658
  • A cactus pricks a boat or a minecart a piston pushes#14627
  • A projectile hits primed TNT#14623
  • Every wind burst of a tick pushes an entity that ticks after the projectiles#14621
  • A flying projectile is pushed by the water and lava it touches#14619
  • A geyser goes through scaffolding seen from below#14533
  • Native hooks: line of sight between entities and a clear-sight block ray#14513
  • Native hooks: read the vehicle an entity rides and its passengers#14512
  • Native hooks: read the dedicated server's online mode, port and proxy forwarding#14510
  • A geyser launches projectiles, boats and minecarts#14498
  • A wither's side head does not pick targets through a wall#14490
  • A wind charge's hit damages a boat or a minecart#14484
  • Items spilled from a destroyed shulker box or bundle pop upward again#14462
  • A sulfur cube's body takes a swallowable block through /item replace#14441
  • Recipe book numbers a server's synced recipes as the server does#14437
  • Polytone: a particle with physics born inside a block never joins#14402
  • Fix jmath::pow NaN special cases to match Java Math.pow#14401
  • Mod registry: bundle SQLite 3.54 through rusqlite 0.41#14332
  • Native hooks: living_death_message (mob death message)#14277
  • Native hooks: read-only entity lookup by UUID and entity data in any level#14271
  • perf(light): reuse scratch queues during incremental relight and preserve lazy section loading#14270
  • Weapon wear comes from a stack's weapon component#14021
  • A banner with an invalid layer loads no patterns#13988
  • Match item count equality against the actual stack#13761
  • Use cached villager murder witnesses#11559
  • Expire custom potion contents on tipped arrows#11536
  • Keep entity-specific Nether portal cooldowns#11484
  • Mobs: tick freezing after the move and block effects#15009
  • A zombie villager's profession is the constructor's draw from its own random (#14857)#14945
  • test: allow-flight in bed_explosion parity harness (fixes #14664)#14775
  • AGENTS.md: review pull requests only when asked, and submit a decision#14549
  • Native hooks: read a map's colours (native_map_colors)#14509
  • Dispensers equip server players and respect armor stand slot locks#14446
  • port map: the destroy-progress stage and the daylight ticker rows are ports#14130
  • Preserve external locks on destroyed shulker boxes#13762
  • threads: detect performance cores on Linux hybrid CPUs#15014
  • /data on an item frame detaches its old map when only the stack's count changes#14360
  • sculk: resume vibration particle on reload (fixes #12935)#13753
  • Main compiles again: hold_fullbright's replay check and the firework tests' new_rocket calls#15027
  • Silence a chest's comparator while a cat sits on it#14737
  • A shulker keeps its armor attribute once its lid has moved#14987
  • A villager narrows a loaded FoodLevel to a byte (#14967)#14969
  • A zombie villager starts its cure when it loads a ConversionTime#14955
  • Fix biome table panic when empty#14951
  • Slot sources: holder and tag codec, and slot-source tags in DataStore#14935
  • Perf: the replay excuse tests the distance before the entity kind#14932
  • port: a crafter's grid counts for the recipe book#14928
  • client: show custom server crafting recipes in recipe book#14910
  • port: a disc coming or going posts block_change#14900
  • Shader API 0.2: [frame] primaries, and the rule for new names#14892
  • The merchant's trade scroller shows its cursor#14785
  • input: clear modifiers on focus loss and heal alt and super keys (fixes #14715)#14776
  • fix(game): evaluate attack_speed attribute modifiers for player attack cooldown (#14721)#14772
  • A mob that cannot be a baby does not take the food that grows it#14745
  • fix(input): reset debug keys modifier state on window focus loss (#14715)#14742
  • Firework rockets: honour Silent, post EXPLODE, count block launches#14723
  • mobs: apply squid sinking velocity on land under NoAI (fixes #14467)#14710
  • Falling blocks: cache each model's vertices instead of rebuilding them every frame#14705

Launcher

Horizon launcher 0.2.59

9 fixes.

Other changes

  • Launcher: the glass Mods results and the Worlds list build only the rows near the view#13833
  • Load sound assets from combined native mods#11083#10914
  • Windows launcher setup: static DLL imports load from System32 only#13579#13979#13108
  • Prepare: prefer a launcher folder that has every library#14017#13872
  • Fix belarusian translations#14063
  • fix(prepare): release locks before closing descriptors#8230
  • Launcher: glass Settings Data folder row gets the Move button#14074#14034
  • launcher: remove offline names; play only as an account that owns the game#14127
  • Launcher: the Home version picker scrolls its list#14409#14407

Launcher

Horizon launcher 0.2.58

  • Launcher: the 155 strings Kazakh still shows in English
  • Launcher: the 131 strings Venetian still shows in English
  • Launcher: the 210 strings West Frisian still shows in English
  • Launcher: the 119 strings Azerbaijani still shows in English
  • Launcher: the 117 strings Mongolian still shows in English
  • Launcher: the 116 strings Slovenian still shows in English
  • Launcher: the 118 strings Icelandic still shows in English
  • Launcher: the 115 strings Basque still shows in English
  • Launcher: the 109 strings Tamil still shows in English
  • Launcher: the 136 strings Hawaiian still shows in English
  • Launcher: the 204 strings Latin still shows in English
  • Launcher: the 164 strings Luxembourgish still shows in English
  • Launcher: the 111 strings Macedonian still shows in English
  • Launcher: the 162 strings Maltese still shows in English
  • Launcher: the 117 strings Silesian still shows in English
  • Launcher: the 108 strings Serbian (Cyrillic) still shows in English
  • Launcher: the 124 strings Scottish Gaelic still shows in English
  • Launcher: the 109 strings Bashkir still shows in English
  • Launcher: the 125 strings Northern Sami still shows in English
  • Launcher: the 221 strings Turkish still shows in English
  • Launcher: the 110 strings Urdu still shows in English
  • Launcher: the 113 strings Tatar still shows in English
  • Launcher: the 131 strings Igbo still shows in English
  • Launcher: the 137 strings Dutch still shows in English
  • Launcher: the 172 strings Filipino still shows in English
  • Launcher: the 122 strings Irish still shows in English
  • Launcher: the 120 strings Zulu still shows in English
  • Launcher: the 128 strings Croatian still shows in English
  • Launcher: the 122 strings Estonian still shows in English
  • Launcher: the 166 strings Polish still shows in English
  • Launcher: the 114 strings Armenian still shows in English
  • Launcher: the 117 strings Lao still shows in English
  • Launcher: the 192 strings Indonesian still shows in English
  • Launcher: the 121 strings Hungarian still shows in English
  • Launcher: the 141 strings Afrikaans still shows in English
  • Launcher: the 120 strings Esperanto still shows in English
  • Launcher: the 111 strings Chuvash still shows in English
  • Launcher: the 109 strings Persian still shows in English
  • Launcher: the 211 strings Japanese still shows in English
  • Launcher: the 123 strings Lombard still shows in English
  • Launcher: the 126 strings Kyrgyz still shows in English
  • Launcher: the 150 strings Hebrew still shows in English
  • Launcher: the 185 strings Portuguese (Portugal) still shows in English
  • Launcher: the 132 strings Somali still shows in English
  • Launcher: the 111 strings Yiddish still shows in English
  • Launcher: the 135 strings Slovak still shows in English
  • Launcher: the 158 strings Ukrainian still shows in English
  • Launcher: the 116 strings Breton still shows in English
  • Launcher: the 119 strings Albanian still shows in English
  • Launcher: the 183 strings Limburgish still shows in English
  • Launcher: the 114 strings Faroese still shows in English
  • Launcher: the 129 strings Latvian still shows in English
  • Launcher: the 119 strings Greek still shows in English
  • Launcher: the 120 strings Finnish still shows in English
  • Launcher: the 135 strings Swedish still shows in English
  • Launcher: the 109 strings Vietnamese still shows in English
  • Launcher: the 73 strings Simplified Chinese still shows in English
  • Launcher: the 136 strings Romanian still shows in English
  • Launcher: the 158 strings Bosnian still shows in English
  • Launcher: the 113 strings Korean still shows in English
  • Launcher: the 122 strings Uzbek still shows in English
  • Launcher: the 139 strings Norwegian still shows in English
  • Launcher: the 129 strings Bulgarian still shows in English
  • Native hooks: recipe viewer lookups and mods' recipe categories
  • Launcher: the 3 strings Italian still shows in English
  • Launcher: the 125 strings Malay still shows in English
  • Launcher: the 162 strings Hindi still shows in English
  • Launcher: the 9 strings Spanish still shows in English
  • Launcher: the 126 strings Catalan still shows in English
  • Launcher: the 22 strings French still shows in English
  • Launcher: the 122 strings Galician still shows in English
  • Launcher: the 14 strings Czech still shows in English
  • Launcher: the 33 strings Thai still shows in English
  • Launcher: the 1 strings Russian still shows in English
  • Launcher: the 124 strings Yoruba still shows in English
  • Launcher: the 156 strings Danish still shows in English
  • Launcher: the 161 strings Arabic still shows in English
  • Launcher: the 33 strings German still shows in English
  • Launcher: the 111 strings Georgian still shows in English
  • Launcher: the 122 strings Welsh still shows in English
  • Launcher: the 162 strings Belarusian still shows in English
  • Launcher: the 134 strings Occitan still shows in English
  • Launcher: the 112 strings Kannada still shows in English
  • Launcher: the 116 strings Lithuanian still shows in English
  • Launcher: the 109 strings Sakha still shows in English
  • Content mods' fluids flow in the world as their liquid blocks
  • Content mods' fluid buckets pour and pick up their fluids

And 2 fixes.

Other changes

  • Launcher: the 155 strings Kazakh still shows in English#13525#13374
  • Launcher: the 131 strings Venetian still shows in English#13520#13518
  • Launcher: the 210 strings West Frisian still shows in English#13519#13375
  • Launcher: the 119 strings Azerbaijani still shows in English#13515#13422
  • Launcher: the 117 strings Mongolian still shows in English#13509#13323
  • Launcher: the 116 strings Slovenian still shows in English#13508#13373
  • Launcher: the 118 strings Icelandic still shows in English#13507#13378
  • Launcher: the 115 strings Basque still shows in English#13506#13502
  • Launcher: the 109 strings Tamil still shows in English#13505#13324
  • Launcher: the 136 strings Hawaiian still shows in English#13503#13359
  • Launcher: the 204 strings Latin still shows in English#13501#13498
  • Launcher: the 164 strings Luxembourgish still shows in English#13500#13495
  • Launcher: the 111 strings Macedonian still shows in English#13452#13442
  • Launcher: the 162 strings Maltese still shows in English#13433#13345
  • Launcher: the 117 strings Silesian still shows in English#13430#13409
  • Launcher: the 108 strings Serbian (Cyrillic) still shows in English#13429#13405
  • Launcher: the 124 strings Scottish Gaelic still shows in English#13426#13399
  • Launcher: the 109 strings Bashkir still shows in English#13425#13400
  • Launcher: the 125 strings Northern Sami still shows in English#13424#13386
  • Launcher: the 221 strings Turkish still shows in English#13416#13394
  • Launcher: the 110 strings Urdu still shows in English#13414#13392
  • Launcher: the 113 strings Tatar still shows in English#13412#13390
  • Launcher: the 131 strings Igbo still shows in English#13472#13367
  • Launcher: the 137 strings Dutch still shows in English#13470#13435
  • Launcher: the 172 strings Filipino still shows in English#13466#13326
  • Launcher: the 122 strings Irish still shows in English#13458#13444
  • Launcher: the 120 strings Zulu still shows in English#13456#13443
  • Launcher: the 128 strings Croatian still shows in English#13454#13350
  • Launcher: the 122 strings Estonian still shows in English#13451#13352
  • Launcher: the 166 strings Polish still shows in English#13438#13417
  • Launcher: the 114 strings Armenian still shows in English#13436#13404
  • Launcher: the 117 strings Lao still shows in English#13308#13304
  • Launcher: the 192 strings Indonesian still shows in English#13301#13296
  • Launcher: the 121 strings Hungarian still shows in English#13300#13291
  • Launcher: the 141 strings Afrikaans still shows in English#13297#13286
  • Launcher: the 120 strings Esperanto still shows in English#13295#13284
  • Launcher: the 111 strings Chuvash still shows in English#13294#13282
  • Launcher: the 109 strings Persian still shows in English#13293#13283
  • Launcher: the 211 strings Japanese still shows in English#13292#13259
  • Launcher: the 123 strings Lombard still shows in English#13290#13279
  • Launcher: the 126 strings Kyrgyz still shows in English#13403#13357
  • Launcher: the 150 strings Hebrew still shows in English#13388#13372
  • Launcher: the 185 strings Portuguese (Portugal) still shows in English#13380#13327
  • Launcher: the 132 strings Somali still shows in English#13369#13348
  • Launcher: the 111 strings Yiddish still shows in English#13365#13344
  • Launcher: the 135 strings Slovak still shows in English#13364#13331
  • Launcher: the 158 strings Ukrainian still shows in English#13362#13332
  • Launcher: the 116 strings Breton still shows in English#13361#13338
  • Launcher: the 119 strings Albanian still shows in English#13355#13340
  • Launcher: the 183 strings Limburgish still shows in English#13354#13341
  • Launcher: the 114 strings Faroese still shows in English#13353#13337
  • Launcher: the 129 strings Latvian still shows in English#13329#13320
  • Launcher: the 119 strings Greek still shows in English#13328#13319
  • Launcher: the 120 strings Finnish still shows in English#13325#13317
  • Launcher: the 135 strings Swedish still shows in English#13434#13358
  • Launcher: the 109 strings Vietnamese still shows in English#13411#13389
  • Launcher: the 73 strings Simplified Chinese still shows in English#13318#13312
  • Launcher: the 136 strings Romanian still shows in English#13315#13309
  • Launcher: the 158 strings Bosnian still shows in English#13314#13258
  • Launcher: the 113 strings Korean still shows in English#13313#13306
  • Launcher: the 122 strings Uzbek still shows in English#13310#13305
  • Launcher: the 139 strings Norwegian still shows in English#13302#13298
  • Launcher: the 129 strings Bulgarian still shows in English#13299#13260
  • Native hooks: recipe viewer lookups and mods' recipe categories#13070#13052
  • Launcher: the 3 strings Italian still shows in English#13266#13254
  • Launcher: the 125 strings Malay still shows in English#13268#13262
  • Launcher: the 162 strings Hindi still shows in English#13269#13263
  • Launcher: the 9 strings Spanish still shows in English#13270#13253
  • Launcher: the 126 strings Catalan still shows in English#13272#13264
  • Launcher: the 22 strings French still shows in English#13273#13265
  • Launcher: the 122 strings Galician still shows in English#13274#13267
  • Launcher: the 14 strings Czech still shows in English#13276#13256
  • Launcher: the 33 strings Thai still shows in English#13280#13275
  • Launcher: the 1 strings Russian still shows in English#13281#13257
  • Launcher: the 124 strings Yoruba still shows in English#13477#13457
  • Launcher: the 156 strings Danish still shows in English#13285#13261
  • Launcher: the 161 strings Arabic still shows in English#13287#13255
  • Launcher: the 33 strings German still shows in English#13288#13277
  • Launcher: the 111 strings Georgian still shows in English#13289#13278
  • Launcher: the 122 strings Welsh still shows in English#13496#13370
  • Launcher: the 162 strings Belarusian still shows in English#13420#13397
  • Launcher: the 134 strings Occitan still shows in English#13490#13419
  • Launcher: the 112 strings Kannada still shows in English#13486#13476
  • Launcher: the 116 strings Lithuanian still shows in English#13484#13448
  • Launcher: the 109 strings Sakha still shows in English#13482#13469
  • Content mods' fluids flow in the world as their liquid blocks#13594
  • Content mods' fluid buckets pour and pick up their fluids#13676
  • Launcher: a trait mod made for another commit moves the build to it#13187#13183
  • Native hooks: three-valued permission node helper#13550#13542

Launcher

Horizon launcher 0.2.57

  • Portuguese (Brazil): the 137 launcher strings still in English (remote servers, mods, installs)
  • German: the 213 launcher strings still in English (remote servers, mods, installs)
  • Italian: the 142 launcher strings still in English (remote servers, mods, installs)
  • French: the 55 launcher strings still in English (remote servers, editions, tags)
  • Mod API: typed inventory hooks and change events
  • Launcher: let a bundle package depend on the bundle's own crates
  • Content mods declare fluids, with network ids after vanilla's
  • Launcher: the 124 strings Friulian still shows in English

And 1 fix.

Other changes

  • Portuguese (Brazil): the 137 launcher strings still in English (remote servers, mods, installs)#12772#12766
  • German: the 213 launcher strings still in English (remote servers, mods, installs)#12776#12767
  • Italian: the 142 launcher strings still in English (remote servers, mods, installs)#12777#12768
  • French: the 55 launcher strings still in English (remote servers, editions, tags)#12771#12765
  • Mod API: typed inventory hooks and change events#12409#12890
  • Launcher: let a bundle package depend on the bundle's own crates#12409#12891
  • Content mods declare fluids, with network ids after vanilla's#12967#5553
  • Launcher: the 124 strings Friulian still shows in English#13530#13363
  • Port pack: carried mod features get 26.3's shape (config unwrapped), so mod ores generate#12829#12828

Launcher

Horizon launcher 0.2.56

  • Content mods: choose light emission per block state
  • Launcher: a registry project's GitHub stars as a star, in the list and the card
  • Port pack: Lithostitched add_features/remove_features modifiers become NeoForge biome modifiers
  • Port pack: Lithostitched weighted_selector features become 26.3's weighted_random_selector

And 13 fixes.

Other changes

  • Content mods: choose light emission per block state#11068#11063
  • Launcher: a registry project's GitHub stars as a star, in the list and the card#12670#12665
  • Port pack: Lithostitched add_features/remove_features modifiers become NeoForge biome modifiers#12695#12694
  • Port pack: Lithostitched weighted_selector features become 26.3's weighted_random_selector#12700#12698
  • Launcher: native mod version follow-ups (kept versions, build fallback, changelogs)#12535#12534
  • Launcher Shop: draw the items on its pictures, no Buy on an owned pack#12675#12674
  • datafix: prepare the 1.13 data fixer tables from the player's jar#12756#12745
  • Prepare: find Prism Launcher's flat meta/net.minecraft/<version>.json#12601#12582
  • launcher: let the wheel reach the page when an inner list cannot scroll that way#12658#12650
  • launcher: the sidebar's update card and Discord button wrap long translations#12646#12645
  • Launcher on Windows: a program running from a version keeps it in use#12596#12588
  • Fix Czech translation (typos, grammar, terminology)#12635#12585
  • Registry: a new icon is a new address#12667#12663
  • Launcher: find a Java installed on the Windows PATH#12692#12688
  • Port pack: block state variants take 1.21.1's string booleans and numbers ("uvlock": "true")#12697#12696
  • Launcher: Find mods lists what works on the instance; builds start on its Horizon#12710#12709
  • servers: prevent child pipes hanging on Windows and use REST API for server controls#12567

Game

Nightly 2026-11-08 · fdc87ae

  • Launcher Shop: a game-style item shop with the items drawn

And 2 fixes.

Other changes

  • Launcher Shop: a game-style item shop with the items drawn#11894#11889
  • Block contact only for entities in entity-ticking chunks#11948#11881
  • Portals: entities past the simulation distance neither cross nor cool down#11981#11960

Launcher

Horizon launcher 0.2.55

  • Native hook: fishing_medium, a bobber that floats and fishes outside water
  • Port pack: food items carry over, as 26.3's food, consumable and use_remainder

And 11 fixes.

Other changes

  • Native hook: fishing_medium, a bobber that floats and fishes outside water#12326#12300
  • Port pack: food items carry over, as 26.3's food, consumable and use_remainder#12426#12425
  • launcher: a native mod's Versions tab shows which version fits, and picks one#12357#12356
  • Port pack: tags alone claim no namespace#12412#12411
  • Port pack: recipes with NeoForge conditions are upgraded when NeoForge loaded them#12414#12413
  • Port pack: carried models on 1.21.1's farmland template use 26.3's indented cube#12416#12415
  • upgrade-datapack: nether_forest_vegetation becomes 26.3's spread simple_block#12422#12421
  • upgrade-datapack: weird_scaled_sampler becomes 26.3's interval_select of scaled noises#12424#12423
  • Content mods: copy the files the build doesn't parse instead of reading and rewriting them#12443#12442
  • Port pack: an item that places a block of another name (seeds) binds that block#12418#12417
  • upgrade-datapack: 1.21.1 biomes upgrade their effects to 26.3 attributes and their carvers to a list#12483#12482
  • upgrade-datapack: surface rules drop the biomes nothing defines, as 1.21.1 never matched them#12481#12480
  • Port pack: without the oracle, armour the vanilla armour tags name is worn in its slot#12516#12515

Launcher

Horizon launcher 0.2.54

  • Port pack: carry 1.20 jars' data under 1.21's folder names
  • Mod menu types: a crafting grid that crafts as the crafting table
  • Mod menu types: linked slots that show other containers' slots (native_menu_links)

And 7 fixes.

Other changes

  • Port pack: carry 1.20 jars' data under 1.21's folder names#12162
  • Mod menu types: a crafting grid that crafts as the crafting table#12233
  • Mod menu types: linked slots that show other containers' slots (native_menu_links)#12267
  • Modpack import: don't report an empty shaderpacks/ folder as a shader pack#12164#12163
  • Find CurseForge instances when --folder names the Instances folder#12080#12079
  • launcher: give up on a keyring that never answers instead of hanging Play#12179#12227
  • Translate remaining Russian strings in launcher and game#11870
  • Launcher: say what a data pack does in Horizon today, and install packs that only have recipes or worldgen#12166#12165
  • launcher: Home's patch log and console logs no longer scroll the page#11860#11853
  • Explain preparation failures caused by missing Java timezone data#12285

Launcher

Horizon launcher 0.2.53

  • List other launchers' modpacks on the Modpacks page ("Found on this computer")
  • Launcher: play a profile that only has data packs
  • Spanish: finish the launcher and es_es strings

And 7 fixes.

Other changes

  • List other launchers' modpacks on the Modpacks page ("Found on this computer")#12082#12081
  • Launcher: play a profile that only has data packs#12088
  • Spanish: finish the launcher and es_es strings#11826#11814
  • Native mod API: hold the terrain's picture while the world changes (native_world_hold)#11956#11954
  • Native mods: a game built with horizon-mixins gets the mod image slot, native-mods.json or not#12014#12005
  • telemetry: match the user name exactly when lowercasing moves boundaries#12095
  • Launcher: write a prepared version's data file after installing it#11762#11761
  • Agent control: no shared /tmp socket path, and bench refuses bad numbers#11837
  • Launcher: a 0 px blur leaves the glass plates sharp#12132#12062
  • Port pack: a block that can't occlude (noOcclusion) carries occludes=false#12147#12146

Launcher

Horizon launcher 0.2.52

  • Native mods: create block entities from the actual state
  • Native content: resolve block geometry by entity context

And 4 fixes.

Other changes

  • Native mods: create block entities from the actual state#11098#11093
  • Native content: resolve block geometry by entity context#11116#11103
  • Port pack: RenderTooltipEvent.Color and AnvilRepairEvent under their 26.1 names#11795
  • Play with Friends: the guest's loopback tunnel takes only its own client#11834
  • Play with Friends: refuse a port mapping granted no lifetime#11835
  • fix(launcher): wrap Home's tab strip on narrow windows instead of scrolling it sideways#11861#11849

Launcher

Horizon launcher 0.2.51

  • Launcher Shop: a game-style item shop with the items drawn

And 2 fixes.

Other changes

  • Launcher Shop: a game-style item shop with the items drawn#11894#11889
  • Launcher Shop: dress Horizon's stand-in player when there is no skin#11901
  • Older servers: experimental native adapters for 1.20.2–1.21.8#8718#8705

Game

Nightly 2026-11-07 · 2ebf00a

  • Controllers: the gameplay guide, what the buttons do now, in play and in inventories

And 8 fixes.

Other changes

  • Controllers: the gameplay guide, what the buttons do now, in play and in inventories#10305
  • horizon-client: discord, friends and heartbeat features (default on)#11550#11539
  • Recipes: preserve the search footer when returning from a recipe#11443#11773#11441
  • Realms: the subscription, settings and invite codes read what the service sends#11640
  • Expose native HUD mode with independent hand visibility#11587#11123
  • Omit empty Tags from modeled entity saves#10291#10284
  • Fix dropped-item Health short conversion#10344#10296
  • Save spectral arrow duration and its default#10290#10257
  • Entity saves: a warden's anger keeps its suspects by UUID#10365

Launcher

Horizon launcher 0.2.50

  • Launcher: patch notes in a dropdown under each version
  • Adding support for installing from PrismLauncher-portable
  • Launcher: Nord theme and the theme picker in the Blocks look
  • Launcher: make the latest Nightly obvious
  • Launcher: add another Microsoft account from a private browser window

And 10 fixes.

Other changes

  • Launcher: patch notes in a dropdown under each version#11591
  • Adding support for installing from PrismLauncher-portable#11135
  • Launcher: Nord theme and the theme picker in the Blocks look#11218
  • Launcher: make the latest Nightly obvious#11763#11743
  • Launcher: add another Microsoft account from a private browser window#3786#11885
  • Launcher: the macOS title bar keeps its place without glass#11557
  • launcher: prune auto-installed Nightlies after GUI updates#9974#9969
  • Expose focused text fields before character insertion#11111
  • net: configure TCP keepalive and zero-alloc stream pumps#11464
  • Port pack: carried models name 26.3's iron chain#11496#11494
  • Port pack: villager and wandering trader trade events are data in 26.x#11647
  • horizon-core: a clippy lint on main stops every verify run#11735
  • Update tokio to 1.53.3 and mysql to 28 (lru 0.18) for advisories#11745
  • Seal the launcher's secrets file with a per-install secret#11744
  • an edit in game/ no longer rebuilds the renderer: dev rebuild 22.7 s -> 12.0 s#11757

Launcher

Horizon launcher 0.2.49

  • Native mods: server hooks and helpers for plugin ports (console, connection, permissions, commands, login, players, inventory, movement, vehicles, chunks)
  • Native mods: more server hooks and helpers for plugin ports (feedback, packets, visuals, NPCs, damage, menus, worldgen, diagnostics, deps)

And 4 fixes.

Other changes

  • Native mods: server hooks and helpers for plugin ports (console, connection, permissions, commands, login, players, inventory, movement, vehicles, chunks)#11019#10461#10504#10505
  • Native mods: more server hooks and helpers for plugin ports (feedback, packets, visuals, NPCs, damage, menus, worldgen, diagnostics, deps)#11028
  • Windows ARM64: the x64 build emulated there also starts on DirectX 12#11080
  • Keep native shader identity and options in the launcher#10169#10123
  • Launcher: keep the Home tab notch and the settings rows on wide windows#11528
  • Launcher: the Mods page's install messages and indirect labels are translated#10035#10011

Launcher

Horizon launcher 0.2.48

  • Make launcher titlebar match Glass UI
  • Native content: place a block through an item alias
  • Native mods: select the stack returned by Pick Block
  • Native mods: let existing block fluid helpers reach native-owned tanks
  • Launcher: a server on another computer, run over SSH

And 9 fixes.

Other changes

  • Make launcher titlebar match Glass UI#10129
  • Native content: place a block through an item alias#11114#11097
  • Native mods: select the stack returned by Pick Block#11070#11066
  • Native mods: let existing block fluid helpers reach native-owned tanks#11090#11073
  • Launcher: a server on another computer, run over SSH#10166#10161
  • Port pack: events, a mod's NeoForge listeners against the hooks#9953
  • Launcher: rewrite the Thai translation (th.json)#11173#11166
  • Launcher French: translate the strings left in English, vous throughout#10019
  • Native mods on Intel Macs: the launcher brings Rust for x86_64 macOS#11079#11077
  • launcher: an automatic update keeps a disabled mod off#10173#10071
  • Launcher: update status and Check now move from About to Updates#11042#11035
  • Fix overflow in translated launcher instance menus#11227#11177
  • Add native client sound parameter interception#11076
  • fix(launcher): support responsive wrapping on narrow windows#10529#6362

Launcher

Horizon launcher 0.2.47

8 fixes.

Other changes

  • upgrade-datapack: a simple state provider becomes a state object#10192#10160
  • launcher: a pack update keeps the player's mod choices#10207
  • Launcher: open HORIZON_LAUNCHER_PROJECT once without remove_var#10070
  • launcher: fix account skin arm-type segmented control overflow and caption layout#10310
  • Launcher: rustls 0.23.46 for four RustSec advisories#10076
  • port-pack: cap every jar and pack entry it inflates (launcher OOM from a mod search)#10087
  • launcher: retry native cache fixture exec on ETXTBSY and copy via temp rename#10295#10271
  • Port pack: a mod made for 1.20 is not carried or counted as come over#10259#10249

Launcher

Horizon launcher 0.2.46

6 fixes.

Other changes

  • Launcher: a refused founder claim says why and leads to the checkout#10364
  • launcher: rebuild engine crates after a Nightly switch (stamp staged files with the current time)#10449#10421
  • Native mods: entity model layers built in code, baked and drawn (RegisterLayerDefinitions)#10435#10425
  • Prepared files: name and repair the empty JSON a killed export leaves#10389#10303
  • Launcher: pages drawn ask "is it prepared?" from memory, not the disk#10509
  • upgrade-datapack: a noise with no octaves becomes a silent 26.3 noise#10191#10159

Launcher

Horizon launcher 0.2.45

  • Cosmetics: companion, trail and aura item format
  • Cosmetics: "Hide other players' trails and auras"
  • Cosmetics: companions, trails and auras in the Wardrobe
  • Launcher: downloads can go through a SOCKS proxy

And 6 fixes.

Other changes

  • Cosmetics: companion, trail and aura item format#10140
  • Cosmetics: "Hide other players' trails and auras"#10143
  • Cosmetics: companions, trails and auras in the Wardrobe#10145
  • Launcher: downloads can go through a SOCKS proxy#10029#8143
  • launcher: serialize mod mutations per game home#10220#10072
  • launcher: leave out the native mods that break a build, not the build#10215
  • launcher: warn before installing a native mod that doesn't build on your Horizon#10225
  • launcher: make pictures at the drawn size, capped by the GPU's limit (not 3840 px)#10308
  • Preparing ignores the player's global Java options#10080#10067
  • Native mods: an error in a helper's generated call names its mod#10342

Launcher

Horizon launcher 0.2.44

  • Launcher: the Wardrobe's player in 3D, turned by drag, zoomed by the wheel
  • Cosmetics: the emote format (keyframed bones, root, props)
  • Launcher Shop: prices, sets and the Supporter badge from the catalogue; the web checkout
  • Launcher: a plain Shop tab beside the Wardrobe
  • Launcher Shop: a basket, gifts, the Supporter badge, and Pay in the browser

And 2 fixes.

Other changes

  • Launcher: the Wardrobe's player in 3D, turned by drag, zoomed by the wheel#10153
  • Cosmetics: the emote format (keyframed bones, root, props)#10091
  • Launcher Shop: prices, sets and the Supporter badge from the catalogue; the web checkout#10137
  • Launcher: a plain Shop tab beside the Wardrobe#10138
  • Launcher Shop: a basket, gifts, the Supporter badge, and Pay in the browser#10139
  • Launcher Wardrobe: the Shop button reads "Get more cosmetics"#10223
  • launcher: draw screenshots at their shown size, under a byte budget (24 GiB leak)#10236

Launcher

Horizon launcher 0.2.43

  • feat(launcher): say in plain words whether a modpack will work
  • Build native mods on Windows ARM64
  • Cosmetics: Horizon players' mark by their names; the founder badge after the name
  • Mod browser: registry data packs into a world, categories and tags
  • Mod browser: registry screenshots in a project's gallery
  • Launcher: registry mods update automatically
  • Launcher: native registry mods update at start, then build before Play
  • Mod browser: "from Horizon" only on Horizon's own projects
  • Mod browser: filter Horizon's registry by tags, picked filters in view
  • Launcher: a registry project's GitHub stars, and a Star on GitHub button

And 26 fixes.

Other changes

  • feat(launcher): say in plain words whether a modpack will work#9638#9629
  • Build native mods on Windows ARM64#9479#9407
  • Cosmetics: Horizon players' mark by their names; the founder badge after the name#9440
  • Mod browser: registry data packs into a world, categories and tags#9889
  • Mod browser: registry screenshots in a project's gallery#9894
  • Launcher: registry mods update automatically#9898
  • Launcher: native registry mods update at start, then build before Play#9901
  • Mod browser: "from Horizon" only on Horizon's own projects#10026
  • Mod browser: filter Horizon's registry by tags, picked filters in view#10027
  • Launcher: a registry project's GitHub stars, and a Star on GitHub button#9934#9929
  • fix(launcher): reuse the Wardrobe session until it expires#9421#9392
  • fix(port-pack): invalidate stale harness verdicts#9453#9444
  • Native mods: depth-tested world text and atlas quads#8918#9661#8914
  • Content mods: living entity types from a zombie or villager template#9667
  • Launcher: cap what a shared instance or a .mrpack may unpack to#9693
  • Mod registry: decide project ownership by numeric GitHub ID#9688
  • Native mods: register_goals, a mob's goals per entity type (Mob.registerGoals)#9713
  • Launcher: a Vulkan driver crash at the renderer's start switches Linux to OpenGL#9842
  • Nightly: sign each build for its own version (SHA256SUMS.v2.sig)#9684
  • perf(launcher): optimize glass blur on scroll and polish UI layout#9695#9665
  • Give package-managed launchers the right update guidance#9804#9651
  • fix(windows): avoid repeated firewall prompts in fixtures and launcher updates#9723#9685
  • Content mods: a living type may copy the wandering trader (a neutral, goal-driven template)#9761
  • fix(launcher): make modpack row explanations translatable#9794#9644
  • Launcher: native mods with named hook points need the revision's catalog#9910
  • fix(launcher): expose launch settings in glass instance menu#9790#9719
  • Keep account buttons inside the glass Settings card#9809#9738#9742
  • launcher: fix top bar action button clipping and invite field overflow#9911#9902
  • Mod browser: say before install whether a native mod builds on your Horizon#9866#9860
  • Launcher: Uninstall in Control Panel opens its window#10003
  • Launcher: uninstall window uses already translated strings#10017
  • Launcher: the Wardrobe links to the site's shop, nothing more#10021
  • Launcher: fix the Windows build of the uninstall window dispatch#10030
  • Shader API 0.2: linear light, display info and a tonemap stage (HDR step 2b)#9930
  • Launcher tests: check every host's build commands, on any machine#9479#10068
  • Explain Smart App Control blocking native builds#5911#9913

Game

Nightly 2026-11-05 · 66f3981

  • Controllers: a settings screen in the graphics style, and one notice per view
  • Native mods: a cancellable toast_add hook (ToastAddEvent)

And 20 fixes.

Other changes

  • Controllers: a settings screen in the graphics style, and one notice per view#9733
  • Native mods: a cancellable toast_add hook (ToastAddEvent)#9807#9710
  • Realms: the players tab with invites, operators and removal#9836
  • Terrain shader: scalar selects so old AMD OpenGL drivers compile it#9915#9892
  • Control endpoint: player-release ends a hand-over on the source server#8709
  • Splitscreen: a pause menu no longer stops its window's ticks#9722#9718
  • Villagers waking up stand beside the bed where vanilla puts them, shelves included#9737#9502
  • Canonicalize map decoration component type namespaces#9743#9727
  • Detach old maps before adopting live frame Item data#9751#9721
  • Shader packs: the block atlas blends its two nearest levels#9765#9760
  • fix(packs): open physical Windows pack folder paths#9797#9524
  • Crafter: the recipe trigger uses the player's box, as vanilla's area does#9802#9780
  • Native mods: selectively register reviewed client hooks as APIs 410–411#9812#9806
  • mobs: breeding experience draws from the parent's random inside the m…#9818#8038
  • Drop a Loyalty trident whose owner is dead or spectating#9827#9786
  • Controllers: X and Y in their places on unmapped Xbox-style Linux pads#9830#9813
  • fix: prevent block placement through other players#9841#9642
  • Play missing fang, wither, fireball and level-up effects#9845#9778
  • Boot screen: paint through a memory bitmap so repainting does not flicker#9756
  • Shader packs: sunPosition, moonPosition and upPosition are Iris's to the last bit#9769
  • Shader packs: shadowDistanceRenderMul keeps a cube around the camera, as in Iris#9772
  • Fix the prepared-data LOD test fixtures#9821#8583

Launcher

Horizon launcher 0.2.42

  • Launcher: "A new version is available" with Update; copies that cannot update themselves say so
  • Wardrobe: "Claim for free" where Paddle doesn't sell
  • Launcher: choose game architecture independently on Windows ARM

And 16 fixes.

Other changes

  • Launcher: "A new version is available" with Update; copies that cannot update themselves say so#9311#9287
  • Wardrobe: "Claim for free" where Paddle doesn't sell#9419#9416
  • Launcher: choose game architecture independently on Windows ARM#9480#9408
  • launcher: dynamic right padding for friend invite code input#9518#9507
  • launcher: allow editing instance icon from home and preserve picture in dialog#9436#8689
  • Native mods: final GUI overlay and current-frame camera#9556#9546
  • Native mods: world primitives hook (lines, boxes, beams, text, see-through)#9568#9555
  • Launcher: name mods in injected-helper compiler errors#9579
  • Fix native build companions in the macOS game app#9529#9521
  • fix(port-pack): read version and loader from a CurseForge app instance#9583#9576
  • Launcher MCP: reach a game started from its window with Agent Control on#9595#9465
  • launcher: name the mod in E_MODULE_CONFLICT and log conflicting pins#9596
  • launcher: auto-detect Minecraft 26.3 installs from Dawn Client#9563#9547
  • Launcher: a staged update belongs to its process and is checked again at install#9433#9412
  • Friends: bound wrong short-code guesses per sharing session#9626
  • Launcher: keep the mod browser's list from deleting files outside the game folder#9627
  • Launcher: an update failure isn't shown once its release is in; a data move drops a staged update#9648
  • fix(launcher): say what to do next in three common errors#9639#9630
  • fix: copy-from reads a CurseForge instance's Minecraft version and loader#9637#9628

Launcher

Horizon launcher 0.2.41

  • Launcher: the setup wears the launcher's look
  • Launcher: the shop lives on the website; the Wardrobe keeps owned items and purchases
  • launcher: install and launch Forge and NeoForge instances
  • launcher: import a modded .mrpack as a Java instance
  • launcher: pick the loader's version in New instance
  • Launcher: move managed data to another drive
  • Cosmetics: others' off by default for players who own none
  • Launcher: a Performance mode for slower computers (and an accent that changes at once)
  • feat(windows): add native ARM64 build support

And 15 fixes.

Other changes

  • Launcher: the setup wears the launcher's look#9173#9167
  • Launcher: the shop lives on the website; the Wardrobe keeps owned items and purchases#9286
  • launcher: install and launch Forge and NeoForge instances#7740
  • launcher: import a modded .mrpack as a Java instance#7987
  • launcher: pick the loader's version in New instance#7998
  • Launcher: move managed data to another drive#7448#7218
  • Cosmetics: others' off by default for players who own none#9342
  • Launcher: a Performance mode for slower computers (and an accent that changes at once)#9259#9255
  • feat(windows): add native ARM64 build support#8274#8247
  • Native builds: say which mod pins the commit, and rebuild on the picked Horizon#9219
  • Native mods: a client hook point that reads the server's play packets#8836#8820
  • Launcher: a failed wardrobe or cosmetics save is printed#9179
  • feat(import): a game build dropped on the window is imported#8648
  • Show the native mod install notice where players can see it#9172#8978
  • Content: read every declaration through one reader#8726#8725
  • launcher: bound native build caches and add safe cleanup#8632#9242#8028
  • Launcher: a cosmetic item's id and hash can't leave the cache folder#9254
  • Launcher: a claim state from a newer service still reads (ClaimState::Unknown)#9256#9213
  • launcher: fix play more click, list gaps, input height, blur, and scroll propagation#9208#9148#9169
  • Launcher: a right click on a sidebar row opens its ⋮ menu#9285
  • Remove the RAM limit#6652#6651
  • Launcher: keep the Wardrobe's name tag mark instead of baking it each draw#9323#9216
  • Keep mod installation beside search results#9328#9231
  • Native builds: a horizon-mixins error starts with the mod that doesn't apply#9378

Game

Nightly 2026-11-04 · 6475f62

  • Launcher: the Shop on the glass look, the new founder set, cosmetics on by default

And 49 fixes.

Other changes

  • Launcher: the Shop on the glass look, the new founder set, cosmetics on by default#8620
  • launcher: Sculk banner on every page without its border, GitHub mark on Sponsor#9095
  • game: a wither never rides a minecart#8843#8790
  • mobs: a zero-duration effect is over, not infinite#8853#8721
  • mobs: the wither takes no potion effect#8857#8776
  • mobs: environmental damage does not dim a glow squid#8864#8724
  • Boats never take a Warden or Wither aboard, as vanilla#8887#8831
  • chat: include entity_types and wind charges in summon autocomplete#8501#8419
  • mobs: suppress Guardian and Elder Guardian flop sounds when silent#8966#8933
  • mobs: set Elder Guardian wander restriction on ai.home#8952#8934
  • game: guard container open and close game events by opener count edge#8964#8957
  • mobs: exclude wither from sweet berry bush and powder snow slowdown#9051#8785
  • Advancements: thrown snowballs, eggs and pearls and bucketed mobs fire their triggers#8654#8653
  • Advancements: a bare id, tag or key in a predicate reads as a minecraft: one#8662#8661
  • Advancements: potion and cloud kills and falling-block hits fire their triggers#8683#8682
  • Advancements: looking_at sees every entity, in every trigger#8687#8686
  • Shader packs: currentRenderedItemId per draw, and the hand per held item#8042
  • Preserve authored shader uniform initial values (proposed independent replacement)#8474#7811
  • Bind terrain resource-pack material maps (proposed independent replacement)#8510#7747
  • Shader packs: smooth() fade times count tenths of a second, as in Iris#8974#8492
  • Shader packs: read shaders.properties with the feature macros, as Iris does#8975#8493
  • Shader packs: expand macros in custom uniform and variable lines#8993#8976
  • Shader packs: atomic functions on a component of a buffer block's vector#8994#8977
  • Shader packs: min3, max3 and mid3 of GL_AMD_shader_trinary_minmax#9002#8460
  • Shader packs: match iris.features names in any case, as Iris does#9014#8996
  • Shader packs: a custom uniform naming what Iris can't see reads 0 whole#9015#8995
  • Shader packs: without gbuffers_clouds, draw the clouds with gbuffers_textured, else gbuffers_basic#9019#9011
  • Shader packs: light Nether faces at the Nether's up-face 0.9, as Iris does#9020#9012
  • Shader packs: a forced flip of a buffer the program writes cancels its flip#9022#9010
  • Shader packs: a Clear = false buffer starts each frame from its last write#9023#9009
  • Packs: a decimal pack format reads as its whole part#9047#9042
  • Shader packs: a glow item frame and what it holds draw as glow_item_frame#9048#9043
  • Shader packs: End portal faces reach the shadow pass with their block entity#9049#9044
  • Shader packs: read shadowtex0/1 linearly through a plain sampler, as Iris does#8999
  • Shader packs: a const local may be a texel offset#9005#8462
  • Shader packs: a pack with an integer colortex0 loads#9007#8459
  • Shader packs: read colortex formats only where Iris 1.11.7 does#9087#9063
  • Superflat worlds with structures place their features and lakes#8163
  • Superflat worlds without structures place their features and lakes too#8170#2912
  • Shader packs: a bool member of a std430 buffer translates#8182#8175
  • Buckets: the fluid ray passes through the hollow of a torch, fence or flower#8188#8180
  • A server sends its world packs' tags for every registry, not only dialogs#8218
  • Worker pool: release idle generators while the client keeps meshing#8520
  • Commands: /execute on owner no longer finds the guest in place when the owner is not in the world#8619#8488
  • A passenger freezes in powder snow, and the frostbite overlay shows it#8167
  • A boat in powder snow is slowed and throws snowflakes#8171#8156
  • horizon-server: Prometheus metrics by dimension (loaded chunks and entities)#8194#8191
  • Implement live entity broadcast range management#8128#8124
  • Server API: pin lifecycle replies#8834#8816
  • Server API: pin backup replies#8844#8839

Launcher

Horizon launcher 0.2.40

  • Launcher: the Shop on the glass look, the new founder set, cosmetics on by default
  • Native mods: a mod's own data folders, read on each data load (AddServerReloadListenersEvent)
  • Launcher Shop: founder claim through Paddle's free checkout; purchase history

And 10 fixes.

Other changes

  • Launcher: the Shop on the glass look, the new founder set, cosmetics on by default#8620
  • Native mods: a mod's own data folders, read on each data load (AddServerReloadListenersEvent)#8438#8400
  • Launcher Shop: founder claim through Paddle's free checkout; purchase history#9235#9234
  • launcher: the Mods page's card stays in view, Sort by sits beside the search#9099
  • launcher: Sculk banner on every page without its border, GitHub mark on Sponsor#9095
  • launcher: Home drops the Resources rows, keeps the invite code beside Play, edition tabs switch#9091
  • launcher: the top bar's avatar shows the signed-in player's face#9096
  • launcher: Modrinth back on the Mods page, five tabs and a source switch#9094
  • launcher: menus in the cards' glass, the website's motion, a whiter light look#9098
  • launcher: gaps between Versions and Patch notes cards, pages clear the top bar#9092
  • launcher: Settings' list follows the scroll, each last section in turn#9093
  • launcher: our own grass block for Vanilla, the real Horizon icon for Horizon#9097
  • fix(port-pack): reject empty and failed harness verdicts#8636#8626

Launcher

Horizon launcher 0.2.39

  • Splitscreen: use the launcher's other Microsoft accounts

And 6 fixes.

Other changes

  • Splitscreen: use the launcher's other Microsoft accounts#7769#7760
  • Add Беларуская (be_by) game translation#8425
  • Add Cymraeg (cy_gb) game translation#8450
  • Add Frysk (fy_nl) game translation#8496
  • Add Latina (la_la) game translation#8579
  • Add Føroyskt (fo_fo) game translation#8610
  • Add Vèneto (vec_it) game translation#8802

Launcher

Horizon launcher 0.2.38

  • A new look everywhere. Home now has tabs for your instance (Overview, Worlds, Multiplayer, Packs, Screenshots,
  • Make it yours. Pick an accent colour from the swatches or type any colour; the glass and the sky take it on.
  • Settings' Account card shows who you're signed in as, in one place.
  • A light look, next to the dark one, in Settings › Appearance.
  • Mods page in the new design, with each kind of content in its own tab.
  • Command palette: press Ctrl+K (⌘K on macOS) to jump to any page or action.
  • Notifications confirm what you just did (opened, copied, created, saved, deleted).
  • New instance lists every Nightly, not only the ones you have: pick one and Create installs it.
  • Edit an instance to switch it between Horizon, Fabric and Vanilla, or to another Minecraft version or loader.
  • Multiplayer tab: each server shows whether it's online and how many players are on it.
  • Screenshots can be blurred on Home, for when you share your screen.
  • Windows: a real installer. horizon-launcher-setup.exe installs the launcher for your user, with a Start menu
  • For mod makers: native mods get config files that reload (ModConfigEvent), clearer build logs you can copy,

And 8 fixes.

Other changes

  • A new look everywhere. Home now has tabs for your instance (Overview, Worlds, Multiplayer, Packs, Screenshots,
  • Make it yours. Pick an accent colour from the swatches or type any colour; the glass and the sky take it on.
  • Settings' Account card shows who you're signed in as, in one place.
  • A light look, next to the dark one, in Settings › Appearance.
  • Mods page in the new design, with each kind of content in its own tab.
  • Command palette: press Ctrl+K (⌘K on macOS) to jump to any page or action.
  • Notifications confirm what you just did (opened, copied, created, saved, deleted).
  • New instance lists every Nightly, not only the ones you have: pick one and Create installs it.
  • Edit an instance to switch it between Horizon, Fabric and Vanilla, or to another Minecraft version or loader.
  • Multiplayer tab: each server shows whether it's online and how many players are on it.
  • Screenshots can be blurred on Home, for when you share your screen.
  • Windows: a real installer. horizon-launcher-setup.exe installs the launcher for your user, with a Start menu
  • For mod makers: native mods get config files that reload (ModConfigEvent), clearer build logs you can copy,
  • Settings that fail to save now tell you and offer to retry.
  • The Mods page's Sort by menu works again.
  • Copying, renaming or deleting a world no longer gets stuck on its lock.
  • Games started from the launcher no longer pick up the launcher's own graphics workarounds.
  • Natively built mods start correctly again.
  • Modpack imports: progress counts the pack's extra files, and more modpacks port cleanly.
  • Proxies: NO_PROXY with IPv6 addresses and hosts starting with "127." work as expected.
  • Translations: the launcher now speaks 34 languages. New: Arabic, Bulgarian, Croatian, Czech, Danish, Dutch, Finnish,

Launcher

Horizon launcher 0.2.37

5 fixes.

Other changes

  • Native mod builds: no space in the Windows build folder#6818
  • Recipes: the loot data and the server's sync share one read of the recipe folder#6745
  • Native builds: a dev profile for mod developers#6760
  • MCP: serve the stateless 2026-07-28 revision from one implementation#6587#5673
  • Launcher: import a game build you already have as its own version#6700

Launcher

Horizon launcher 0.2.36

  • Native mods: export a headless engine for dedicated servers

And 12 fixes.

Other changes

  • Native mods: export a headless engine for dedicated servers#6462
  • Play with friends: the host attaches from any port when its direct port times out#6363#6342
  • Launcher: Fix the version picker overflow and the low contrast text/buttons on several tabs#6389
  • Connection cipher: hardware AES, CFB8 decryption many bytes at once#6437
  • Launcher: a failed instances.json save is printed#6483
  • Launcher: settings.json is replaced, not truncated#6478
  • Launcher: a failed account save is printed instead of dropped#6475
  • feat(launcher): localize native mod build steps, categories, world mode, and server errors#6501
  • A file-declared item may name a code-declared item as its crafting remainder#6442#6400
  • Typed native mod API: generated Hooks and Host, injections, attachments, dependencies, renderer#6216#5638
  • refactor(launcher): decouple memory slider save state from pre-translated strings#6506
  • Fix microphone purpose metadata for native mods on macOS#6600#6598
  • Keep native build logs fresh through the complete attempt#6637

Launcher

Horizon launcher 0.2.35

  • feat(mods): a content block's random_ticks property
  • Native mods: blocks and items declared in code, DeferredRegister

And 8 fixes.

Other changes

  • feat(mods): a content block's random_ticks property#6167#6138
  • Native mods: blocks and items declared in code, DeferredRegister#6359
  • Windows: benchmark reports and telemetry name the CPU by its brand#6054#6032
  • fix(launcher): point NixOS at its shell for native mod builds#6062#5248
  • Telemetry: the Windows version comes from the registry, not cmd /C ver#6101#6074
  • feat(launcher): localize Servers tabs, action buttons, and layout fixes#6115#6088
  • Launcher: release lists past GitHub's rate limit (disk cache, Kira mirror)#6141
  • Native mods: build in a real ASCII folder, not a short name#6009#6155
  • Linux on ARM: name the CPU from its implementer and part#6168#6073
  • horizon-friends: the deadline test reads after the limit, so it ends on Windows#6230#6183

Game

Nightly 2026-11-01 · c9d474d

  • feat(mods): computed world field-of-view hook
  • Native mods: draw a mob with the mod's own model (native_mob_submit)
  • OptiFine entity models: packs' .jem files reshape mobs
  • Data packs and content mods: remove and replace recipes by filter
  • feat(mods): native mods can open custom menus
  • feat(mods): detached camera distance hook
  • feat(mods): computed world fog color hook
  • feat(mods): raw mouse button pre/post hooks
  • Native mods: a player respawning
  • --player-dir: one player's own files when several games share a game folder
  • Far terrain on servers (3/3): Horizon clients get their LOD from the server
  • feat(mods): native mods can raycast across the distant terrain and own an item's use
  • feat(mods): final world fog parameters hook
  • feat(mods): screen key release pre hook
  • OptiFine entity models: custom models animate
  • Native mods: music a client mod chooses and layers (native_music, native_music_layers)
  • Graphics: add configurable leaf culling modes
  • OptiFine random entities: mobs wear their pack's texture variants
  • Native mods: send a server's recipes to its Horizon clients
  • feat(mods): complete window keyboard input hook
  • feat(mods): two-axis gameplay mouse scrolling hook
  • feat(mods): screen mouse drag pre hook
  • feat(mods): hear a mod container's viewers change

And 49 fixes.

Other changes

  • feat(mods): computed world field-of-view hook#5976#5969
  • Native mods: draw a mob with the mod's own model (native_mob_submit)#5895#5861
  • OptiFine entity models: packs' .jem files reshape mobs#5659
  • Data packs and content mods: remove and replace recipes by filter#5910#5583
  • feat(mods): native mods can open custom menus#5741#5740
  • feat(mods): detached camera distance hook#5992#5978
  • feat(mods): computed world fog color hook#6000#5996
  • feat(mods): raw mouse button pre/post hooks#6010#6007
  • Native mods: a player respawning#5816#5820
  • --player-dir: one player's own files when several games share a game folder#4952#5513
  • Far terrain on servers (3/3): Horizon clients get their LOD from the server#4947
  • feat(mods): native mods can raycast across the distant terrain and own an item's use#5731#5730
  • feat(mods): final world fog parameters hook#6003#6002
  • feat(mods): screen key release pre hook#6014#6011
  • OptiFine entity models: custom models animate#5665
  • Native mods: music a client mod chooses and layers (native_music, native_music_layers)#5898#5863
  • Graphics: add configurable leaf culling modes#5926#5924
  • OptiFine random entities: mobs wear their pack's texture variants#5744
  • Native mods: send a server's recipes to its Horizon clients#5949#5929
  • feat(mods): complete window keyboard input hook#6023#6022
  • feat(mods): two-axis gameplay mouse scrolling hook#6027#6025
  • feat(mods): screen mouse drag pre hook#6019#6017
  • feat(mods): hear a mod container's viewers change#6049#6047
  • Shader packs: gl_FogFragCoord travels from the vertex stage to the fragment stage#5964#5960
  • Shader packs: isRightHanded, is_on_ground and the dimension's uniforms#5966#5965
  • Fix scalar vector constants in compute dispatch metadata#5968#5956
  • Keep declared shader defaults selectable#5974#5961
  • Expand pack options in custom image dimensions#5980#5962
  • Accept one trailing custom-expression terminator#5986#5963
  • Swing the hand when a painting is placed#5958#5912
  • Thrown potions hit players, and their thrower after leaving them#5972#5876
  • Reset boat paddles after dismounting mid-stroke#5973#5947
  • Management protocol: read and set live difficulty#5982
  • Tridents, rockets and fishing hooks press plates and trip tripwires#5914#5896
  • Evokers and illusioners show hand particles while casting#5945#5886
  • Translucent batching (1/3): translucent terrain in an arena of its own, off by default#5984
  • terrain: sample distant tiles at an explicit mip so anisotropic filtering stops streaking#5778#5179
  • Draw the ender dragon in every dimension, not only the End#5789#5745
  • Native mods: screen_render_post skips the screen the server pack prompt hides#5854
  • Primed TNT keeps its Passengers#5883
  • Hoglins and other wide mobs suffocate in walls#5944#5872
  • Preserve wind charge momentum across queued player movement#5868#5828
  • Extras: hide block-break particles#5888#5698
  • Boats can't be placed from underwater#5993#5967
  • /datapack enable and disable reload the server's data, as /reload does#6012#5995
  • Draw opaque terrain through a shader that never discards#6005
  • Shader API: the material stage reads its own block texture#5894#5893
  • Move players with opening shulker box lids#5997#5943
  • Shader packs: cloudHeight and isElytraFlying uniforms#3172#5693
  • Shader packs: four more translation fixes (sampler names, const parameters, arrays of arrays)#5701#5699
  • Shader packs: a pack's vignette=false hides the game's vignette#5723#5722
  • Allow spawn eggs to target source fluids#5942#5870
  • Chat: a new line slides in and fades in (Smooth chat extra)#5892
  • Explosions push projectiles#5941#5908
  • Frog: a magma cube it eats is drawn in and vanishes, as vanilla#5913
  • A dropped item rests on a boat, a minecart, a shulker or a held-still happy ghast#5937
  • Do not play hand animation when block interaction returns Consume (#5…#5#6031#5989
  • Sculk sensors hear tridents, potions and fishing hooks land#6051#6050
  • Mobs follow each block's landing rule#6057#6056
  • Run Frost Walker location effects for armor stands#5932#5838
  • Keep Creative item tooltips visible between slots#6026#5959
  • Renderer: finish and submit frames on a submit thread (+32% FPS in CPU-bound views)#5779#5777
  • Add the Social Interactions screen (hide players' chat)#6043
  • Eject passengers from submerged boats#6029#5971
  • Dedicated server: a panic in the tick still saves the world#5952#5788
  • Anticheat prediction: a sprint the server stopped after a hit is the client's, not a walk#6037#5948
  • fix(mobs): match vanilla baby piglin equipment and gold pickups#5918#5867
  • Saves: upgrade older chunk, entity and POI records as they are read#6060#5230
  • Horizon strings: the shader options and split profiles speak every bundled language#5771
  • Shader API: set_surface and surface_at, per-pixel data for the post stage#5900#5899
  • TNT minecarts explode when they run into other carts#6064#6013
  • Lightning hits boats, minecarts and orbs, by box#6053#6052

Launcher

Horizon launcher 0.2.34

  • Launcher: a Maximum memory row on Home (no limit by default)

And 6 fixes.

Other changes

  • Launcher: a Maximum memory row on Home (no limit by default)#5801#5798
  • mcp: answer initialize with a supported protocol version#5673#5877
  • Launcher: list native builds on the Versions page, with Remove#5595#5783
  • Launcher: persist Microsoft sign-ins when no keychain is available#5598#5095
  • Fix launcher checks for same-bundle native crate dependencies#5756#5724
  • Refresh Home Mods after native files change during a pending read#5925#5907
  • Fix typos and mistranslations in tr.json#5717

Launcher

Horizon launcher 0.2.33

  • Launcher: account status, profile heads, refresh, and targeted sign-in
  • feat(mods): mod menu types with their own slot count and data slots
  • Shader API: [[textures]], PNGs every stage of a pack reads

And 6 fixes.

Other changes

  • Launcher: account status, profile heads, refresh, and targeted sign-in#4250
  • feat(mods): mod menu types with their own slot count and data slots#5713
  • Shader API: [[textures]], PNGs every stage of a pack reads#5681#5680
  • horizon-prepare: fresh preparation about 2.5× faster (~40 s instead of ~105 s on 3 cores) with a lower memory peak#5570
  • Launcher: point the GitHub-install message at the Mods page's Build#5689
  • Keep macOS app bundles alive during launcher updates#5484#5427
  • Launcher: GPUI Fast instead of GPUI#5413
  • Fix native mod lists and Build visibility in the launcher#5714#5690
  • Launcher: give each memory store its own account lock (Windows test flakes)#5882

Launcher

Horizon launcher 0.2.32

  • Native mods: own crates, Horizon's lock as their allow list, data files, named hooks, post-build steps
  • Live count: exact numbers, a history of it, and the launcher's count links to playhorizon.dev/stats
  • i18n(launcher): add Brazilian Portuguese (pt-BR) translation
  • Official SMP player count in the launcher, and its history on the telemetry server
  • Add shell completions for the launcher CLI
  • Official server: play.playhorizon.dev from links.json; launcher and game move old entries, count follows SRV
  • Launcher: a Linux AppImage that updates in place
  • Allow native mods to register item component types
  • Launcher: play one launch as another signed-in account
  • feat(mods): content mods declare their own thrown entity types

And 27 fixes.

Other changes

  • Native mods: own crates, Horizon's lock as their allow list, data files, named hooks, post-build steps#3964
  • Live count: exact numbers, a history of it, and the launcher's count links to playhorizon.dev/stats#5217
  • i18n(launcher): add Brazilian Portuguese (pt-BR) translation#4834
  • Official SMP player count in the launcher, and its history on the telemetry server#5235
  • Add shell completions for the launcher CLI#5072#5047
  • Official server: play.playhorizon.dev from links.json; launcher and game move old entries, count follows SRV#5285
  • Launcher: a Linux AppImage that updates in place#3670#2110
  • Allow native mods to register item component types#5426#4806
  • Launcher: play one launch as another signed-in account#4952#5584
  • feat(mods): content mods declare their own thrown entity types#5564
  • Resource packs: a home folder behind a link takes its packs#5198
  • fix(port-pack): gate unix symlink tests with #[cfg(unix)]#5224#5213
  • Launcher: copy ATLauncher instances into Java instances#3938#3937
  • Update zip to 9.1.3#3832
  • Discord: the new official invite discord.gg/playhorizon#5239
  • Launcher: keep each account's secrets in one macOS keychain item#4933#4912
  • Native mods: build under a path MinGW-w64 can read#5189#5202
  • horizon-prepare: --complete and --progress json#3545#3574
  • horizon-prepare: name the game files one by one#3545#3580
  • Launcher on Windows: update without the self-deleting copy Defender flags as Wacatac#3192#3175
  • launcher: let players hide the partner banner on the Servers page too#3502
  • Content mods: creative inventory tabs, paged as NeoForge pages them#5066#4331
  • Add Japanese translation (ja)#5035
  • Launcher: an accent is any hue, not one of seven#4176
  • fix(launcher): localize proxy, game arguments, release headers, and sponsor section#5226
  • Add turkish language support#5067
  • Content mods: a block declares its own state properties#5306
  • Launcher: the 17 strings ja, pt-br and tr lack (main's launcher check)#5397
  • fix(port-pack): read legacy Forge mcmod.info identity#5266#5240
  • feat(launcher): localize Instances modal, Export, Launch, Shortcut, and Home tabs#4839#4829
  • Launcher: a native build of the mods turned on reads as up to date#5471
  • Launcher: a native rebuild starts without the old build's mod data#5473
  • Launcher: a mod installed from GitHub keeps its crates' data and README files#5478
  • Content mods: connecting blocks (cables, pipes) joined by a tag#5468#5464
  • Launcher: the Settings and Home strings that never reached tr()#4178
  • Launcher: native mods needing newer hook points build on the installed game#5648#5352
  • Repair incomplete title panorama assets#4319

Launcher

Horizon launcher 0.2.31

  • feat(mods): block items patch their template item's data components
  • feat(mods): content items declare a crafting remainder
  • feat(mods): content mods declare their own mob effects
  • macOS on Intel: x86_64 game and launcher builds, picked per processor
  • Launcher: native rebuilds stay on the instance's Horizon, in its instance, fast
  • Lithostitched: limited and guaranteed elements, pool and processor modifiers
  • Launcher: show where native mods are installed and what each instance's build plays

And 17 fixes.

Horizon on Intel Macs

  • macOS on Intel: x86_64 game and launcher builds, picked per processor#1171#1161

Modpacks' world generation, natively

  • Lithostitched: limited and guaranteed elements, pool and processor modifiers#1777

Other changes

  • feat(mods): block items patch their template item's data components#4921
  • feat(mods): content items declare a crafting remainder#4925
  • feat(mods): content mods declare their own mob effects#4840
  • Launcher: native rebuilds stay on the instance's Horizon, in its instance, fast#3870
  • Launcher: show where native mods are installed and what each instance's build plays#3891
  • Check Minecraft accounts for new launcher servers by default#4175#4174
  • Launcher: the language row is a dropdown, not a segment per language#4148
  • fix(launcher): constrain telemetry notice width in settings to prevent overflow#4769
  • fix(launcher): shorten Spanish sponsor discount label to prevent chip overflow#4762
  • Launcher: native builds open no console window on Windows#4841
  • Launcher: keep native mods' commit dates so a kept build works offline#4885#4713
  • add more german translations#4123
  • Launcher: fix lang/de.json breaking the launcher job on main#4924
  • Launcher: say what a Linux native build lacks before it starts#4836
  • Launcher: hide the Mods page's sources and tabs that aren't usable yet#4478#4477
  • Port pack: armour of a mod's own material draws its own textures#3744
  • Port pack: item models only an item's overrides use are not items#3745
  • feat(launcher): localize Mods browser, filters, and GitHub mods panel#4814#4812
  • Import resource packs with modpacks#4579
  • feat(launcher): localize AI agent and Data collection settings sections#4800#4798
  • feat(launcher): localize Modpacks tab and port coverage report#4811#4802
  • feat(launcher): localize Servers dashboard, overview, and Tailscale panel#4822#4815

Launcher

Horizon launcher 0.2.30

  • Launcher: mod icons and a revalidating image cache (redesign R8a)
  • Launcher: instance icons, pictures and loader marks (redesign R8b)
  • Launcher: Sign in with Microsoft and loader logos (redesign R8c)

And 5 fixes.

Other changes

  • Launcher: mod icons and a revalidating image cache (redesign R8a)#4520
  • Launcher: instance icons, pictures and loader marks (redesign R8b)#4552
  • Launcher: Sign in with Microsoft and loader logos (redesign R8c)#4563
  • Port pack: items of vanilla tool and armour classes keep their stats#3742
  • Show your own skin: offline skins from the launcher, the host's skin …#3724
  • Launcher: the version and account menus close on a click outside them#3811#3216
  • Launcher: moving a world to the trash no longer closes it on Windows#3927#3784
  • horizon-prepare: OUTPUT_VERSION 3#4052#4526

Launcher

Horizon launcher 0.2.29

  • Launcher: the night frame, a sidebar plate and a top bar of tabs (redesign R3, draft)
  • Launcher: Home's hero in the night look (R4)
  • Launcher: Play's steps while it gets ready (R4b)
  • Launcher: the sign-in sheet in the night look (R5)
  • Launcher: New instance with Horizon, Vanilla and Modded kinds (R6)
  • Launcher: the instance's tabs under Home's hero (redesign R7a)
  • Launcher: the instance's Mods tab (redesign R7b)
  • Launcher: remove several versions at once
  • Launcher: build native mods made for different Horizon versions, after "Build anyway"
  • Launcher: install a native mod from a GitHub link (CLI)
  • Mods page: Add from GitHub, origin line and Check for updates

And 5 fixes.

Other changes

  • Launcher: the night frame, a sidebar plate and a top bar of tabs (redesign R3, draft)#4032
  • Launcher: Home's hero in the night look (R4)#4382
  • Launcher: Play's steps while it gets ready (R4b)#4391
  • Launcher: the sign-in sheet in the night look (R5)#4392
  • Launcher: New instance with Horizon, Vanilla and Modded kinds (R6)#4399
  • Launcher: the instance's tabs under Home's hero (redesign R7a)#4459
  • Launcher: the instance's Mods tab (redesign R7b)#4490
  • Launcher: remove several versions at once#3720#3719
  • Launcher: build native mods made for different Horizon versions, after "Build anyway"#4401
  • Launcher: install a native mod from a GitHub link (CLI)#4573
  • Mods page: Add from GitHub, origin line and Check for updates#4580
  • Telemetry: a user named "user" keeps the <user> label whole#3892
  • Launcher: say when Windows Credential Manager is full (error 8), and keep the old sign-in when a save stops partway#4387
  • Fix account chip text overflow#4077#3977
  • Content mods: allow a block default state override#3846
  • Content mods: set per-state outline and collision shapes#3877

Launcher

Horizon launcher 0.2.28

  • Launcher: night tokens and Bricolage Grotesque (redesign R1, draft)
  • Launcher: the animated night sky behind every page (redesign R2, draft)

And 11 fixes.

A new launcher design

  • Launcher: night tokens and Bricolage Grotesque (redesign R1, draft)#3635
  • Launcher: the animated night sky behind every page (redesign R2, draft)#3637

Modpacks' world generation, natively

  • port-pack: upgrade-datapack, a 26.2 data pack's registries in 26.3's formats#3369

Mods

  • Update launcher mixins for public modules and validated macros#3360

Other changes

  • port-pack: upgrade-datapack rewrites density functions#3370
  • port-pack: upgrade-datapack rewrites noise settings, dimensions and presets#3372
  • port-pack: upgrade-datapack rewrites features and placements#3373
  • upgrade-datapack: docs, and checks against vanilla 26.2 and 26.3#3374
  • Launcher: fetch the assets a stopped download left out, and stop waiting on quiet connections#3106
  • Add Polish translations#3572
  • Allow data files in native mod bundles#3880
  • Remove dead ctov modular_compat code in horizon-port-pack#3930
  • Launcher: a Java instance's Home shows its own game, not Horizon's versions#4049

Launcher

Horizon launcher 0.2.27

  • Launcher: a server's Join starts a Java instance into it
  • Launcher Multiplayer: Horizon Official, the official survival server, on top of the list once

And 9 fixes.

Other changes

  • Launcher: a server's Join starts a Java instance into it#3725
  • Launcher Multiplayer: Horizon Official, the official survival server, on top of the list once#3759
  • port-pack: keep pack-index file names and jar entries inside the output#2823
  • Launcher: keep Microsoft sign-ins on Linux desktops that set GTK_USE_PORTAL, and say when the keychain doesn't#3769
  • Content mods: items patch their template's data components#3739
  • Launcher: every text field uses the shared LineEdit#3731
  • Launcher: a Nightly row in Versions reads as its commit#3701#3700
  • Launcher: Ukrainian#3625
  • Launcher: Language::ALL holds six languages (main doesn't build)#3817
  • horizon-prepare: OUTPUT_VERSION 2 (the command registries now export selected_entities)#3820
  • launcher: Simplified Chinese#2795

Good first tasks

Each one is a small difference from vanilla, with an issue that says how to see it. Found one you like? Copy its /claim command and send it on Discord, so nobody starts the same work.

Each links its issue; the technical text says where in the code and in vanilla to start. /claim on Discord marks it as yours, /unclaim frees it.

  1. 01Benchmark your computerRun Horizon's built-in benchmark and share the report: every new computer makes the performance work more accurate. No coding needed.horizon-launcher play --arg=--benchmark --arg=standard writes a JSON report; horizon-launcher data benchmark <report> shows what would be sent and uploads it (playhorizon.dev/docs/performance). Results from three installs with the same hardware appear on the Benchmarks page. Example: #1711.

Ways to help

Take a task

Pick a good first task or an open issue. On Discord, /claim 1234 tells everyone you are on issue 1234, so nobody starts the same work; /unclaim frees it.

Open issues(opens in a new tab)

Bring your AI agent

On Discord, /agent connect gives your coding agent a personal token for Kira's MCP server: it reads the work board, claims tasks and posts its progress in your name.

Join the Discord(opens in a new tab)

Benchmark your computer

Run the built-in benchmark and share the report: every new machine makes the performance work more accurate. No coding needed.

How to

Report a bug

One bug per report: something that breaks, or doesn't play like vanilla. Fill this in and it opens as a ready issue on GitHub for you to check and send, with the steps in the order the maintainers need them.

Search the open bugs first

Issues are public, so leave out passwords and personal details. A screenshot or your log file helps: add it once the issue is open (where the log is). No GitHub account? Copy it for Discord and post it in #horizon-bugs, where Kira turns it into an issue.

The rules

  1. Vanilla is the specification. Wherever Minecraft 26.3 has the feature, Horizon does exactly what it does: read vanilla's code, then match it.
  2. Small pull requests, proven. One change each, under about 500 lines, with the block python3 tools/pr_ready.py prints: formatting, Clippy, tests and the harnesses your change can affect.
  3. Say who wrote it. If an AI agent wrote or posts it, the pull request says so, and commits keep its co-author line.
  4. Never commit Mojang's files. No game jars, assets, decompiled code or prepared resources, and nothing taken from other mods' code.

The contributing guideHow Horizon is builtCONTRIBUTING.md(opens in a new tab)

Contributors

Everyone with commits in Horizon. On Discord, /link-github <your login> credit:True adds your Discord name next to yours.

Who runs Horizon

The roles on Horizon's Discord server, from the top down, updated from Discord every few minutes. A GitHub account shows when it is confirmed: run /link-github <your login> credit:True on Discord to add yours.

  1. 👑 Founder

    Started Horizon. A title only: on the council, his vote counts like everyone else's.

  2. 🏛️ Council

    Equals who decide by public 24-hour polls: rules, members, money and the project's direction.

  3. 🌌 Horizon Team

    Maintainers and core contributors: they review and merge pull requests, and moderate too.

    Nobody right now.

  4. 🛡️ Chief of Mods

    Leads the moderators and can ban: the first person to reach for moderation questions.

  5. 🛡️ Mods

    Keep the Discord server friendly: they time out members and delete messages. Bans go through the council and the Chief of Mods.

    • ! azetechDiscord: azetechofficial
    • DimanioDiscord: dimanio
    • FryedCheeseDiscord: fryedcheeseGitHub: Web-mc1
    • ツ Marco ツDiscord: marcowazhere_
  6. 🤝 Support

    Help players in #horizon-support and mark their posts solved.

    Nobody yet.