This reference covers the public Java classes that implement Nebula Launcher’s core functionality — profile management, package installation, mod catalog fetching, app self-update, game version compatibility checking, and the FusionCore runtime configuration object. All classes reside under theDocumentation 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.
dev.tates.nebula package unless otherwise noted.
ProfileManager
dev.tates.nebula.ProfileManager
ProfileManager is a utility class (non-instantiable) that manages named mod profiles stored in the application’s private files directory. Each profile owns a plugins/ subdirectory. Activating a profile stages its contents into the shared FusionCore plugin directory, which is the directory Among Us reads at launch.
Methods
File that contains all profile directories (<filesDir>/profiles). The directory may not exist yet if no profile has ever been created.
"Default" if no profile has been set.
plugins/ directory for the active profile — equivalent to getPlugins(context, getActiveName(context)).
plugins/ directory for the named profile. The directory is not guaranteed to exist; callers should check with isDirectory() before reading.
The profile name to look up. The value is sanitized before use.
Default profile directory exists before listing. Returns an empty list if the profiles root does not yet contain any subdirectories.
false if the sanitized name is empty or if a profile with that name already exists; returns true when the profile is successfully created.
Desired profile name. Special characters are replaced during sanitization.
stageActive to synchronize the shared FusionCore plugin directory. Throws IOException if the profile directory cannot be created or if staging fails.
Name of the profile to activate.
false without deleting anything if the sanitized name equals "Default" — the default profile cannot be removed. If the deleted profile was active, automatically switches to Default and re-stages it. Returns true when the directory was successfully removed.
Name of the profile to delete.
plugins/ directory into the shared FusionCore plugin directory, replacing whatever was staged previously. Also injects the NebulaCompat.dll compatibility plugin before copying. Throws IOException if the FusionCore plugin directory cannot be cleared or recreated, or if NebulaCompat.dll has not yet been downloaded for the account.
NpkgInstaller
dev.tates.nebula.NpkgInstaller
NpkgInstaller downloads, verifies, and installs NPKG packages — ZIP archives with a manifest.json describing the files to place in the active profile. The installer performs full integrity verification (SHA-256, size, SPDX license consistency, platform compatibility) and supports transactional rollback on failure.
Constants
Methods
version, verifies the SHA-256 digest and exact byte count against the catalog, validates the embedded manifest.json (format, identity, licenses, platform, GitHub repositories), extracts each declared payload file, backs up any existing files, and installs into the active profile. Calls ProfileManager.stageActive on success to push the new files into the shared FusionCore directory. Rolls back all written files if any step throws.
Application or activity context used to locate the profile and cache directories.
The catalog
Mod object supplying identity, license, and repository metadata for cross-validation.The specific
Version to install, supplying the download URL, expected size, and SHA-256 hash.Optional progress callback. May be
null. Called with phases "Downloading", "Validating", and "Installing".packageId from the active profile, removes each installed file from both the profile directory and the shared FusionCore plugin directory (skipping files that are also owned by another installed package), removes empty parent directories, deletes the installation record, and calls FusionRuntimeManager.modsChanged. Throws IOException if the package is not recorded as installed in the active profile.
The package ID as recorded in the installation manifest (e.g.
"dev.example.mymod").packageId in the active profile’s installation records, or null if the package is not installed or its record cannot be read.
The package ID to look up.
true if the file at sharedFile is owned by any NPKG package installed in the active profile. Delegates to getManagedPackageId.
A file inside the shared FusionCore plugin directory to check.
plugins/-prefixed destination whose top-level entry name matches sharedFile.getName(). Returns the owning packageId, or null if no record claims the file.
The shared file whose ownership should be determined.
Progress Interface
phase is a human-readable stage label (e.g. "Downloading", "Validating", "Installing"). completed and total are byte counts during download, or item counts during validation and installation.
ModCatalogClient
dev.tates.nebula.ModCatalogClient
ModCatalogClient is a stateless HTTP client (non-instantiable) that fetches and validates the Nebula mod catalog. The catalog lists all mods available for installation. Every entry is rigorously validated — URLs are restricted to api.nebulaau.space over HTTPS, hashes must be 64-character lowercase hex strings, sizes must be positive and within MAX_PACKAGE_BYTES, and SPDX license identifiers must match the allowed character set.
Constants
ModCatalogClient, AppUpdateClient, and NpkgInstaller to construct request URLs.
Methods
GET https://api.nebulaau.space/mods with Accept: application/json and a Nebula-Android/1 user agent. Parses the response JSON, verifies success: true and formatVersion: 1, filters out any entries whose platforms.android field is false, and constructs a validated, unmodifiable List<Mod>. Throws IOException on any HTTP error, oversized response (>2 MiB), validation failure, or missing required field.
Mod
| Field | Description |
|---|---|
id | Catalog-assigned mod identifier. |
packageId | Java-style package ID (e.g. "dev.example.mymod"). Matched against the NPKG manifest during install. |
name | Display name shown in the mod store UI. |
badge | Single-character badge label displayed on the mod card. Defaults to "M". |
imageUrl | HTTPS image URL, restricted to avatars.githubusercontent.com or camo.githubusercontent.com. |
author | Author display name. Defaults to "Unknown author". |
category | Mod category label. Defaults to "Mod". |
description | Freeform description text. |
gameVersion | Human-readable Among Us version string the mod targets (top-level field on the mod object). |
latestVersion | Version string that identifies the recommended Version entry in versions. |
licenses | Unmodifiable list of SPDX license identifiers declared for this mod. |
licenseComponents | Unmodifiable map from SPDX identifier to the list of component names covered by that license. |
githubRepos | Unmodifiable ordered map from repository display name to validated https://github.com/… URL. |
versions | Unmodifiable list of all available Version entries. |
Version object whose version string equals latestVersion. If no exact match is found, returns the first entry in versions.
Version
| Field | Description |
|---|---|
version | Version string for this release (e.g. "1.0.0"). |
gameVersion | Among Us version name this release was built for. |
gameVersionCode | Among Us version code this release requires. Must be ≥ 1. |
downloadUrl | HTTPS download URL, validated to point to api.nebulaau.space. |
size | Exact byte size of the NPKG file. Validated to be > 0 and ≤ MAX_PACKAGE_BYTES. |
sha256 | Lowercase 64-character hex SHA-256 digest of the NPKG file. |
AppUpdateClient
dev.tates.nebula.AppUpdateClient
AppUpdateClient is a package-private utility class that checks for newer Nebula Launcher releases and downloads verified update APKs. Before returning the downloaded file, it validates the package name, version code, and APK signing certificate against the currently installed application.
Methods
GET https://api.nebulaau.space/updates/app and parses the JSON response (up to 64 KiB). Validates success: true and formatVersion: 1. If app.available is true and the response’s versionCode is strictly greater than the currently installed version code, returns a populated Release object. Returns null if the installed version is already current or if app.available is false.
Used to retrieve the currently installed version code for comparison.
release.downloadUrl into the app’s cache directory, verifies the SHA-256 digest and byte count, and then calls PackageManager.getPackageArchiveInfo on the downloaded file to confirm:
- The
packageNamematches the running application’s package name. - The APK’s
versionCodematchesrelease.versionCodeand is newer than the installed version. - The APK’s signing certificates match the signing certificates of the installed application.
File on success. Deletes the partial file and re-throws on any failure.
Used to locate the cache directory and to read the installed application’s package info.
The
Release object returned by check, carrying the URL, expected size, and expected SHA-256 hash.Optional progress callback. May be
null. Called with phases "Downloading", "Verifying download", and "Ready to install".Release
| Field | Description |
|---|---|
versionCode | Android version code of the available release. |
versionName | Human-readable version string (e.g. "1.4.0"). |
notes | Release notes or changelog text. May be empty. |
downloadUrl | HTTPS URL pointing to the APK, restricted to api.nebulaau.space. |
size | Declared byte size of the APK. Must be > 0 and ≤ 256 MiB. |
sha256 | Lowercase 64-character hex SHA-256 digest of the APK. |
GameCompatibility
dev.tates.nebula.GameCompatibility
GameCompatibility is a utility class (non-instantiable) that encodes the Among Us version this build of Nebula supports and provides helpers for checking a device’s installed game version. Both the version name and the version code must match exactly; a correct name with an incorrect code is not accepted.
Constants
PackageManager and to validate NPKG manifests.
2026.6.5 as the package version name for the same build.
REQUIRED_VERSION. A package whose version name matches but whose version code differs is rejected.
Methods
true if and only if both getVersionName(packageInfo).equals(REQUIRED_VERSION) and getVersionCode(packageInfo) == REQUIRED_VERSION_CODE. Any mismatch returns false.
PackageInfo for the installed Among Us application, obtained via getPackageInfo.installedVersion against REQUIRED_VERSION using dot-separated numeric segment comparison and returns a verb phrase for use in user-facing messages:
| Comparison result | Return value |
|---|---|
| Installed version is newer than required | "downgrade" |
| Installed version is older than required | "upgrade" |
| Version names are equal (but code differs) | "install the supported build of" |
The version name string from the installed Among Us
PackageInfo.PackageInfo for packageName. Uses PackageInfoFlags on Android 13 (TIRAMISU) and higher; falls back to the integer-flag overload on older versions. Throws NameNotFoundException if the package is not installed.
Used to obtain a
PackageManager instance.The package name to query (typically
AMONG_US_PACKAGE).packageInfo.versionName trimmed of surrounding whitespace. Returns an empty string if versionName is null.
long. Uses getLongVersionCode() on Android 9 (Pie, API 28) and above; casts the int versionCode field on older versions.
FusionConfig
dev.allofus.fusioncore.FusionConfig
FusionConfig is a plain data object that Nebula constructs and passes to the FusionCore native runtime when launching Among Us. It tells the runtime where to find game libraries, the .NET runtime, BepInEx, Unity data, and the application’s own library directory.
Fields
.so files) are located.
true, FusionCore uses the libunity.so bundled with the game rather than its own replacement. Set based on the detected Unity version and runtime compatibility.