# INSANE CLIENT for Android INSANE CLIENT is a native Minecraft: Java Edition launcher for Android, based on [Amethyst-Android](https://github.com/AngelAuraMC/Amethyst-Android), the successor to PojavLauncher. This is a development build, not the earlier browser preview. ## What changed - INSANE CLIENT app identity, original IC emblem, isolated package and legacy storage folder. - A compact, dark interface with rounded cards, landscape layout and a portrait fallback. - Original account sign-in, version/profile management, game downloads, Java launch, renderer settings, gamepad support, touch controls and mod installer remain connected. - Sensitive authentication values are no longer printed to the launcher log. Version 1.1.0 adds Ely.by sign-in (including two-factor codes), token refresh and Ely.by game authentication through the bundled authlib-injector. Local accounts can be created with a player name without a Microsoft account or premium check. They use a standard offline UUID and can download game versions while online. Ely.by and Microsoft/local accounts with the same player name are stored separately. Passwords and verification codes are not saved. Existing Microsoft ownership and demo handling are unchanged. Local accounts do not authenticate to premium/online-mode servers; Ely.by multiplayer requires a server configured for Ely.by authentication. No Minecraft game files or account credentials are supplied. Version 1.2.0 adds **Mods & packs** on the home screen: - Browse Modrinth for mods, resource packs and shader packs, filtered by Minecraft version and the mod loader or shader engine. Choose a release and confirm its files. - Required dependencies are resolved before installation. Downloads are size- and checksum-verified; failures preserve existing files. Disabled dependencies must be enabled before installing content that needs them. - Import `.jar` mods and `.zip` packs through Android's file picker. List, enable, disable and delete files in the selected profile's game folder. - Shared game folders are labelled. Filters do not install loaders or change your profile; choose the Minecraft version and loader you actually launch. - Resource packs are selected in Minecraft's Resource Packs menu. Shaders require a separately installed Iris/OptiFine and a compatible Android renderer. - Existing versions are never silently replaced. Managed mods have an explicit update action in 1.4.0; other content must be removed before replacing it. Optional dependencies are not installed automatically. Version 1.3.0 redesigns the launcher around Minecraft Launcher-inspired navigation, charcoal panels, squared green controls, an original block-world background and a clear profile/Play panel in both orientations. Existing Microsoft, Ely.by and local accounts and the Mods & packs manager remain available. No bundled PvP/HUD or performance-mod pack is included; the proposed built-in mod addition was cancelled. Version 1.3.1 replaces the Amethyst default instance icon with the INSANE CLIENT emblem, refreshes the app/header/file-provider icons, and makes the launcher open in landscape (either horizontal direction). The landscape header uses a larger emblem and stacked INSANE CLIENT wordmark. Existing default instances pick up the new icon on restart; custom, Fabric and Quilt icons are preserved. Version 1.4.0 adds Hyper Launcher-inspired mod management while keeping INSANE CLIENT branding and its Minecraft Launcher-inspired home screen: - A landscape sidebar for the selected profile, content type and download filters, with a scrolling installed list and Modrinth results beside it. - Friendly mod names and versions from Fabric, Quilt, Forge/NeoForge and legacy Forge metadata when available, with filename fallback for unknown files. - Local search by name, filename or mod ID; All/Enabled/Disabled filters and counts. - Compact switches and an actions menu for details, rename, delete and updates. Renaming preserves the enabled/disabled state and the managed download record. - **Check for updates** for mods installed through this manager. Checks use the selected profile's known Minecraft version and loader. A confirmation shows the replacement version and required files before downloading. Local imports stay untracked and can be managed manually or found in Browse Modrinth. - Updates verify and stage downloads before replacing the selected mod, retain its enabled/disabled state, and roll back on handled failures or cancellation. Conflicting or disabled dependencies must be managed separately first. - Imports and reused filenames cannot inherit another project's old update record. This is an independent implementation of the mod-management workflow. Hyper's own bundled client, general file-manager copy/compress tools and any built-in PvP/performance pack are not included. Version 1.5.0 adds **Skin & cape** for local accounts: - Import a skin PNG (64 × 64 or legacy 64 × 32) and a cape PNG (64 × 32). - Choose Classic (Steve) or Slim (Alex). Legacy skins use Classic. - Preview the texture, replace it or remove it. Each local account has its own app-private selection; no Microsoft or Ely.by account is needed. - Local textures are served inside the game process through the bundled authlib-injector. Imported PNGs remain on the device and can be used without internet after Minecraft and its runtime have been installed. - Changing the skin or model does not change the existing player UUID or account credentials. Microsoft and Ely.by launches keep their own texture providers. Select a local account, open **Skin & cape**, and import your PNGs. Restart Minecraft after changing them. These are device-local cosmetics, not an upload to an online skin service; other players may not see them. Servers or mods can override skins, and capes must be enabled in Minecraft's skin customization options. Version 1.6.0 refreshes the logo and Minecraft Launcher-inspired interface: - Original block-style IC monogram across the app, header and default instances. - Charcoal navigation rail, game title and direct Play, Installations, Skins and Mods & packs navigation, using the existing launcher actions. - Original wide block-world panorama, sharper typography and a persistent launch strip with the selected installation and a prominent green Play control. - Landscape layout with scrolling navigation and a portrait fallback. Existing Microsoft/Ely.by/local accounts, local skins/capes and mod/pack management remain. Version 1.7.0 adds appearance options and a layout based on the supplied reference: - A compact launcher header, rounded action cards and a separate profile/Play panel. - Classic Green, Ender Purple and Ocean Blue launcher themes. Choose a plain dark background, the built-in panorama or a private copy of your own PNG/JPEG. Custom images are limited to 20 MiB, 8192 pixels per side and 25 megapixels; they are sampled before display. A failed import preserves the previous image. - A local skin library for saving, naming, renaming, removing and applying imported skins. Skin choices keep their Classic/Slim model. Applying one preserves the active cape and local account UUID. Deleting a library entry does not remove an already applied skin. Save up to 32 skins, with names of 1–40 characters. Skins must be PNGs of 64 × 64 or 64 × 32 pixels, no larger than 512 KiB; legacy skins use Classic. - A dedicated installations list with search and All/Vanilla/Modded filters, selection, edit and create actions connected to the existing profile system. - Tabbed mods/resources/shaders lists with rounded rows and a separate download-filter panel. Appearance selections and the skin library stay on the device. The skin library can be reused across local accounts; applying a skin targets the local account shown on that screen. Restart Minecraft to see a changed skin. ## Install and use 1. Transfer `INSANE-CLIENT-1.7.0-android.apk` to your Android device and open it. 2. Permit installation from the app you used to open the APK when Android asks. 3. Open INSANE CLIENT and tap the account selector → Add account. Choose Microsoft, Ely.by, or Local. Local needs a 3–16 character player name using letters, digits or underscores. Ely.by uses your Ely.by username/email, password and optional six-digit verification code. 4. Select or create a Minecraft profile, then press PLAY. First launch downloads game files. 5. For versions needing Java 17, 21 or newer, use Settings → Java/runtime management to install and select the appropriate Android runtime before launching. The APK supports ARMv7, ARM64, x86 and x86_64, with Android 5.0+ as the declared minimum. Minecraft versions, mods and renderers can have stricter device requirements. It is signed with a development key and uses `com.insaneclient.launcher.debug`. It installs separately from Amethyst and PojavLauncher. Install 1.7.0 over the previous INSANE CLIENT development build to retain existing accounts and settings. ## Build from this source The source archive includes initialized `MioLibPatcher` and `androidnsbypass` submodules and the verified upstream Java 8 assets. From a fresh Git checkout, initialize those two submodules over HTTPS and run `scripts/fetch-insane-runtime.py`. The other renderer libraries are the prebuilt AARs supplied by upstream. Required tools: - JDK 21 to run Gradle, plus JDK 8 for the MioLibPatcher Java toolchain - Gradle 9.6.1 (the wrapper downloads it) - Android platforms `android-37.0` and `android-36.1` - Android build tools 37.0.0 - NDK 27.3.13750724 and CMake 3.22.1 Set `ANDROID_HOME` to your Android SDK directory, or add `sdk.dir=...` to `local.properties`. Then run: ```sh ./scripts/languagelist_updater.sh ./gradlew :app_pojavlauncher:assembleDebug --max-workers=3 # If JDK 8 is not auto-detected, add: # -Porg.gradle.java.installations.paths=/path/to/jdk8,/path/to/jdk21 ``` Output: `app_pojavlauncher/build/outputs/apk/debug/app_pojavlauncher-debug.apk`. Use your own signing configuration when preparing a public release. ## Origins and licenses The base is Amethyst commit `330c6ea` on `v3_openjdk`. The upstream README, LICENSE, individual source notices and dependency licenses are preserved. INSANE CLIENT changes to the launcher are provided under the same LGPL-3.0 terms. This source archive is the corresponding modified application source for the supplied APK. The bundled Java 8 payload is extracted without modification from Amethyst 1.1.7: https://github.com/AngelAuraMC/Amethyst-Android/releases/download/1.1.7/Amethyst.apk The source APK SHA-256 is: `6b5579e93f50a62f4d96279683bb447325e5a4de9015deae787eee56c248211f`. `runtime-manifest.json` contains the per-payload checksums. The runtime's own LICENSE is preserved inside `universal.tar.xz`; upstream runtime sources are at https://github.com/AngelAuraMC/angelauramc-openjdk-build. The original block-world panorama and IC logo were developed for INSANE CLIENT. The icon uses vector geometry for clear small-size rendering. INSANE CLIENT is an independent fork, not an official Amethyst, PojavLauncher, Mojang or Microsoft release. Credit remains with the original contributors. ## Account support checks Run `JAVA_HOME=/path/to/jdk8 scripts/tests/run-ely-api-tests.sh` for the Ely.by API contract checks. Run `JAVA_HOME=/path/to/jdk8 scripts/tests/run-account-integration-tests.sh` for account persistence, refresh and bundled-agent checks. These use deterministic responses and no real credentials. Live sign-in and gameplay require testing on your Android device; no successful live account login is claimed by these checks. ## Local skin and cape checks Run these with JDK 8: ```sh scripts/tests/run-local-appearance-store-tests.sh scripts/tests/run-local-skin-server-tests.sh scripts/tests/run-account-integration-tests.sh ``` They check bounded PNG validation, per-account storage, replacement/removal and failure recovery, actual loopback HTTP responses and RSA texture signatures, and the launch arguments used for local versus Microsoft/Ely.by accounts. The checks preserve the player's UUID when switching models and verify that removing both textures returns to an ordinary local launch. They do not exercise Android's file picker, UI recreation, renderer or Minecraft gameplay. Those still need testing on a physical Android device. ## Appearance and library checks With JDK 8, run `scripts/tests/run-skin-library-tests.sh` and `scripts/tests/run-background-store-tests.sh`. These exercise real files, bounded imports, atomic replacement, failed commits and safe paths. The skin checks cover Classic/Slim selection, cape preservation and library deletion independently of an active skin. Android image decoding, touch layouts and file-picker recreation still require device testing. ## authlib-injector The unmodified authlib-injector 1.2.8 (build 56) is bundled for Ely.by game sessions and optional local-account skins/capes. These use separate endpoints; the local texture service does not authenticate online accounts. Its SHA-256 is `9c7f4343e6c82034958ffb48c14a2cb0c85928be7283103ce17da00c6d5a7b10`. Source: https://github.com/yushijinhun/authlib-injector/tree/5437f5b465ee3f5be0a1e5e1ae3c50978114f6fb. The AGPL-3.0-or-later license with AUTHLIB-INJECTOR exception, COPYING notice and artifact provenance are included in `app_pojavlauncher/src/main/assets/elyby/`. ## Content manager checks Run `JAVA_HOME=/path/to/jdk8 scripts/tests/run-content-api-tests.sh` and `JAVA_HOME=/path/to/jdk8 scripts/tests/run-content-store-tests.sh` for deterministic API, dependency, checksum, profile isolation, import, cancellation and rollback checks. These tests run on a JVM; Android UI, rotation and Minecraft compatibility still need device testing. Mod and shader compatibility depends on the selected loader, renderer and game version, even when the download itself passes integrity checks. Run `JAVA_HOME=/path/to/jdk8 scripts/tests/run-content-management-tests.sh` for rename, update, dependency conflict, cancellation, rollback and filename-reuse checks. Run `scripts/tests/run-mod-metadata-tests.sh` with the same JAVA_HOME for bounded metadata parsing and fallback checks. Recovery after process termination during an update commit is not implemented; exception/cancellation rollback is tested.