# How to Update Universal Android Debloater Next Generation: 3 Methods Explained

> Learn how to update Universal Android Debloater Next Generation using three methods: automatic self-update, manual refresh, or by building from source. Keep your debloater current.

- Repository: [Universal-Debloater-Alliance/universal-android-debloater-next-generation](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation)
- Tags: how-to-guide
- Published: 2026-06-18

---

**Universal Android Debloater Next Generation supports three distinct update mechanisms: automatic self-update (when compiled with the `self-update` feature), manual package list refresh via the `uad update` CLI command, and building fresh binaries from the Rust source code.**

Universal Android Debloater Next Generation (UAD-NG) is an open-source Rust application in the `Universal-Debloater-Alliance/universal-android-debloater-next-generation` repository for removing bloatware from Android devices. Keeping the tool current ensures you have the latest debloat package definitions and security patches. This guide explains how to update Universal Android Debloater Next Generation using the actual implementation found in the source code.

## Method 1: Automatic Self-Update (Binary Replacement)

### How the Self-Update Mechanism Works

When compiled with the `self-update` feature flag, UAD-NG queries the GitHub Releases API to detect newer versions. The core logic resides in [`crates/uad-core/src/update.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/crates/uad-core/src/update.rs). The application compares your current version against the latest tag from `https://api.github.com/repos/Universal-Debloater-Alliance/universal-android-debloater/releases/latest`.

If a newer release exists, the appropriate platform-specific asset (e.g., `uad-ng-linux`, `uad-ng-macos`, or `uad-ng-windows.exe`) is downloaded via `download_file`. The `download_update_to_temp_file` function handles the download to a temporary location, while the `rename` helper performs an atomic file swap with retry logic for permission-denied errors. The update status is tracked through the `SelfUpdateStatus` enum and displayed in the GUI.

The GUI code in [`crates/uad-gui/src/gui.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/crates/uad-gui/src/gui.rs) invokes this flow when you click "Check for updates":

```rust
if cfg!(feature = "self-update") {
    match uad_core::update::get_latest_release() {
        Ok(Some(release)) => {
            let (new_path, old_path) = uad_core::update::download_update_to_temp_file(
                uad_core::update::BIN_NAME,
                release,
            ).await?;
            uad_core::update::rename(new_path, old_path)?;
        }
        _ => log::info!("No newer release found"),
    }
}

```

### Building with Self-Update Support

To enable automatic updates, compile the binary with the `self-update` feature:

```bash
cargo build --release --features self-update

```

The resulting executable at `target/release/uad-ng` (or `uad-ng.exe` on Windows) will include the self-update capability.

## Method 2: Update Package Lists (Debloat Data)

### Using the CLI Update Command

To refresh the debloat package definitions without reinstalling the binary, use the built-in CLI command:

```bash
uad update

```

On success, the output displays:

```

Updating UAD package lists from remote repository...
✓ Successfully updated package lists

```

### Implementation Details

The `update_lists` function in [`crates/uad-cli/src/commands.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/crates/uad-cli/src/commands.rs) (lines 55-69) calls `load_debloat_lists(true)`, where the boolean flag forces a network fetch. The function downloads [`resources/assets/uad_lists.json`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/resources/assets/uad_lists.json) from the remote repository to your local cache. If the network request fails, the system automatically falls back to the cached version and logs an error.

## Method 3: Build Fresh from Source

For a complete manual update, clone the repository and compile the latest code:

```bash
git clone https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation.git
cd universal-android-debloater-next-generation
cargo build --release --features self-update

```

This produces a new executable at `target/release/uad-ng` containing the latest code, dependencies, and self-update logic.

## Summary

- **Automatic self-update**: Requires building with `--features self-update`; uses [`crates/uad-core/src/update.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/crates/uad-core/src/update.rs) to download and atomically swap binaries from GitHub Releases when triggered via the GUI.
- **Package list refresh**: Run `uad update` to fetch the latest [`uad_lists.json`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/uad_lists.json) via the `update_lists` function in [`crates/uad-cli/src/commands.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/crates/uad-cli/src/commands.rs).
- **Manual build**: Compile from source with `cargo build --release` to create a fresh binary with the latest code and embedded package lists.

## Frequently Asked Questions

### Does UAD-NG update itself automatically?

No, automatic updates only occur if you explicitly trigger the update check from the GUI or build the binary with the `self-update` feature. The application checks the GitHub Releases API and downloads the appropriate asset only when requested.

### Where are the debloat package lists stored?

The updated lists are cached locally after running `uad update`. The source JSON lives at [`resources/assets/uad_lists.json`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/resources/assets/uad_lists.json) in the repository, which the `load_debloat_lists` function fetches during the update process.

### What happens if the update download fails?

If the network request fails during `uad update`, the application falls back to your locally cached package lists and prints an error message. For self-updates, the `rename` function in [`update.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/update.rs) includes retry logic to handle permission-denied errors during the atomic file swap.

### Can I update UAD-NG without Rust installed?

Yes, if you downloaded a pre-built release with self-update support, you can update the binary through the GUI's "Check for updates" button. However, updating package lists requires the `uad` CLI binary. Without Rust installed, you must manually download new releases from GitHub to update the application itself.