Skip to main content

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.

The very first time you tap Launch in Nebula, the app does considerably more work than on any later launch. Before the game can run BepInEx IL2CPP mods on Android, FusionCore must prepare the Unity runtime environment and generate IL2CPP interop assemblies for your specific Among Us build. This only needs to happen once per game version, but it takes time, memory, and an uninterrupted run to complete successfully.

What Nebula does on first launch

After you press Launch, the bootstrap screen appears and walks through the following sequence. Each phase is shown as a status message on screen.
1

Preparing target package

Nebula verifies the Among Us package is installed and resolves its launcher activity before any further work begins.
2

Copying Unity data

FusionCore copies the Unity bin/Data assets from the game package into a private working directory that BepInEx can access.
3

Checking runtime version

The exact Unity engine version is read from the copied data. This determines which native Unity library is required.
4

Preparing the native Unity runtime

FusionCore checks whether a compatible unstripped libunity is already cached.
5

Downloading unstripped libunity

If the library is not already cached, it is downloaded automatically for your device’s ABI. A download progress bar is shown during this step.
6

Extracting runtime files

The bundled .NET (dotnet-arm64) and BepInEx (BepInEx-arm64) ZIP archives are extracted to their working directories. This step is skipped if the current runtime version is already installed.
7

Registering native libraries

FusionCore enumerates the game’s native .so libraries and registers them with the mod loader so they can be resolved at runtime.
8

Installing hooks

FusionCore installs class-loader, package-manager, and Unity player hooks into the game process before its own onCreate fires.
9

Launching game

Nebula writes a launch sentinel file, starts the game’s launcher activity, and hands control to Among Us. The bootstrap overlay remains visible while BepInEx initialises and IL2CPP interop assemblies are generated.

IL2CPP generation

Once the game activity starts, BepInEx runs Cpp2IL and generates the IL2CPP interop assemblies for Among Us. This is the most time-consuming part of the entire first-launch flow. The on-screen status message will update to indicate that interop generation is in progress.
  • Duration: generation can take up to 8 minutes on a typical device.
  • Memory usage: the process is memory-intensive. Android may attempt to reclaim RAM from other apps while it runs.
  • Device stability: on some phones the device can become temporarily sluggish or unresponsive. This is normal behaviour and does not indicate a hardware problem.
  • Do not close the app. While the spinner is moving, Nebula and FusionCore are actively working. Interrupting the process before it completes forces everything to start over.
If the device becomes unresponsive and the spinner has stopped moving, the process may be stuck. In that case, a device restart may be necessary before trying again. If the spinner is still moving, the app is still working — leave it alone and wait for it to finish.

If IL2CPP generation is interrupted

Android can kill the game process during IL2CPP generation, especially on devices with limited free RAM. If Nebula reports that generation was interrupted when you next open the app, follow these steps:
  1. Reopen Nebula Launcher.
  2. Press Launch again.
  3. Leave the device on the table and do not use other apps during generation.
  4. Do not repeatedly close or reopen the launcher during this stage — each forced interruption discards progress for that run.
The second attempt commonly succeeds because FusionCore and BepInEx preserve intermediate work between runs. You do not need to reinstall mods or clear any files before trying again.

Subsequent launches

Once IL2CPP interop assemblies have been generated successfully, they are cached on the device. Every launch after the first skips the generation step entirely. The runtime extraction steps are also skipped as long as the installed runtime version has not changed. As a result, later launches are considerably faster than the first.
For help with launch failures that persist beyond a second attempt, see Common Issues.

Build docs developers (and LLMs) love