mrpack on Hopper and it answers what Horizon already does, what has a port and what is not there yet, then installs the rest.
The project's README from github.com/UpperSupervisor/horizon-modpack-compatibility. As one markdown file: README.md.
Download · How to use · What it does · How it works · FAQ
Hopper answers one question for Horizon players: is my mod on Horizon? Horizon is Minecraft: Java Edition 26.3 rewritten in Rust, and Java mod jars don't run there. Type a mod's name or drop your whole pack, and Hopper tells you what Horizon already does, what has a Horizon version, what works as it is and what isn't there yet.
It installs what works, keeps a board of the mods players miss most, and tells you when one you're waiting for arrives.
| System | File | |
|---|---|---|
| Windows 10 and 11 | Hopper-1.3.6-portable-x64.exe |
One file. No installer, no admin rights |
[!NOTE] The build isn't code-signed yet, so SmartScreen may warn you the first time. Choose More info, then Run anyway.
mods folder or a modpack on the window.
One plain answer per mod, one sentence on why, and one button. Built-in mods get How to turn it on, ported ones Install, working ones Add to Horizon and the rest Want it too.
Drop a mods folder, a Prism or MultiMC instance, a .mrpack or a CurseForge zip, and get three numbers instead of a spreadsheet. One button adds every mod that comes with you; the per-mod list waits behind Show details.
The ten mods Horizon players miss most, with vote counts and your own votes marked. If you port mods, it's the list of what to make next.
Watch any mod that isn't there yet. When a Horizon version appears, Hopper says so the next time it starts, with Install right there.
Also: port it yourself with Smelt · revoked mods are turned off automatically · signed files are checked · no account.
Every answer comes from one of four places, checked in this order:
rules/builtin.toml maps Java mods to what Horizon already has: Sodium, Lithium and the other speed mods to Horizon's engine, Distant Horizons to LOD Distance, JEI, REI and EMI to the official Recipes mod, and ten more rows. Each row links the Horizon doc that backs it.index.json built by horizon-rust/horizon-mods. The index doesn't say which Java mod a project replaces, so rules/ports.toml does, kept up to date by pull request. Revoked files never count.horizon-launcher mods check <slug> --json, and shows its verdict in plain words. A mod works when its blocks, items, recipes and worldgen carry over. Add to Horizon hands it to the launcher, which carries that content over.A dropped jar is read from its fabric.mod.json, META-INF/neoforge.mods.toml or META-INF/mods.toml, then looked up by hash with Modrinth's POST /v2/version_files. Modpacks list their mods' hashes, so nothing is downloaded to answer. CurseForge's API needs a key, so CurseForge-only mods are matched by name and may say Not sure yet.
Registry files install the way Horizon's launcher installs them. Each must match its SHA-256 and, when the project has a key, its minisign signature. Content mods (.hmod) go to horizon-mods/, native mods (.hnmod) to horizon-native-mods/, and Horizon asks you to trust each native mod the first time.
Votes go to a small Cloudflare Worker with a D1 database, in server/. It fits the free plan, checked on 2026-10-31: Workers allow 100,000 requests a day, and D1 allows 5 million rows read and 100,000 written a day.
You need Rust 1.85 or newer. The desktop app also needs the Tauri prerequisites for your system.
git clone https://github.com/UpperSupervisor/horizon-modpack-compatibility.git
cd hopper
cargo test --workspace
cargo tauri build # the desktop app
| Path | What's inside |
|---|---|
crates/hopper-core |
Reading jars, the four answers, pack totals, the watchlist |
rules/ |
Built-in and ported mods, reviewed by pull request |
server/ |
The vote board: Worker, D1 schema and config (deploy steps in wrangler.toml) |
app/ |
The desktop window (Tauri) and its icons |
assets/ |
Images for this README |
No, and they don't try to be. There's no account. Each install gets a random ID on first start, a vote counts once per mod per install, and each address can only send so many votes an hour. That's close enough to show what players miss most.
Mod hashes and names go to Modrinth, to identify your mods. Mod icons come from Modrinth's CDN (cdn.modrinth.com, nowhere else) and are cached on your PC; a mod without one shows its initials. Horizon's registry index is downloaded to see what's ported. Your votes go to the vote board with the random install ID. Your watchlist, your packs and everything else stay on your PC. There's no telemetry.
Hopper couldn't find it on Modrinth, usually because it's only on CurseForge, so Horizon's launcher had nothing to check. Pack totals count it as not yet, so the numbers never promise more than Horizon can run.
Hopper installs only files listed in Horizon's registry, and checks each one before it reaches your game folder. Revoked files never install, and copies you already have are turned off with the reason. Native mods run unsandboxed, which is why Horizon asks you to trust each one.
Vote for it, so porters see it. To port it yourself, Smelt turns Fabric and NeoForge mods into Horizon mods. Once a port is in Horizon's registry, add a row to rules/ports.toml so Hopper knows which Java mod it replaces.
It works alongside them. Modrinth lists Java mods, and Horizon's launcher checks and installs them one at a time. Hopper answers for your whole pack at once, says which mods Horizon already replaces, keeps a watchlist and counts votes for what's missing. Its verdicts come from Horizon's own check.
Hopper is MIT licensed. The UI prefers the system font where it has one (SF Pro on Apple devices) and bundles Inter and Geist Mono, both under the SIL Open Font License 1.1.
Minecraft is a trademark of Mojang Synergies AB. Mod names and icons belong to their authors and are shown only to identify the mods; icons load from Modrinth. Hopper isn't affiliated with Mojang, Microsoft, Modrinth, CurseForge, the Horizon project or any mod's authors.
mrpack on Hopper and it answers what Horizon already does, what has a port and what is not there yet, then installs the rest.