---
title: Download and Apply Updates
description: Manually control the Live Update lifecycle in your Capacitor or Cordova app — fetch, download, stage, and reload bundles for custom update flows.
---

# Download and Apply Updates

For full control over the update process, the Live Update SDK exposes the individual steps of the update lifecycle:

1. **`fetchLatestBundle()`** — check for updates without downloading them.
2. **`downloadBundle()`** — download a bundle without applying it.
3. **`setNextBundle()`** — set a bundle as the one to apply on the next launch.
4. **`reload()`** — apply the new bundle immediately.

!!! warning "Disable automatic updates"

    When handling updates manually, set `autoUpdateStrategy` to `none` (or leave it unset) to prevent conflicts with the automatic update mechanism. See [Choose an update strategy](update-strategies.md).

## Check for updates

Check for a new bundle without downloading it:

=== "Capacitor"

    ```typescript
    import { LiveUpdate } from "@capawesome/capacitor-live-update";

    const result = await LiveUpdate.fetchLatestBundle({ channel: "production" });
    if (result.bundleId) {
      console.log("New update available: " + result.downloadUrl);
    }
    ```

=== "Cordova"

    ```javascript
    const result = await cordova.plugins.LiveUpdate.fetchLatestBundle({ channel: "production" });
    if (result.bundleId) {
      console.log("New update available: " + result.downloadUrl);
    }
    ```

This returns information about the latest bundle, including its ID and download URL. Pass the `channel` to check a specific channel — see [Subscribe to a Channel](channel-subscription.md) for the available options.

## Download an update

Download a bundle — the SDK extracts the files and moves them into place:

=== "Capacitor"

    ```typescript
    import { LiveUpdate } from "@capawesome/capacitor-live-update";

    await LiveUpdate.downloadBundle({ bundleId, url });
    ```

=== "Cordova"

    ```javascript
    await cordova.plugins.LiveUpdate.downloadBundle({ bundleId, url });
    ```

## Apply an update

Stage a downloaded bundle as the next one to load:

=== "Capacitor"

    ```typescript
    import { LiveUpdate } from "@capawesome/capacitor-live-update";

    await LiveUpdate.setNextBundle({ bundleId });
    ```

=== "Cordova"

    ```javascript
    await cordova.plugins.LiveUpdate.setNextBundle({ bundleId });
    ```

To apply it immediately instead of on the next launch, call `reload()`:

=== "Capacitor"

    ```typescript
    import { LiveUpdate } from "@capawesome/capacitor-live-update";

    await LiveUpdate.reload();
    ```

=== "Cordova"

    ```javascript
    await cordova.plugins.LiveUpdate.reload();
    ```
