Loading the guide…
Bring your mods and shaders to Horizon
Convert Iris / OptiFine shader packs right here in your browser, and Fabric mods with the free desktop app for Windows, Linux and Mac. The translator rewrites them for Horizon, the Rust rewrite of Minecraft Java.
Checking your browser…
PORTING.md for you to finish. Try it on a popular mod to see what it does.
Horizon Translator for Windows, Linux and Mac
Mods are converted by a free desktop app, so everything runs on your own PC and nothing is uploaded. It has the same menu as this site and converts shader packs too.
Download for Windows (.exe) Download for Linux (.tar.gz) Mac, Apple Silicon (.dmg) Mac, Intel (.dmg)Windows 10/11, 64-bit Linux or macOS · about 45 MB · Java is included, nothing else to install
How to use it
- Windows: run
HorizonTranslator-Setup.exe. The installer isn't code-signed, so Windows may show "Windows protected your PC": click More info → Run anyway. Only do this with the file from this site or the project's GitHub Releases page. If Defender calls it a trojan, see how to check the file below.
Linux: unpack it (tar -xzf HorizonTranslator-linux-x64.tar.gz) and runHorizonTranslator/bin/HorizonTranslator.install-menu-entry.shin that folder adds it to your app menu.
Mac: open the.dmg(Apple Silicon for M1 and newer) and drag Horizon Translator into Applications. It isn't signed by Apple, so the first time open System Settings → Privacy & Security and press Open Anyway. - Open Horizon Translator, pick the Mods tab and drop in a Fabric mod
.jar. - Press Convert mod. The result is saved in
Documents/Horizon Translator. - If the mod converted fully (rare), you get
<modid>.hnmodand the app adds it to Horizon: press Build on the launcher's Mods page. Otherwise readPORTING.mdfor what's left, then build it withhorizon-launcher native-build <folder>/mixins/<modid> --trust-native-code. Only build mods you trust: native mods have full access to your computer.
The app only decompiles mods whose licence allows it (MIT, Apache, GPL, LGPL, MPL, OSL and similar). All Rights Reserved mods are only converted for their author ("I made this mod").
Windows Defender says it's a trojan?
Some versions of Microsoft Defender flag the installer as Trojan:Win32/Wacatac.B!ml.
The !ml means a machine-learning model guessed, not that known malware was found. It often
guesses this for new installers that aren't code-signed and haven't been downloaded much yet.
On VirusTotal, Microsoft was the only one of about 70 antivirus engines to flag the 1.0.0 installer;
the others found nothing.
Don't take our word for it. You can check the file yourself without trusting this website:
-
Get the official fingerprint from GitHub. GitHub calculates a SHA-256 hash of every
file attached to a release and shows it next to the file on the
Releases page. This website can't change that number.
For the latest release () GitHub reports:
- Hash the file you downloaded. Open PowerShell in your Downloads folder and run
(orGet-FileHash .\HorizonTranslator-Setup.exe -Algorithm SHA256certutil -hashfile HorizonTranslator-Setup.exe SHA256in Command Prompt). If it matches GitHub's hash, your file is exactly the one that was published. - Scan it with about 70 antivirus engines. Upload the file to VirusTotal or search for the hash there (results for the latest release). Check how many engines flag it and what names they use.
- Read the code. All of the app's source code is on GitHub
(the app itself is in
desktop/src), along with the script that builds the installer (scripts/build-desktop.sh), so anyone can review it or build it themselves.
Only trust a hash you got from GitHub itself. If your file's hash doesn't match, delete it and download it again from the Releases page.
By downloading you agree to the Terms of Use: only convert files you're allowed to modify.
Make your own Horizon mod, no coding needed
The desktop app's Make a mod tab builds Horizon mods from a form: a HUD box with your
coordinates or FPS, chat commands, keys, a zoom key, welcome and reminder messages. Press Make mod
and you get a ready .hnmod, plus the mod's Rust code if you want to go further.
Kit mods use only the parts of Horizon kept stable for mods, so they keep working when Horizon updates.
Free · the app tells you when a new version is out · everything runs on your PC
In five steps
- Install the app and open the Make a mod tab.
- Pick an example under Start from, or start blank, and give your mod a name.
- Tick what it does and fill in the boxes. Text can show
{x},{facing},{fps}and more. - Press Make mod. It's added to Horizon for you.
- In the Horizon launcher's Mods page, press Build under "Native build of Horizon", then play that build.
By converting a file you agree to the Terms of Use: only convert files you're allowed to modify.
By converting a file you agree to the Terms of Use: only convert files you're allowed to modify.
How it works
Mods: Fabric → Horizon native mod
- Licence check. Reads
fabric.mod.jsonand any licence file. Open licences pass; All Rights Reserved is refused. - Decompile. Turns the jar back into Java with Vineflower. The Java stays on your PC and is deleted straight away.
- Map the mixins. Each
@Inject,@Redirect,@ModifyArg… is matched to the Horizon function that does the same job, using a mapping table and Horizon's own source. - Translate Java to Rust. Config, keys, HUD and tick code, maths, JSON, regex, streams and more become Rust that calls Horizon.
- Write a bundle. A
horizon-mixin.tomlbundle you build into the game with the Horizon launcher, plusPORTING.mdlisting anything left to do.
Shaders: Iris/OptiFine → Horizon pack
- Load it like the game does. Runs Horizon's real shader loader (GLSL → naga → SPIR-V) offline, for every dimension, and lists each program it would skip.
- Fix what fails. Tries about 20 rewrite rules on the GLSL (3D textures, compute passes, out-arguments, buffer formats…). A rule is kept only if more programs load and nothing that loaded breaks.
- Fix how it draws. Passes that work around differences in how Horizon renders: normals, matrices, missing uniforms, cleared buffers, noise textures, skies.
- Write the pack. A
-horizon.zipfor Horizon'sshaderpacksfolder, with a report of every change.
The full technical description is in the project's README on GitHub.
FAQ
How do I install a converted shader pack?
Put the downloaded …-horizon.zip in %APPDATA%\horizon\shaderpacks (Windows) or ~/.local/share/horizon/shaderpacks, then pick it in Options → Horizon Settings → Shader Packs.
How do I install a converted mod?
Unzip the bundle. Horizon native mods are compiled into the game, so build it with the Horizon launcher:
horizon-launcher native-build <bundle>/mixins/<modid> --trust-native-code.
Only do that for code you trust: a native mod runs with full access to your computer. Read PORTING.md first.
Will every feature of my mod work?
Probably not. The mod converter is meant to help you port a mod, not do it 100% for you. Code that only uses plain Java converts well. Code that reaches deep into Minecraft (custom screens, entity renderers, resource packs) often has no Horizon equivalent yet. Those parts are switched off and listed in PORTING.md, so the mod still loads.
Do you keep my files?
Your files never leave your computer. Shader packs are converted inside your browser (WebAssembly) and mods by the desktop app on your PC, so nothing is uploaded and there's no server that could keep anything. Decompiled Java is deleted as soon as a conversion ends.
Something went wrong. How do I report it?
Open an issue on GitHub or ask on Discord, or press Report a problem under a result to start one with the details filled in. Say which mod or shader pack (with a download link), what you expected, and paste the converter log. Don't attach mods or packs you aren't allowed to share.
Is this official?
No. It's a community tool and isn't made by the Horizon, Fabric, Iris or OptiFine teams, or by Mojang or Microsoft.
Support me
Only send on the networks listed under each address. Crypto sent on another network or to a mistyped address can't be got back. Scan the QR code or use Copy instead of typing an address.
Donation addresses haven't been added yet. Thanks for thinking of it!