mirror of
https://github.com/horizon-rust/horizon.git
synced 2026-11-07 02:56:17 -10:00
Mojang's approval covers Microsoft sign-in only; other account providers (Ely.by, Yggdrasil servers) are against the rules Horizon plays by, so the item can't ship. #1270 stays closed. Co-Authored-By: Claude Opus 5.5 <[email protected]>
1403 lines
66 KiB
JSON
1403 lines
66 KiB
JSON
{
|
|
"format": "horizon-roadmap",
|
|
"version": 1,
|
|
"source": "roadmap/roadmap.toml",
|
|
"overview": {
|
|
"today_plain": "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.",
|
|
"today_dev": "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.",
|
|
"help_plain": "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.",
|
|
"help_dev": "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."
|
|
},
|
|
"statuses": [
|
|
{
|
|
"id": "now",
|
|
"name": "Now"
|
|
},
|
|
{
|
|
"id": "next",
|
|
"name": "Next"
|
|
},
|
|
{
|
|
"id": "later",
|
|
"name": "Later"
|
|
},
|
|
{
|
|
"id": "help-wanted",
|
|
"name": "Help wanted"
|
|
},
|
|
{
|
|
"id": "shipped",
|
|
"name": "Recently shipped"
|
|
}
|
|
],
|
|
"areas": [
|
|
{
|
|
"id": "performance",
|
|
"name": "Performance"
|
|
},
|
|
{
|
|
"id": "modpacks",
|
|
"name": "Modpacks"
|
|
},
|
|
{
|
|
"id": "servers",
|
|
"name": "Servers and multiplayer"
|
|
},
|
|
{
|
|
"id": "mods",
|
|
"name": "Mods and API"
|
|
},
|
|
{
|
|
"id": "gameplay",
|
|
"name": "Gameplay parity"
|
|
},
|
|
{
|
|
"id": "rendering",
|
|
"name": "Rendering"
|
|
},
|
|
{
|
|
"id": "launcher",
|
|
"name": "Launcher"
|
|
},
|
|
{
|
|
"id": "platforms",
|
|
"name": "Platforms"
|
|
},
|
|
{
|
|
"id": "extras",
|
|
"name": "Horizon extras"
|
|
},
|
|
{
|
|
"id": "ai",
|
|
"name": "AI and agents"
|
|
},
|
|
{
|
|
"id": "community",
|
|
"name": "Community"
|
|
},
|
|
{
|
|
"id": "project",
|
|
"name": "Code and tools"
|
|
}
|
|
],
|
|
"items": [
|
|
{
|
|
"id": "smooth-frames",
|
|
"title": "Steady frames at long render distances",
|
|
"status": "now",
|
|
"area": "performance",
|
|
"plain": "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.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"#3827",
|
|
"#3815",
|
|
"#3466",
|
|
"#3036",
|
|
"#1760",
|
|
"#678",
|
|
"#718",
|
|
"#717",
|
|
"docs/benchmark.md"
|
|
],
|
|
"focus": true,
|
|
"owner": "ludovic111",
|
|
"issue": "#3909"
|
|
},
|
|
{
|
|
"id": "modpack-worldgen",
|
|
"title": "Modpacks' world generation, natively",
|
|
"status": "now",
|
|
"area": "modpacks",
|
|
"plain": "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.",
|
|
"dev": "`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).",
|
|
"links": [
|
|
"#3369",
|
|
"#3480",
|
|
"#3488",
|
|
"#3491",
|
|
"#3802",
|
|
"#3366",
|
|
"#1777",
|
|
"docs/modpacks.md"
|
|
],
|
|
"focus": true,
|
|
"ongoing": true,
|
|
"announce": true,
|
|
"owner": "ThatCakeIsAPie",
|
|
"issue": "#3913"
|
|
},
|
|
{
|
|
"id": "server-thread",
|
|
"title": "Single player as a server: the last differences",
|
|
"status": "now",
|
|
"area": "gameplay",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#1514",
|
|
"#3873",
|
|
"#3841",
|
|
"#3621",
|
|
"docs/server-levels.md"
|
|
],
|
|
"focus": true,
|
|
"ongoing": true,
|
|
"owner": "ludovic111",
|
|
"issue": "#3914"
|
|
},
|
|
{
|
|
"id": "java-instances",
|
|
"title": "Minecraft Java instances in the launcher",
|
|
"status": "now",
|
|
"area": "launcher",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#3395",
|
|
"#3406",
|
|
"#3419",
|
|
"#3506"
|
|
],
|
|
"ongoing": true,
|
|
"owner": "ludovic111",
|
|
"issue": "#3915"
|
|
},
|
|
{
|
|
"id": "lean-code",
|
|
"title": "A leaner codebase that builds faster",
|
|
"status": "now",
|
|
"area": "project",
|
|
"plain": "Cleaning up Horizon's code: removing what nothing uses and making it quicker to build, so fixes and new features land faster.",
|
|
"dev": "A review of the whole tree: dead code and stubs removed (#1432, #1658), one probe binary per crate (#1453, #1454), shared harness helpers (#1448), clippy clean on the whole tree (#1707). docs/architecture.md maps each feature to its files and harnesses.",
|
|
"links": [
|
|
"#1432",
|
|
"#1658",
|
|
"#1453",
|
|
"#1454",
|
|
"#1448",
|
|
"#1707",
|
|
"docs/architecture.md"
|
|
],
|
|
"ongoing": true,
|
|
"owner": "ludovic111",
|
|
"issue": "#3916"
|
|
},
|
|
{
|
|
"id": "port-ledger",
|
|
"title": "Vanilla parity: the player-visible gaps, closed",
|
|
"status": "now",
|
|
"area": "project",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#3512",
|
|
"#3513",
|
|
"#3514",
|
|
"#3515",
|
|
"#3516",
|
|
"#3517",
|
|
"#3518",
|
|
"#3519",
|
|
"#3520",
|
|
"#3521",
|
|
"#3526",
|
|
"#3139",
|
|
"tools/port_ledger.py"
|
|
],
|
|
"focus": true,
|
|
"ongoing": true,
|
|
"owner": "kacpherek",
|
|
"issue": "#3912"
|
|
},
|
|
{
|
|
"id": "mods",
|
|
"title": "Mods",
|
|
"status": "now",
|
|
"area": "mods",
|
|
"plain": "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.",
|
|
"dev": "One item for all modding work (#3911), led by levzzz5154 with vladislav_hagen; 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.",
|
|
"links": [
|
|
"#3855",
|
|
"#3351",
|
|
"#3353",
|
|
"#3360",
|
|
"#3706",
|
|
"#3878",
|
|
"#3345",
|
|
"#3346",
|
|
"#3388",
|
|
"#3434",
|
|
"#3435",
|
|
"#1634",
|
|
"#1642",
|
|
"#1659",
|
|
"#1596",
|
|
"#1635",
|
|
"docs/native-mods.md"
|
|
],
|
|
"focus": true,
|
|
"ongoing": true,
|
|
"owner": "levzzz5154",
|
|
"issue": "#3911"
|
|
},
|
|
{
|
|
"id": "server-tick",
|
|
"title": "Servers that hold 20 TPS with 50 to 100 players",
|
|
"status": "now",
|
|
"area": "performance",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#3847",
|
|
"#2608",
|
|
"docs/server.md"
|
|
],
|
|
"ongoing": true,
|
|
"owner": "ludovic111",
|
|
"issue": "#3910"
|
|
},
|
|
{
|
|
"id": "end-city-loot",
|
|
"title": "Enchanted loot in End cities",
|
|
"status": "shipped",
|
|
"area": "gameplay",
|
|
"plain": "Armour and tools in End city chests should come enchanted, as in vanilla.",
|
|
"dev": "`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).",
|
|
"links": [
|
|
"#1437",
|
|
"#1660",
|
|
"#1911",
|
|
"#2037"
|
|
],
|
|
"shipped_in": "v0.2.73"
|
|
},
|
|
{
|
|
"id": "end-city-banners",
|
|
"title": "End city banners keep their pattern",
|
|
"status": "shipped",
|
|
"area": "gameplay",
|
|
"plain": "Banners in End cities show as plain magenta instead of with their pattern.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"#1438",
|
|
"#526",
|
|
"#1928"
|
|
],
|
|
"shipped_in": "v0.2.67"
|
|
},
|
|
{
|
|
"id": "languages",
|
|
"title": "Play in your language",
|
|
"status": "shipped",
|
|
"area": "gameplay",
|
|
"plain": "Item names, container titles and server messages follow the language you pick, as in vanilla. Today parts of the game stay in English.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#1806",
|
|
"#1594",
|
|
"#1672"
|
|
],
|
|
"shipped_in": "v0.2.65"
|
|
},
|
|
{
|
|
"id": "chicken-flap",
|
|
"title": "Chickens flap while they fall",
|
|
"status": "shipped",
|
|
"area": "gameplay",
|
|
"plain": "Chickens should flap their wings while they fall, not stand still in the air.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#1706",
|
|
"#1892"
|
|
],
|
|
"shipped_in": "v0.2.67"
|
|
},
|
|
{
|
|
"id": "text-field-keys",
|
|
"title": "Ctrl+Backspace and scroll bars in menus",
|
|
"status": "shipped",
|
|
"area": "gameplay",
|
|
"plain": "Ctrl+Backspace should delete a whole word in the creative search, and every list's scroll bar should be draggable.",
|
|
"dev": "`EditBox` deletes by word with Ctrl (#1764); the Game Rules and Statistics lists' scroll bars can't be dragged (#1782, after #978).",
|
|
"links": [
|
|
"#1764",
|
|
"#1782",
|
|
"#1884",
|
|
"#1931"
|
|
],
|
|
"shipped_in": "v0.2.67"
|
|
},
|
|
{
|
|
"id": "pointer-hand",
|
|
"title": "A pointing hand over buttons",
|
|
"status": "shipped",
|
|
"area": "gameplay",
|
|
"plain": "The mouse pointer should turn into a pointing hand over menu buttons, as in vanilla 26.3.",
|
|
"dev": "26.3's `AbstractWidget` asks for a cursor from `CursorTypes` when it is hovered; winit's `CursorIcon::Pointer` gives the same shape. Issue #1347.",
|
|
"links": [
|
|
"#1347",
|
|
"#1897"
|
|
],
|
|
"shipped_in": "v0.2.67"
|
|
},
|
|
{
|
|
"id": "chat-settings",
|
|
"title": "Chat settings and team prefixes",
|
|
"status": "shipped",
|
|
"area": "gameplay",
|
|
"plain": "The Hidden and Commands Only chat settings should hide chat, and team prefixes should appear before names in chat.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#1376",
|
|
"#1378",
|
|
"#1932",
|
|
"#1841"
|
|
],
|
|
"shipped_in": "v0.2.67"
|
|
},
|
|
{
|
|
"id": "item-cooldowns",
|
|
"title": "Cooldowns drawn on items",
|
|
"status": "shipped",
|
|
"area": "gameplay",
|
|
"plain": "After you throw an ender pearl, its slot should show the cooldown sweeping away, as in vanilla.",
|
|
"dev": "Vanilla draws `ItemCooldowns`' percent as a white overlay over the slot (`GuiGraphicsExtractor.itemDecorations` and `itemCooldown`) in the hotbar and in inventories. Issue #1763.",
|
|
"links": [
|
|
"#1763",
|
|
"#1933"
|
|
],
|
|
"shipped_in": "v0.2.67"
|
|
},
|
|
{
|
|
"id": "pregen",
|
|
"title": "Pre-generate an area with /pregen",
|
|
"status": "shipped",
|
|
"area": "servers",
|
|
"plain": "A /pregen command that builds an area of the world ahead of time, so players don't wait for new terrain when they explore.",
|
|
"dev": "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'.",
|
|
"links": [
|
|
"#1805"
|
|
],
|
|
"shipped_in": "v0.2.67"
|
|
},
|
|
{
|
|
"id": "native-shaders",
|
|
"title": "Horizon's own shader format and kit",
|
|
"status": "shipped",
|
|
"area": "rendering",
|
|
"plain": "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.",
|
|
"dev": "`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'.",
|
|
"links": [
|
|
"#1820",
|
|
"#1822",
|
|
"#1861",
|
|
"#1863",
|
|
"#1855",
|
|
"docs/shaders.md",
|
|
"docs/api/shaders.md"
|
|
],
|
|
"shipped_in": "v0.2.70"
|
|
},
|
|
{
|
|
"id": "discord-presence",
|
|
"title": "Discord Rich Presence",
|
|
"status": "shipped",
|
|
"area": "extras",
|
|
"plain": "Your Discord profile can show that you are playing Horizon, with a switch to turn it off.",
|
|
"dev": "A Discord IPC client on its own thread (#1787) and the presence with its setting (#1788). Merged: it ships with the next release.",
|
|
"links": [
|
|
"#1787",
|
|
"#1788"
|
|
],
|
|
"shipped_in": "v0.2.58",
|
|
"announce": true
|
|
},
|
|
{
|
|
"id": "server-dialogs",
|
|
"title": "Server dialogs and login screens",
|
|
"status": "shipped",
|
|
"area": "servers",
|
|
"plain": "Servers that show dialogs, such as the register and login screens of AuthMe, will work in Horizon.",
|
|
"dev": "26.3's dialog packets and model (#1720), the dialog screen with its buttons and actions (#1734), then text and boolean inputs (#1735).",
|
|
"links": [
|
|
"#1720",
|
|
"#1734",
|
|
"#1735"
|
|
],
|
|
"shipped_in": "v0.2.67"
|
|
},
|
|
{
|
|
"id": "microsoft-sign-in",
|
|
"title": "Microsoft sign-in",
|
|
"status": "shipped",
|
|
"area": "launcher",
|
|
"plain": "Sign in with your Microsoft account in the launcher to play on online-mode servers.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/microsoft-account.md",
|
|
"#2879"
|
|
],
|
|
"shipped_in": "[email protected]",
|
|
"announce": true
|
|
},
|
|
{
|
|
"id": "benchmarks",
|
|
"title": "Fresh benchmarks against vanilla",
|
|
"status": "next",
|
|
"area": "performance",
|
|
"plain": "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.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"#1073",
|
|
"#1346",
|
|
"#1749",
|
|
"docs/benchmark.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "world-entry",
|
|
"title": "Faster world creation and entry on small CPUs",
|
|
"status": "next",
|
|
"area": "performance",
|
|
"plain": "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.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"docs/benchmark.md",
|
|
"docs/profiling.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "low-end-mode",
|
|
"title": "Low-end computers: Steam Deck, old Macs, 8 GB",
|
|
"status": "next",
|
|
"area": "performance",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/benchmark.md",
|
|
"https://playhorizon.dev/docs/performance"
|
|
]
|
|
},
|
|
{
|
|
"id": "upscaling",
|
|
"title": "Native upscaling",
|
|
"status": "next",
|
|
"area": "performance",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#1403",
|
|
"#3762",
|
|
"#3763",
|
|
"#3764"
|
|
]
|
|
},
|
|
{
|
|
"id": "server-admin",
|
|
"title": "Server console, bans and a full admin API",
|
|
"status": "next",
|
|
"area": "servers",
|
|
"plain": "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.",
|
|
"dev": "`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.",
|
|
"links": [
|
|
"#9767",
|
|
"#9748",
|
|
"docs/server.md",
|
|
"docs/api/server.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "server-panel-management",
|
|
"title": "Server panel extras and vanilla's management protocol",
|
|
"status": "later",
|
|
"area": "servers",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/server.md",
|
|
"docs/api/server.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "hosting-polish",
|
|
"title": "Hosting polish: Windows service, safe updates",
|
|
"status": "next",
|
|
"area": "servers",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#1808",
|
|
"docs/hosting.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "one-single-player-path",
|
|
"title": "One single-player path: remove the in-frame world",
|
|
"status": "next",
|
|
"area": "gameplay",
|
|
"plain": "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.",
|
|
"dev": "`--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.",
|
|
"links": [
|
|
"#6473",
|
|
"docs/server-levels.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "mod-languages",
|
|
"title": "Scripts for mods",
|
|
"status": "later",
|
|
"area": "mods",
|
|
"plain": "Small mods written as scripts, in the style of KubeJS, with no compiler.",
|
|
"dev": "Waits for native mods to settle: a script layer over the native hook points is to be designed.",
|
|
"links": [
|
|
"docs/native-mods.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "block-storage",
|
|
"title": "Faster block lookups",
|
|
"status": "next",
|
|
"area": "performance",
|
|
"plain": "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.",
|
|
"dev": "`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 (docs/performance/paletted-container-access-results.md).",
|
|
"links": [
|
|
"#1790",
|
|
"#1794",
|
|
"#1747",
|
|
"docs/performance/paletted-container-access-results.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "server-clients",
|
|
"title": "Playing on servers: everything shows as it should",
|
|
"status": "next",
|
|
"area": "servers",
|
|
"plain": "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.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"#1802",
|
|
"#1798",
|
|
"#1795",
|
|
"#1652",
|
|
"#1650",
|
|
"#1671",
|
|
"#1731",
|
|
"#1702",
|
|
"#1710"
|
|
],
|
|
"ongoing": true
|
|
},
|
|
{
|
|
"id": "shader-packs",
|
|
"title": "Shader packs, written again from scratch",
|
|
"status": "next",
|
|
"area": "rendering",
|
|
"plain": "Shader packs were removed and are being rebuilt from scratch. They come back, off by default, once the best-known packs draw properly.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"#1561",
|
|
"#1584",
|
|
"#1586",
|
|
"#1698",
|
|
"#1771",
|
|
"#1786",
|
|
"#1801",
|
|
"#9045",
|
|
"#6233",
|
|
"#6485",
|
|
"#3734",
|
|
"#3125"
|
|
],
|
|
"ongoing": true
|
|
},
|
|
{
|
|
"id": "launcher-redesign",
|
|
"title": "A new launcher design",
|
|
"status": "next",
|
|
"area": "launcher",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#3635",
|
|
"#3636",
|
|
"#3637",
|
|
"docs/design-system.md",
|
|
"crates/horizon-theme"
|
|
],
|
|
"owner": "ludovic111"
|
|
},
|
|
{
|
|
"id": "splitscreen",
|
|
"title": "Splitscreen",
|
|
"status": "next",
|
|
"area": "gameplay",
|
|
"plain": "Play with a friend on the same screen, each with a controller.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"#2054",
|
|
"#3541",
|
|
"#3777",
|
|
"#3794",
|
|
"#3801",
|
|
"#3825",
|
|
"#3826"
|
|
],
|
|
"owner": "martipops"
|
|
},
|
|
{
|
|
"id": "ai-companion",
|
|
"title": "An optional AI teammate",
|
|
"status": "later",
|
|
"area": "ai",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#1068",
|
|
"#1069",
|
|
"#1070"
|
|
]
|
|
},
|
|
{
|
|
"id": "new-versions",
|
|
"title": "Every Minecraft version, prepared automatically",
|
|
"status": "later",
|
|
"area": "gameplay",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/version-ports.md",
|
|
"#4758"
|
|
]
|
|
},
|
|
{
|
|
"id": "exact-far-terrain",
|
|
"title": "Exact far terrain from real chunks",
|
|
"status": "later",
|
|
"area": "performance",
|
|
"plain": "Far terrain drawn from the world you really built and explored, caves and builds included, not only a preview from the seed.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#718",
|
|
"#4678"
|
|
]
|
|
},
|
|
{
|
|
"id": "older-jars",
|
|
"title": "Older Fabric and Forge mods",
|
|
"status": "later",
|
|
"area": "modpacks",
|
|
"plain": "Recognise mods built for versions before 26.1 in the mod browser, so they can be checked and carried over like newer ones.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"docs/mod-browser.md",
|
|
"#10262"
|
|
]
|
|
},
|
|
{
|
|
"id": "modpack-own-packs",
|
|
"title": "A modpack's own resource and shader packs",
|
|
"status": "later",
|
|
"area": "modpacks",
|
|
"plain": "Imported modpacks carry their resource packs into a profile of their own. Shader-pack conversion is still pending.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"docs/modpacks.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "whole-modpacks",
|
|
"title": "Whole modpacks, such as ATM10, rewritten",
|
|
"status": "later",
|
|
"area": "modpacks",
|
|
"plain": "Rewriting a complete big modpack for Horizon so it runs far better than the original. Not a priority now: the work above comes first.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/modpacks.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "java-mod-bridge",
|
|
"title": "Running Java mods that aren't rewritten",
|
|
"status": "later",
|
|
"area": "modpacks",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#527"
|
|
]
|
|
},
|
|
{
|
|
"id": "older-servers",
|
|
"title": "Join servers on older versions",
|
|
"status": "later",
|
|
"area": "servers",
|
|
"plain": "Join servers that run older Minecraft versions, such as 1.21 or 1.8 PvP servers, from Horizon.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#3023"
|
|
]
|
|
},
|
|
{
|
|
"id": "friends-online-mode",
|
|
"title": "Online-mode checks for Play with Friends",
|
|
"status": "later",
|
|
"area": "servers",
|
|
"plain": "Friends who join through an invite code could prove who they are with their Microsoft account, as on online-mode servers.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/play-with-friends.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "orbital-laser",
|
|
"title": "Orbital Laser on the normal game",
|
|
"status": "later",
|
|
"area": "mods",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"https://github.com/Stink-O/orbital-laser"
|
|
]
|
|
},
|
|
{
|
|
"id": "client-mod-natives",
|
|
"title": "Native versions of popular client mods",
|
|
"status": "later",
|
|
"area": "mods",
|
|
"plain": "Built-in versions of the client mods players ask for: block info on hover, a world map, inventory tweaks and schematic overlays.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/extras.md",
|
|
"docs/native-mods.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "create-physics",
|
|
"title": "Create-style physics as a native mod",
|
|
"status": "later",
|
|
"area": "mods",
|
|
"plain": "Contraptions and physics like the Create and Aeronautics mods, as a mod for Horizon rather than part of the base game.",
|
|
"dev": "Issue #805 (porting QOL mods) closed with this answer: it would come as a native Horizon mod.",
|
|
"links": [
|
|
"#805",
|
|
"#6302",
|
|
"#5313",
|
|
"#5556"
|
|
]
|
|
},
|
|
{
|
|
"id": "proximity-voice",
|
|
"title": "Proximity voice chat as a native mod",
|
|
"status": "later",
|
|
"area": "mods",
|
|
"plain": "Hear nearby players talk, as with the voice chat mods of other Minecraft versions, as a Horizon mod.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/native-mods.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "light-default-pack",
|
|
"title": "A light default shader pack",
|
|
"status": "later",
|
|
"area": "rendering",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/shaders.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "ray-tracing",
|
|
"title": "Optional ray tracing",
|
|
"status": "later",
|
|
"area": "rendering",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#1180"
|
|
]
|
|
},
|
|
{
|
|
"id": "hdr",
|
|
"title": "HDR monitors",
|
|
"status": "shipped",
|
|
"area": "rendering",
|
|
"plain": "Output for HDR monitors: brighter highlights and richer colour where your screen supports it.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"#1441",
|
|
"#2021",
|
|
"#2292"
|
|
],
|
|
"shipped_in": "v0.2.74"
|
|
},
|
|
{
|
|
"id": "msaa-fullscreen",
|
|
"title": "MSAA, anisotropic filtering, exclusive fullscreen",
|
|
"status": "later",
|
|
"area": "rendering",
|
|
"plain": "More graphics options: multisample anti-aliasing, anisotropic filtering and an exclusive fullscreen mode. Today Horizon has FXAA and borderless fullscreen.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/graphics.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "video-studio",
|
|
"title": "A complete video studio inside the game",
|
|
"status": "later",
|
|
"area": "extras",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/agent-control.md",
|
|
"#10025"
|
|
]
|
|
},
|
|
{
|
|
"id": "controllers",
|
|
"title": "Controllers: tested on real pads, and in the launcher",
|
|
"status": "later",
|
|
"area": "gameplay",
|
|
"plain": "Make controller support solid: tested with real PlayStation and Xbox pads and a Steam Deck, and usable in the launcher too.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/controllers.md",
|
|
"#10298",
|
|
"#8678"
|
|
]
|
|
},
|
|
{
|
|
"id": "debug-screen",
|
|
"title": "The full debug screen",
|
|
"status": "later",
|
|
"area": "gameplay",
|
|
"plain": "Vanilla's complete F3 screen: debug options, a profiler chart, ten-second captures and an atlas dump.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"#562",
|
|
"docs/native-client.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "lean-installs",
|
|
"title": "Lean installs that use less disk",
|
|
"status": "later",
|
|
"area": "launcher",
|
|
"plain": "Smaller installs: Horizon keeps one shared copy of the prepared game files and removes what only the preparation needed.",
|
|
"dev": "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."
|
|
},
|
|
{
|
|
"id": "launcher-accessibility",
|
|
"title": "A launcher screen readers can read",
|
|
"status": "later",
|
|
"area": "launcher",
|
|
"plain": "Screen readers read the launcher's buttons, lists and settings, and every part of it works from the keyboard.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#4537"
|
|
]
|
|
},
|
|
{
|
|
"id": "linux-arm64",
|
|
"title": "Horizon on Linux ARM64",
|
|
"status": "later",
|
|
"area": "platforms",
|
|
"plain": "Game and launcher builds for 64-bit ARM Linux computers.",
|
|
"dev": "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`).",
|
|
"links": [
|
|
"#1709"
|
|
]
|
|
},
|
|
{
|
|
"id": "build-it-yourself",
|
|
"title": "The launcher builds Horizon on other systems",
|
|
"status": "later",
|
|
"area": "platforms",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#4354",
|
|
"docs/native-mods.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "windows-arm64",
|
|
"title": "Horizon on Windows ARM64",
|
|
"status": "later",
|
|
"area": "platforms",
|
|
"plain": "A native Horizon for Windows on ARM computers, such as Snapdragon laptops.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/release-flow.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "opengl-fallback",
|
|
"title": "OpenGL for old computers",
|
|
"status": "shipped",
|
|
"area": "platforms",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#1917",
|
|
"#1920",
|
|
"#1936"
|
|
],
|
|
"shipped_in": "v0.2.63"
|
|
},
|
|
{
|
|
"id": "phones-and-browser",
|
|
"title": "Android, iOS and the browser",
|
|
"status": "later",
|
|
"area": "platforms",
|
|
"plain": "Versions of Horizon for Android, iOS and web browsers. Nothing official yet; contributors have started the first pieces.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#1813",
|
|
"#1751",
|
|
"#9134",
|
|
"#8069",
|
|
"#4153"
|
|
],
|
|
"ongoing": true
|
|
},
|
|
{
|
|
"id": "video-series",
|
|
"title": "A video series about Horizon",
|
|
"status": "later",
|
|
"area": "community",
|
|
"plain": "A series of videos about how Horizon is made and what is new, with each upload announced on Discord.",
|
|
"dev": "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."
|
|
},
|
|
{
|
|
"id": "curseforge",
|
|
"title": "CurseForge in the mod browser (coming soon)",
|
|
"status": "later",
|
|
"area": "modpacks",
|
|
"plain": "Coming soon: search and download CurseForge mods and modpacks from the launcher, as you can with Modrinth today.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"docs/mod-browser.md",
|
|
"docs/modpacks.md"
|
|
],
|
|
"announce": true
|
|
},
|
|
{
|
|
"id": "pistons-push",
|
|
"title": "Pistons push players and mobs",
|
|
"status": "later",
|
|
"area": "gameplay",
|
|
"plain": "Pistons and slime blocks will push players, mobs and items as in vanilla. Today moving blocks pass through them.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#1496",
|
|
"#1609",
|
|
"#1608",
|
|
"#1704",
|
|
"#1758"
|
|
]
|
|
},
|
|
{
|
|
"id": "intel-mac",
|
|
"title": "Horizon on Intel Macs",
|
|
"status": "later",
|
|
"area": "platforms",
|
|
"plain": "Builds of the game and the launcher for Macs with an Intel processor.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#1171",
|
|
"#1161",
|
|
"#1792"
|
|
]
|
|
},
|
|
{
|
|
"id": "targeted-optimisations",
|
|
"title": "A batch of targeted optimisations",
|
|
"status": "later",
|
|
"area": "performance",
|
|
"plain": "Several smaller speed-ups, each measured: idle block entities that sleep, cheaper particles, faster structure placement, high-rate mice and very large texture packs.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#1461",
|
|
"docs/profiling.md",
|
|
"#7752",
|
|
"#8251",
|
|
"#10229"
|
|
]
|
|
},
|
|
{
|
|
"id": "convert-to-rust",
|
|
"title": "A Convert to Rust button for what isn't rewritten yet",
|
|
"status": "later",
|
|
"area": "modpacks",
|
|
"plain": "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.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"docs/modpacks.md",
|
|
"docs/mod-browser.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "code-mods",
|
|
"title": "Mods with code: machines, magic, mobs",
|
|
"status": "later",
|
|
"area": "modpacks",
|
|
"plain": "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.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"#1854",
|
|
"docs/modpacks.md",
|
|
"docs/native-mods.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "datapack-browser",
|
|
"title": "Data packs in the mod browser",
|
|
"status": "later",
|
|
"area": "modpacks",
|
|
"plain": "Search and install data packs from the launcher's mod browser, for the world you choose, as you do mods and resource packs.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"docs/mod-browser.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "prepare-without-java",
|
|
"title": "Prepare a version without Java",
|
|
"status": "later",
|
|
"area": "servers",
|
|
"plain": "Set up Horizon, a server first, without Java on your computer: published tables are combined with your own copy of the game.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"#1750",
|
|
"docs/server.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "tailscale-hosting",
|
|
"title": "Guided hosting with Tailscale and an invite button",
|
|
"status": "later",
|
|
"area": "servers",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/hosting.md",
|
|
"docs/server.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "docker-image",
|
|
"title": "An official Docker image for servers",
|
|
"status": "later",
|
|
"area": "servers",
|
|
"plain": "An official image to run a Horizon dedicated server in Docker with one command, your own copy of the game files mounted in.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/hosting.md",
|
|
"docs/server.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "villages-combat-parity",
|
|
"title": "Villages and combat, exactly as in vanilla",
|
|
"status": "later",
|
|
"area": "gameplay",
|
|
"plain": "Villages and fights behaving as in vanilla: iron golems defending villages, villagers remembering their homes, mace smashes and knockback.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"#1639",
|
|
"docs/rust-parity.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "audio-device",
|
|
"title": "Choose the audio output device",
|
|
"status": "later",
|
|
"area": "gameplay",
|
|
"plain": "Pick the speakers or headphones Horizon plays through, in Music & Sounds.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#1035"
|
|
]
|
|
},
|
|
{
|
|
"id": "shader-pack-examples",
|
|
"title": "Well-known shader looks, rewritten for Horizon",
|
|
"status": "later",
|
|
"area": "rendering",
|
|
"plain": "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.",
|
|
"dev": "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`).",
|
|
"links": [
|
|
"docs/shaders.md",
|
|
"crates/horizon-shader-api/packs/golden_hour"
|
|
]
|
|
},
|
|
{
|
|
"id": "beta-label",
|
|
"title": "A visible beta label",
|
|
"status": "later",
|
|
"area": "launcher",
|
|
"plain": "A clear 'beta' label in the launcher and the game, so nobody is surprised that Horizon is still being built.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"docs/versioning.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "wayland-polish",
|
|
"title": "Wayland and Hyprland polish",
|
|
"status": "later",
|
|
"area": "platforms",
|
|
"plain": "Fixes for Linux desktops that use Wayland and Hyprland: fullscreen, the clipboard, the GUI scale after a restart and the like.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"#1866"
|
|
]
|
|
},
|
|
{
|
|
"id": "agent-control-protocol",
|
|
"title": "A versioned agent-control protocol",
|
|
"status": "later",
|
|
"area": "ai",
|
|
"plain": "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.",
|
|
"dev": "`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.",
|
|
"links": [
|
|
"docs/agent-control.md",
|
|
"docs/api/agent-control.md",
|
|
"docs/api/stability.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "own-agents-porting",
|
|
"title": "Port mods with your own AI agent",
|
|
"status": "later",
|
|
"area": "ai",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"https://playhorizon.dev/docs/agents",
|
|
"docs/modpacks.md",
|
|
"docs/agent-control.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "x-account",
|
|
"title": "Horizon on X (coming soon)",
|
|
"status": "later",
|
|
"area": "community",
|
|
"plain": "Coming soon: an official Horizon account on X, used to announce releases and the weekly summary.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"roadmap/README.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "agents-app",
|
|
"title": "Pipeline protection and a GitHub App for agents",
|
|
"status": "later",
|
|
"area": "project",
|
|
"plain": "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.",
|
|
"dev": "`.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).",
|
|
"links": [
|
|
"docs/security.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "signed-installers",
|
|
"title": "Signed updates everywhere, installers included",
|
|
"status": "later",
|
|
"area": "project",
|
|
"plain": "Every download Horizon makes is checked against the project's signature, including the first install with install.sh and install.ps1.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"docs/security.md",
|
|
"#10354"
|
|
]
|
|
},
|
|
{
|
|
"id": "cli-server-install",
|
|
"title": "A server you install with one command",
|
|
"status": "later",
|
|
"area": "servers",
|
|
"plain": "Install and run a Horizon dedicated server from a terminal with a single command, no launcher needed, for VPSes and headless machines.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/hosting.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "server-panels",
|
|
"title": "Ready-made setups for hosting panels",
|
|
"status": "later",
|
|
"area": "servers",
|
|
"plain": "Install a Horizon server from the panels hosts use, such as Pterodactyl and AMP, the usual way for each panel.",
|
|
"dev": "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).",
|
|
"links": [
|
|
"docs/hosting.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "benchmark-your-pc",
|
|
"title": "Benchmark your computer",
|
|
"status": "help-wanted",
|
|
"area": "performance",
|
|
"plain": "Run Horizon's built-in benchmark and share the report: every new computer makes the performance work more accurate. No coding needed.",
|
|
"dev": "`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.",
|
|
"links": [
|
|
"https://playhorizon.dev/docs/performance"
|
|
]
|
|
},
|
|
{
|
|
"id": "server-resource-packs",
|
|
"title": "Server resource packs",
|
|
"status": "shipped",
|
|
"area": "servers",
|
|
"plain": "Servers can send you their resource pack: Horizon asks, downloads it and applies it, like vanilla.",
|
|
"dev": "The dedicated server offers server.properties' pack (#1562); the client's pack manager, downloads, prompt and Server Resource Packs setting (#1569, #1570).",
|
|
"links": [
|
|
"#1562",
|
|
"#1569",
|
|
"#1570"
|
|
],
|
|
"shipped_in": "v0.2.48"
|
|
},
|
|
{
|
|
"id": "server-thread-default",
|
|
"title": "Single player on its own server thread",
|
|
"status": "shipped",
|
|
"area": "gameplay",
|
|
"plain": "Single player runs on a server thread, as vanilla does, so the world keeps ticking smoothly while the window draws.",
|
|
"dev": "`game/integrated.rs` runs a second `Game` with one level per dimension; the window joins it through memory like a LAN guest (#1514).",
|
|
"links": [
|
|
"#1514",
|
|
"docs/server-levels.md"
|
|
],
|
|
"shipped_in": "v0.2.39"
|
|
},
|
|
{
|
|
"id": "metal-occlusion",
|
|
"title": "GPU occlusion culling on Macs",
|
|
"status": "shipped",
|
|
"area": "performance",
|
|
"plain": "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.",
|
|
"dev": "GPU occlusion culling on Metal (#1434).",
|
|
"links": [
|
|
"#1434"
|
|
],
|
|
"shipped_in": "v0.2.17"
|
|
},
|
|
{
|
|
"id": "gpu-animated-textures",
|
|
"title": "Animated textures on the GPU",
|
|
"status": "shipped",
|
|
"area": "performance",
|
|
"plain": "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.",
|
|
"dev": "Frames uploaded once, no per-tick CPU blend or copy (#1239).",
|
|
"links": [
|
|
"#1239"
|
|
],
|
|
"shipped_in": "v0.2.5"
|
|
},
|
|
{
|
|
"id": "far-detail",
|
|
"title": "Far Detail for integrated graphics",
|
|
"status": "shipped",
|
|
"area": "performance",
|
|
"plain": "An optional Reduced setting for far terrain, suggested on integrated graphics, that saves 2 to 4 ms of GPU time per frame.",
|
|
"dev": "Opt-in reduced far terrain (#1199), on far-terrain chunk summaries built on the workers (#1029).",
|
|
"links": [
|
|
"#1199",
|
|
"#1029"
|
|
],
|
|
"shipped_in": "v0.2.5"
|
|
},
|
|
{
|
|
"id": "mod-browser",
|
|
"title": "The launcher's mod browser",
|
|
"status": "shipped",
|
|
"area": "modpacks",
|
|
"plain": "Search Modrinth for mods, modpacks and resource packs from the launcher; it says before installing what works in Horizon.",
|
|
"dev": "The Mods page (#1154), Java mods checked before install (#1242), project pages, filters and galleries (#1243), modpacks ported in the same step (#1246). docs/mod-browser.md.",
|
|
"links": [
|
|
"#1154",
|
|
"#1242",
|
|
"#1243",
|
|
"#1246",
|
|
"docs/mod-browser.md"
|
|
],
|
|
"shipped_in": "[email protected]"
|
|
},
|
|
{
|
|
"id": "launcher-look",
|
|
"title": "A blocky, Minecraft-like launcher",
|
|
"status": "shipped",
|
|
"area": "launcher",
|
|
"plain": "The launcher got a new blocky look in Horizon's purple, in dark and light.",
|
|
"dev": "The Blocks look (#1269), from `horizon-theme` (docs/design-system.md).",
|
|
"links": [
|
|
"#1269",
|
|
"docs/design-system.md"
|
|
],
|
|
"shipped_in": "[email protected]"
|
|
},
|
|
{
|
|
"id": "dynamic-lights",
|
|
"title": "Dynamic lights",
|
|
"status": "shipped",
|
|
"area": "extras",
|
|
"plain": "An optional extra: torches you hold, drop or set on fire light up what is around them.",
|
|
"dev": "Held, dropped and burning light sources (#1162), in Horizon Extras, off by default.",
|
|
"links": [
|
|
"#1162"
|
|
],
|
|
"shipped_in": "v2026.10.22"
|
|
},
|
|
{
|
|
"id": "servers-page",
|
|
"title": "Host a server from the launcher",
|
|
"status": "shipped",
|
|
"area": "servers",
|
|
"plain": "The launcher's Servers page creates, starts, backs up and updates a Horizon server with buttons, and invites friends.",
|
|
"dev": "The launcher's Servers page (#1026) over `horizon-server` (docs/hosting.md).",
|
|
"links": [
|
|
"#1026",
|
|
"docs/hosting.md"
|
|
],
|
|
"shipped_in": "launcher-v0.15.0"
|
|
},
|
|
{
|
|
"id": "launcher-look-menus",
|
|
"title": "Game menus in the launcher's style",
|
|
"status": "later",
|
|
"area": "extras",
|
|
"plain": "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.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"docs/design-system.md"
|
|
]
|
|
},
|
|
{
|
|
"id": "linux-packages",
|
|
"title": "A Nix flake",
|
|
"status": "later",
|
|
"area": "platforms",
|
|
"plain": "Install Horizon on NixOS through a Nix flake.",
|
|
"dev": "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.",
|
|
"links": [
|
|
"packaging/linux/appimage.sh"
|
|
]
|
|
}
|
|
],
|
|
"journal": [
|
|
{
|
|
"week": "2026-43",
|
|
"date": "2026-10-19",
|
|
"title": "Single player becomes a server, servers send their packs",
|
|
"plain": "Single player now runs on its own server thread, as vanilla does, and a run of fixes made shields, tridents, elytra, maps, fishing, signs and books work there and for every server player. Servers can send you their resource packs, the launcher got its blocky new look, and the first pieces of Horizon's mod registry landed. Shader packs were taken out, to come back written from scratch.",
|
|
"dev": "The server thread became the default (#1514), after guests and server-thread players reached parity: totems (#1463), death drops (#1464), signs and books (#1465, #1466), shields, tridents, crossbows and spyglasses (#1476), elytra (#1475), maps (#1510), fishing (#1509), wind charges (#1508), strikes and mob effects (#1512), the cursor stack on close (#1513). Server resource packs: the dedicated server offers them (#1562) and the client downloads, asks and applies them (#1569, #1570). Mod registry: index schema 1 and `.hpack` (#1634), `cargo horizon-mod check` (#1642), the submission service (#1659). Shader packs were removed (#1561) and the clean-room rewrite started from the format's documentation (#1584 onward). Releases now ship in batches of five pull requests, or six hours after the oldest (#1554)."
|
|
}
|
|
]
|
|
}
|