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.

Nebula includes a self-update system that checks for new launcher releases, downloads the update APK directly to your device, and hands it to Android’s package installer — all without requiring you to visit a browser or GitHub. Every update goes through a multi-step integrity verification process before installation is offered, so you can trust that what you are installing is exactly what the Nebula team published.

How updates work

1

Nebula queries the update endpoint

When you open the Updates screen, Nebula sends a GET request to https://api.nebulaau.space/updates/app. The response is a JSON document that includes:
FieldDescription
versionCodeInteger build number of the latest release
versionNameHuman-readable version string (e.g. 1.2.0)
downloadUrlHTTPS URL to the update APK
sizeDeclared byte size of the APK
sha256Expected SHA-256 hex digest of the APK
notesRelease notes shown in the update prompt
2

Nebula compares version codes

The versionCode from the server is compared against the version code of the currently installed Nebula app. If the server value is higher, an update is available and Nebula shows a prompt with the version name, file size, and any release notes. If the installed version is already current, Nebula reports that no update is available.
3

Download is restricted to api.nebulaau.space

Before opening the download connection, Nebula validates the downloadUrl from the server response. The URL must use https, the host must be exactly api.nebulaau.space, and it must not include a username, password, or non-default port. URLs pointing to any other host are rejected with an error before any download begins.
4

APK is downloaded and integrity-checked

Nebula downloads the APK to its private cache directory and runs the following checks in order:
  1. Size check — the number of bytes received must exactly match the size field declared in the server response. The download is also aborted early if it exceeds the declared size or the 256 MB hard cap.
  2. SHA-256 hash check — the SHA-256 digest of the downloaded file must match the sha256 field from the server response, byte for byte.
  3. Package name check — the APK must declare the same Android package name as the currently installed Nebula app.
  4. Version code check — the APK’s version code must match the versionCode from the server response, and must be strictly greater than the currently installed version.
  5. Signing certificate check — the APK must be signed by the same publisher certificate(s) as the currently installed Nebula app (see Why signature verification matters below).
5

Nebula prompts you to install

After all checks pass, Nebula hands the verified APK to Android’s system package installer via a FileProvider URI. Android presents its standard installation confirmation dialog. On Android 8.0 and later, if Nebula does not yet have the Install unknown apps permission, it will direct you to the relevant Android Settings page before proceeding.

Why signature verification matters

Android APKs are signed with a private key held by the publisher. Nebula verifies that the signing certificate of the downloaded APK matches the signing certificate of the Nebula copy already on your device. If they differ — even by a single byte — the download is rejected. This check prevents supply-chain attacks, where a compromised server, a DNS hijack, or a man-in-the-middle response could deliver a malicious APK that passes a size and hash check but was signed by a different key. Because Nebula compares against the certificate of the app you already trust, a replacement APK signed by any other party cannot be installed through this update path. Nebula uses Android’s PackageManager to read the signing information from both the installed app and the candidate APK, hashes each signer’s certificate with SHA-256, sorts the resulting byte arrays, and requires that the two sorted sets are identical.

Manual update

If the in-app update fails — for example, due to a network error, a failed integrity check, or an Android permission issue — you can update manually:
1

Download the latest APK from GitHub Releases

Visit the Nebula Launcher Releases page and download the latest APK file to your device.
2

Open the APK and install it

Open the downloaded APK using your file manager or browser. If Android asks you to allow installation from unknown sources for that app, grant the permission and proceed. Android will verify that the new APK is signed by the same key as your existing installation before allowing the upgrade.
Nebula will only install an update APK that passes all integrity checks — size, SHA-256 hash, package name, version code, and signing certificate. If any single check fails, the update is cancelled and the partial APK file is deleted from the cache immediately. A failed check does not affect the currently installed version of Nebula in any way.

Build docs developers (and LLMs) love