PojavLauncher runs a full desktop JVM and an OpenGL translation layer on top of Android’s graphics stack — that’s an impressive feat, and it means the space for things to go wrong is a little wider than in a native app. This page covers the most common issues players encounter and how to resolve each one. Work through the relevant section below before posting in Discord or opening a GitHub issue; most problems have a quick fix.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/pojavlauncherteam/pojavlauncher/llms.txt
Use this file to discover all available pages before exploring further.
Crashes and launch failures
Game crashes on launch with 'Out of memory' or 'GC overhead limit exceeded'
Game crashes on launch with 'Out of memory' or 'GC overhead limit exceeded'
- Go to Settings → Java → Memory Allocation and increase the RAM slider.
- Use the auto-allocation table below as a starting point, then add 256–512 MB if you’re using heavy modpacks.
- Do not set RAM higher than roughly 75% of your device’s total physical RAM — leaving headroom for the OS prevents hard crashes and ANR dialogs.
LauncherPreferences.findBestRAMAllocation):| Device RAM | Default allocation |
|---|---|
| < 1 024 MB | 296 MB |
| < 1 536 MB | 448 MB |
| < 2 048 MB | 656 MB |
| 32-bit device (any) | max 696 MB |
| < 3 064 MB | 936 MB |
| < 4 096 MB | 1 144 MB |
| < 6 144 MB | 1 536 MB |
| ≥ 6 144 MB | 2 048 MB |
-Xms and -Xmx arguments. Any -Xms/-Xmx in the custom Java arguments field are automatically stripped and replaced with the preference value.Forge or Fabric installation fails
Forge or Fabric installation fails
| Minecraft range | Required Java |
|---|---|
| 1.0 – 1.16.5 | Java 8 |
| 1.17 – 1.20.4 | Java 17 |
| 1.20.5+ | Java 21 |
- Open Settings → Java and confirm you have the correct runtime installed for your target version. See the Multi-Runtime guide for install instructions.
- Check that the profile’s Java override points to the right major version.
- If the installer still fails, tap Share Logs on the main screen and look for lines containing
UnsupportedClassVersionErrororrequires Java— these pinpoint the exact version mismatch. - Some Forge versions require running the installer with specific JVM flags. Add them in Settings → Java → Custom Java Arguments.
Graphics and display problems
Black screen or white screen after the loading bar completes
Black screen or white screen after the loading bar completes
- Go to Settings → Video → Renderer and switch to a different backend:
- If you were using
vulkan_zink, tryopengles3_ltw(requires GLES 3.0) oropengles2. - If you were using
opengles3_ltw, tryopengles2. opengles2is the most compatible and should work on virtually every device.
- If you were using
- Toggle Alternate Surface in Settings → Video. This switches between TextureView and SurfaceView rendering surfaces. Some GPU driver bugs only affect one of the two modes.
- Disable Force VSync in Settings → Video. A VSync misconfiguration can cause the frame to be presented before it is written on some drivers.
- If the screen is white (not black), it may be a shader compilation error with GL4ES. Enable Dump Shaders in the experimental settings to capture the failing shader source for debugging.
Flickering, rendering glitches, or corrupted textures
Flickering, rendering glitches, or corrupted textures
- Toggle Alternate Surface (SurfaceView ↔ TextureView) in Settings → Video.
- On Adreno GPUs, ensure
zinkPreferSystemDriveris disabled so the bundled Turnip driver is used instead of the system driver. - Try a different renderer. GL4ES and Zink handle fragment shaders differently; a mod or shader pack may work with one but not the other.
- Disable OptiFine or any shader pack — many desktop shaders use GLSL features that GL4ES does not fully support.
Download and installation problems
Game stuck at 'Downloading' or downloads are very slow
Game stuck at 'Downloading' or downloads are very slow
- Verify your device has an active internet connection and that the PojavLauncher app has the Internet permission granted in Android Settings → Apps.
- In Settings → Experimental, try switching Download Source to an alternative mirror. The preference key is
downloadSource(PREF_DOWNLOAD_SOURCE). - If specific library files are stuck in a repeated download loop, disable Check Library SHA in Experimental settings (
PREF_CHECK_LIBRARY_SHA). This skips SHA-256 verification and allows existing files to be reused even if their checksum doesn’t match the manifest. Re-enable this after the issue is resolved to keep your installation secure. - Disable Verify Manifest (
PREF_VERIFY_MANIFEST) if the version manifest itself fails to download — this uses a cached copy.
Controls and input
On-screen controls are too small or too large
On-screen controls are too small or too large
- Go to Settings → Controls → Button Scale (
PREF_BUTTONSIZE). The default is100(100%). Increase it for larger buttons, decrease for smaller. - For fine-grained control, open the Custom Controls editor (long-press the controls layout selector or tap the edit icon). You can resize and reposition individual buttons by dragging their handles. Width and height are stored in dp, so changes scale correctly across screen sizes.
- If you share a layout between devices, be aware that
scaledAtin the JSON records the scale at save time — importing a layout saved at 150% scale on a tablet onto a phone will use that scale until you re-save.
Input lag, cursor drift, or erratic mouse movement
Input lag, cursor drift, or erratic mouse movement
- Lower Mouse Speed in Settings → Controls (
PREF_MOUSESPEED, default1.0). High values amplify small finger movements into large cursor jumps. - If Gyroscope controls are enabled (
PREF_ENABLE_GYRO), disable them in Settings → Controls → Gyro unless you are actively using gyro aiming. Gyro input adds to cursor movement and can cause drift if the device is not held perfectly still. - Enable Big Core Affinity in Settings → Experimental (
PREF_BIG_CORE_AFFINITY). On devices with asymmetric CPU clusters (big.LITTLE), the JVM may be scheduled onto efficiency cores that don’t process input events fast enough. Pinning to big cores (POJAV_BIG_CORE_AFFINITY=1) reduces input pipeline latency. - Reduce the Gyro Sample Rate (
PREF_GYRO_SAMPLE_RATE, default 16 ms) if you keep gyro enabled but want smoother, less jittery aiming. - Disable Gestures (
PREF_DISABLE_GESTURES) if swipe-to-look conflicts with other touch inputs.
Account and authentication
Microsoft login fails, shows a blank page, or token expired
Microsoft login fails, shows a blank page, or token expired
- On the launcher’s account screen, remove the affected Microsoft account.
- Tap Add Account → Microsoft and complete the login flow fresh. A full re-authentication issues a new token pair.
- Ensure your device’s system clock is accurate. OAuth token validation is time-sensitive; a clock that is more than a few minutes off will cause every authentication attempt to fail with a cryptic error.
- Confirm your device has an active internet connection. The login flow requires several sequential HTTPS round-trips to
login.microsoft.com,login.live.com, andapi.minecraftservices.com. - If you are behind a corporate or school network with TLS inspection, the intercepted certificates will cause the login flow to fail. Try using mobile data instead.
<internal_data>/accounts/. PojavLauncher never stores your Microsoft password — only the OAuth access and refresh tokens.Collecting and sharing logs
How to share crash logs with the community
How to share crash logs with the community