Skip to content

Repository files navigation

Voxy on Android

Run Voxy — the level-of-detail mod that draws terrain far beyond Minecraft's normal render distance — on an Android phone or handheld. Minecraft: Java Edition, on Zalith Launcher 2 (a PojavLauncher-family launcher), on Snapdragon/Adreno hardware.

Voxy needs desktop OpenGL 4.6, which Android does not have. This project supplies it: a Mesa stack (Kopper Zink on Turnip) packaged as launcher plugins, plus a small compatibility mod and a native library plugin that fix the places where Voxy assumes it is running on a desktop.

Status Working. LODs render, persist across sessions, and survive long play sessions. Shaders work with Voxy-aware shaderpacks.
Verified on AYN Odin 3 — Snapdragon 8 Elite (SM8750), Adreno 830, Android 15
Game Minecraft 26.1.2 + Fabric Loader 0.19.2
Not measured frame rate. Everything here is verified correct, nothing is verified fast — see docs/open-points.md

Voxy LODs with a shaderpack Voxy LOD vista

Everything is done on the phone or handheld itself — download the files, tap to install, pick two settings in the launcher. No PC required.


Will this work on my device?

Requirement Why
Adreno 7xx / 8xx GPU The graphics stack is Mesa Turnip, which is a Qualcomm Adreno driver. Mali and PowerVR are not supported.
arm64 Every shipped native library is arm64-v8a only.
Android 11+ Needed for the launcher's plugin mechanism. Verified on 15.
~8 GB free storage Voxy's LOD database grows fast. See Storage.
Zalith Launcher 2 This relies on its renderer/driver/native plugin APIs. Other PojavLauncher forks are untested.

Only Adreno 830 has actually been tested. Other Adreno 7xx/8xx parts are likely but unproven, and the Turnip fix in this project (findings §4.5) was specific to how this device's gralloc reports buffer layout.


The parts

Four pieces, all in the release. Three are apps rather than mods, because Android will only load a graphics driver from an installed package — it cannot load one out of a Minecraft mod.

File What it does
turnip-plugin.apk Turnip — the graphics driver that talks to your Adreno GPU
kopper-zink26-plugin.apk Kopper Zink — turns desktop OpenGL 4.6 into something the driver understands. This is the piece Voxy actually needs
rocksdb-native-plugin.apk Lets Voxy save its terrain data to disk. Without it, worlds crash after a minute or two
voxy-android-compat-<version>.jar The Minecraft mod. Fixes two places where Voxy assumes it is on a PC

zink-env-plugin.apk is also in the release; it is a debugging aid and you do not need it.

Why each part exists, and what breaks without it, is in docs/architecture.md.


Install

Do all of this on the device. You need about 10 minutes and roughly 8 GB free.

1. Get the files

From the latest release, download:

File What it is
turnip-plugin.apk graphics driver
kopper-zink26-plugin.apk desktop OpenGL renderer
rocksdb-native-plugin.apk storage support
voxy-android-compat-<version>.jar the Minecraft mod

2. Install the three APKs

Tap each one. Android will ask you to allow installing from your browser or file manager the first time — that is normal for apps not from the Play Store.

They will not appear in your app drawer as anything you open. They exist so the launcher can find them, and it does so automatically.

3. Set up the Minecraft instance

In Zalith Launcher 2, create a Minecraft 26.1.2 instance with Fabric 0.19.2, then add these mods to it:

Mod Version Where
Fabric API 0.148.2+26.1.2 Modrinth
Sodium 0.9.1+mc26.1.2 — this exact version Modrinth
Voxy 0.2.18-beta Modrinth
Voxy Android Compatibility latest Modrinth or the release above

Optional: Iris (1.11.3+mc26.1.2 or newer) for shaders, Lithium, Voxy World Gen V2.

Sodium must be exactly 0.9.1. Voxy requires that version and refuses to start with any other, which shows up as the game closing during startup.

4. Point the instance at the renderer and driver

In the launcher, open the settings for that Minecraft version and set:

  • Renderer → Kopper Zink (Mesa 25.0.7 fork)
  • Driver → Turnip
  • Graphics API → OpenGL

5. Turn off one global setting

In the launcher's global settings, make sure "Prefer system Vulkan driver" is OFF.

This one catches everybody. It is applied separately from the renderer setting, so leaving it on quietly overrides everything above and the game will crash when you enter a world.

That's it — launch the game and enter a world.

Verify it worked

In the game log (logs/latest.log in the instance directory):

OpenGL Renderer: zink Vulkan 1.4(Adreno (TM) 830 (MESA_TURNIP))
OpenGL Version:  4.6 (Compatibility Profile) Mesa 25.0.7
[VoxyRenderSystem]: Voxy render system created with 536870912 geometry capacity,
                    using pipeline 'NormalRenderPipeline' with renderer 'MDICSectionRenderer'

Three things to confirm:

  • MESA_TURNIP in the renderer string — you are on Turnip, not the proprietary driver.
  • 4.6 (Compatibility Profile) — desktop GL, not ES.
  • Voxy render system created — Voxy is alive rather than shut down.

The honest test that LODs are actually drawing is to set vanilla render distance to 2 (32 blocks). If terrain still reaches the horizon, that geometry can only be Voxy's. A pretty screenshot at render distance 32 proves nothing.


Shaders

Iris works, with one catch: Voxy LODs only render if the shaderpack itself supports Voxy. The pack must ship voxy.json, voxy_opaque.glsl and voxy_translucent.glsl. Check before blaming the stack:

