Nebula Launcher is an open-source Android application distributed under the GPL-3.0-only license. The full source is available at github.com/Nebula-Modmakers/Nebula-Launcher. You can build the project locally using Android Studio or the Gradle command-line interface. The repository includes all bundled native assets required to produce a functional APK.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Nebula-Modmakers/Nebula-Launcher/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
Make sure the following tools and SDK components are installed before building:- Android Studio (latest stable recommended) or Gradle 8+ CLI
- Android SDK with API 36 (
compileSdk = 36andtargetSdk = 36innebulaApp/build.gradle.kts);minSdk = 26(Android 8.0 Oreo) is the minimum supported device API level - Android NDK version
28.2.13676358— required to compile the C++ JNI sources undernebulaApp/src/main/jni/ - CMake 3.22.1 — used to build the three native libraries (
libfusion,libmain,libnebulahook) - Java 11 — both
sourceCompatibilityandtargetCompatibilityare set toVERSION_11in the app module - The bundled
BepInEx-arm64.zipanddotnet-arm64.zipruntime assets are already checked in tonebulaApp/src/main/assets/— no separate download is needed
Cloning and Building
Open in Android Studio or build from the command line
Android Studio: Open the cloned directory as a project. Android Studio will sync Gradle automatically. Use Build → Make Project or run the
assembleDebug task from the Gradle panel.Gradle CLI:Release Signing
Release builds are signed when all four environment variables below are present and non-empty. When any variable is missing theproduction signing config is simply not created, and the release variant falls back to the default unsigned behavior.
| Environment variable | Purpose |
|---|---|
NEBULA_RELEASE_STORE_FILE | Absolute path to the keystore file (.jks or .p12) |
NEBULA_RELEASE_STORE_PASSWORD | Password for the keystore |
NEBULA_RELEASE_KEY_ALIAS | Alias of the signing key within the keystore |
NEBULA_RELEASE_KEY_PASSWORD | Password for the signing key |
isMinifyEnabled) is disabled for release builds.
Key Modules
The Gradle project contains two modules and three native libraries:| Module / library | Description |
|---|---|
:nebulaApp | The main application module. Contains all Java sources, assets, and the JNI CMake project. |
:lsplant | Bundled third-party ART hook library vendored under third_party/lsplant (LGPL-3.0-only, commit 84256d4cb51abd79280da5c29437fb7004391667). |
libfusion | Native FusionCore bridge library (src/main/jni/fusion/). |
libmain | Native entry-point library (src/main/jni/main/). |
libnebulahook | Native Nebula hook library (src/main/jni/nebulahook/). |
nebulaApp/src/main/jni/CMakeLists.txt.
ABI Filtering
The build is configured forarm64-v8a only:
x86_64, armeabi-v7a) are not supported. The arm64-v8a debug symbols are retained in the packaged APK via keepDebugSymbols.
Running Tests
Unit tests live innebulaApp/src/test/ and can be run without a connected device:
ModCatalogClientTest.java— tests catalog parsing, URL validation, hash format checks, and license validation logic inModCatalogClient.LibUnityDownloaderTest.java— tests Unity library resolution and download logic in thedev.allofus.fusioncorepackage.
nebulaApp/build/reports/tests/testDebugUnitTest/.
The Google Services file (
google-services.json) is required for Firebase Authentication. The file checked in to the repository is configured for the production Nebula Firebase project. If you are developing your own fork or need a separate authentication backend, you must create your own Firebase project, register the dev.tates.nebula application ID (or your own), download its google-services.json, and replace the file at nebulaApp/google-services.json before building.