|
Play Kristal Engine games and mods on Android device. |
Features · Installation · Patches · Building · Support · Credits
Kristal Launcher is a wrapper that embeds the LÖVE2D engine to run Kristal Engine games on Android.
The launcher never rewrites the package selected by the user. Every compatibility change is made to a staged copy inside the app's private storage, so a failed patch cannot damage the original .love, .zip, or fused executable.
This was originally a study project to learn Gradle and Kotlin.
If Kristal Launcher is useful to you, you can support its continued development:
- DELTARUNE: Vessel vs. Kris Remake
- DELTARUNE: PluggedDream
- DELTARUNE: Frozen Heart
- DELTARUNE: Friendless
- DELTARUNE - Ralsei: Prince of Darkness
- DELTARUNE: Sermon's Sang
- DELTARUNE: Frostveil
- Requires the Nil Arithmetic & Audio Sanitization patch.
- StarRune
- Requires the RGBA16 Conversion patch.
- Godhome
- Requires the Shaders patch.
- UNDERTALE: Cooking with Kindness
- works but VERY SLOW. Requires Optimization Patch (experimental).
- Material 3 based design.
- Patches to correct the compatibility of games designed for PC.
- Download community translations matched to each game's project ID and version, or create and export your own.
- Browse games in list or grid layouts, with search, favorites, and recent games.
- Launch
.love,.zip, and compatible fused Windows executables(.exe). Unzip is optional. - External patches compatible (i guess, i don't test it).
- Portuguese, English and Spanish localization.
- Virtual Gamepad settings are not universal. The gamepad is added directly to the game.
- Some patches do not respect the settings.
- METADATA information may not be returned.
- Zips and patches management somewhat slow. (May takes a LOT of time to load the games, sorry)
Note
it's my first app like that, gimme a break-.
- Add Kristal Runtime to non-excellable mods.
Download the newest APK from GitHub Releases and install it on a device running Android 7.0 or newer.
Note
Android may ask permission to install apps from your browser or file manager. Only install APKs downloaded from this repository's official Releases page.
After opening the launcher, select the folder that contains your Kristal games. Android grants access only to that folder, and the permission can be cleared from the app settings.
Built-in patches cover common Android differences in fullscreen behavior, GLSL ES shaders, image formats, virtual filesystems, borders, text rendering, and input. Each fix can be enabled for every game or overridden for a specific title.
See the patch authoring guide for the package format, supported operations, limits, and publishing workflow.
Note
Can I keep all patches enabled?
Yes, technically you can, patches will only act when needed (supposedly), but I wouldn't do that—I'd only enable them when necessary.
Kristal Launcher can check this repository for new releases when the app starts. Automatic checks are optional, and a manual check is available from Settings → About.
Versions follow X.Y.Z: X changes for large stable updates, Y for smaller feature updates, and Z for corrections. Every APK update must advance the appropriate number and use a greater Android versionCode. A release is offered only when its version is newer than the app's current versionName, and the launcher prefers a non-debug APK whose name contains KristalLauncher.
- JDK 17
- Android SDK Platform 34
- Android SDK Build Tools 34.0.0
- Git
Clone the repository:
git clone https://github.com/kazwtto/KristalLauncher.git
cd KristalLauncherOn Windows, create the project signing key once and build both variants:
.\create_keystore.bat
.\build_apks.batFinished APKs are written to the ignored artifacts/apk/ directory with versioned names:
KristalLauncher-vX.Y.Z-debug.apk
KristalLauncher-vX.Y.Z-release.apk
The keystore and credentials remain under the ignored .signing/ directory. Back them up securely; Android will only accept future updates signed with the same key.
gradlew.bat assembleDebug compiles and checks the Android layer. Distribution APKs must use the repository build scripts because they merge runtime/love2d/classes.dex, align the APK, and sign the final package.
| Area | Technology |
|---|---|
| Language | Kotlin 1.9.23 and Lua |
| Android UI | Material 3, AppCompat, XML layouts, RecyclerView |
| Async work | Kotlin coroutines and Android lifecycle scopes |
| File access | Storage Access Framework and DocumentFile |
| Runtime | Embedded LÖVE2D native libraries and Java DEX |
| Build | Gradle Kotlin DSL and PowerShell packaging scripts |
| Path | Purpose |
|---|---|
app/ |
Android source, resources, native libraries, and Lua runtime assets |
runtime/love2d/ |
Java DEX paired with the checked-in LÖVE2D native libraries |
patches/ |
Patch catalog, schemas, published packages, and editable sources |
Patch authors should read the patch authoring guide before creating or publishing a .klpatch package.
Kristal Launcher is under active development. Game packages and save data are important, so keep an untouched copy and report reproducible problems through GitHub Issues.
Yes. ChatGPT (free-tier) was used for optimization, formatting of .md files, localizations for English and Spanish, and translation of README.md and code comments from Portuguese to English.
- Kristal Engine — the engine and mod ecosystem targeted by the launcher
- LÖVE — the runtime used to execute games on Android
- Pixelarticons — icons used in the DELTARUNE theme
- kristal_rus by neofarsh — source of the Russian Kristal translation adapted as an optional patch
- LazyDesman — translated sprites and textures used by the
kristal_ruspatch
Kristal Launcher is an independent community project. It is not affiliated with or endorsed by the Kristal Engine team, LÖVE, Toby Fox, or the creators of games launched through it. Games, mods, names, and assets belong to their respective owners.