unzip -l YourShaderpack.zip | grep -i voxy

Support is recent, so an old copy of a pack that supports it today will still fail silently — Complementary Reimagined r5.7.1 has none, r5.8.1 has them. The game log tells you which you have:

pipeline at world load meaning
NormalRenderPipeline no shaders, or a pack without Voxy support — LODs will not draw under shaders
IrisVoxyRenderPipeline the pack supplies Voxy programs — LODs draw

Storage use

Voxy's LOD database grows fast — around 500 MB/minute while Voxy World Gen V2 pre-generates terrain, even standing still, reaching several GB in minutes. This is normal: it is the same data that used to sit in RAM, now on disk, which is exactly why long sessions no longer crash. Budget several GB per world, and expect faster growth with the world-gen mod installed.


Troubleshooting

What you see What to do
Game closes during startup Check Sodium is exactly 0.9.1+mc26.1.2, and that voxy-android-compat is in the mods folder
Stuck loading bar, or stuck on "saving world" joining a server rocksdb-native-plugin.apk is missing — install it. If the world was created before you installed it, see below
Crash a minute or two after entering a world, with memory free An older world is still using the temporary storage backend. Easiest fix is a fresh world; otherwise ask on the issue tracker
Crash when entering a world "Prefer system Vulkan driver" is probably on in global settings — turn it off
Scrambled or tiled image, or a black screen The renderer or driver plugin is not the one from this project. Re-check the Renderer and Driver settings for that Minecraft version
Iris will not load, "incompatible mods" Use Iris 1.11.3+mc26.1.2 or newer. Do not downgrade Sodium — Voxy requires 0.9.1
LODs vanish when shaders are on Your shaderpack has no Voxy support — see Shaders

Every one of these has a longer technical explanation in docs/findings.md, including how it was diagnosed and why the fix is what it is.


Reporting a problem

This has been verified on exactly one device. If yours behaves differently that is worth knowing — and so is it simply working, which is what turns "should work on Adreno 7xx/8xx" into something evidenced. Two issue templates: Bug report and Device report.

Getting the logs — no PC needed

When the game crashes, Zalith's error screen has a Share Logs button. That hands the game log to the normal Android share sheet, so you can send it straight to a GitHub issue, a chat app or your own storage. That is the whole procedure.

Do not go hunting through Android/data with a file manager — Android 11 and later block access to it anyway, and the files you would find there are the ones with the caveat below.

What actually helps

Nearly every diagnosis in this project turned on three lines from the game log:

OpenGL Renderer: …     ← which driver you are really on (look for MESA_TURNIP)
OpenGL Version:  …     ← desktop GL 4.6, or ES
[VoxyRenderSystem]: …  ← whether Voxy started, and which pipeline

Plus your device and GPU, and which component versions you installed. The bug report template asks for exactly these.

⚠️ One file to never share raw

If someone asks you for an hs_err_pid*.log — the JVM's native crash dump — strip the --accessToken line first. Those files embed the game's full command line, which contains a live Minecraft access token along with your username, UUID and XUID. Anyone who reads it can act as your account until the token expires, and the file looks like an ordinary crash dump.

The launcher does not offer these for sharing, and the logs it does share are safe: the game log has no token, and the launcher's own log prints --accessToken with the value withheld. So this only matters if you go looking.

Documentation

Document Contents
docs/architecture.md How the stack fits together and why each piece exists
docs/building.md Building every component from source, including the toolchain traps
docs/releasing.md Cutting a signed release, and the keystore that must not be lost
docs/findings.md The nine blockers, how each was diagnosed and fixed. The reference for why anything here is the way it is
docs/open-points.md What is unfinished, unmeasured or uncertain
docs/upstream-bugs.md Bugs found in Voxy, Mesa and the launcher, with reproductions
docs/launcher-internals.md How Zalith's renderer/driver/native plugin APIs actually work
docs/devices.md Measured GL capability probe results per device
docs/turnip-build.md Building Turnip for Adreno 8xx
docs/glprobe-schema.md Output contract for the GL capability probe

Credits

  • Voxy by Cortex
  • Zalith Launcher 2 by MovTery
  • The Kopper Zink Android port comes from the AngelAuraMC / Swung0x48 Mesa fork — the GL side of this stack is their work, not this project's
  • rocksdb-android by Jurriaan Mous
  • Mesa, Turnip and Zink by the Mesa project

Licence

The original work here — documentation, scripts, the plugin projects and the compatibility mod — is MIT; see LICENSE. Two exceptions and one prohibition are worth knowing:

  • patches/zalith-launcher-glprobe.diff modifies Zalith Launcher 2 and is therefore GPL-3.0-or-later, like the code it patches.
  • The plugin APKs package Mesa (MIT) and RocksDB via rocksdb-android (Apache-2.0). Full notices ship inside each APK as assets/THIRD-PARTY-NOTICES.txt and are also in licenses/. The RocksDB libraries are modified — RUNPATH set to $ORIGIN with patchelf, nothing else — as stated in that notice.
  • Voxy is All-Rights-Reserved and is never redistributed here. voxy-android-compat contains no Voxy code: it is a Mixin mod that modifies Voxy at runtime on your own machine, and needs a user-supplied copy of Voxy to compile against. Get Voxy from its author.

About

Run the Voxy LOD mod on Android — Minecraft: Java Edition with far render distances on Adreno phones and handhelds, via Zalith Launcher 2 (PojavLauncher family)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages