---
title: "Delta Updates (zsync)"
description: "Save bandwidth by downloading only changed bytes with zsync and segmented downloads."
---

fp-appimage-updater provides two independent features to reduce download size and speed up updates: zsync delta downloads and segmented (parallel range) downloads.

<Note>
  These two features are complementary. zsync re-uses bytes from a previous local version to reconstruct the new file. Segmented downloads split the download into parallel HTTP range requests to speed up the initial fetch. You can use either or both.
</Note>

## zsync (delta downloads)

zsync downloads only the blocks that have changed between your locally installed AppImage and the new version, significantly reducing bandwidth for incremental updates. fp-appimage-updater handles this through its built-in `zsync-rs` backend, so you do not need a separate system `zsync` package.

The delta path is automatic when the recipe enables it and a local AppImage is available.

### Enable per app

Set `zsync: true` in an app recipe to derive the `.zsync` URL from the resolved download URL:

```yaml
name: myapp
zsync: true
strategy:
  strategy: forge
  repository: https://github.com/example/myapp
  asset_match: "myapp-*.AppImage"
```

If you know the `.zsync` URL directly, provide it as a string:

```yaml
name: myapp
zsync: "https://example.com/myapp.AppImage.zsync"
strategy:
  strategy: direct
  url: "https://example.com/myapp.AppImage"
  check_method: etag
```

What happens during a zsync update:

1. fp-appimage-updater looks for the previously installed AppImage path in its local state.
2. It builds the `.zsync` URL from the resolved download URL, or uses the explicit URL you provided.
3. It runs the built-in zsync backend against the old file and a temporary output file.
4. If that succeeds, it renames the temporary file into place.
5. If it fails, or if no local AppImage exists yet, it falls back to the normal download path.

## Segmented downloads (HTTP ranges)

Segmented downloads split large files into parallel HTTP range requests, which speeds up downloads from servers that support the `Range` header. This feature is enabled by default.

### Disable globally

To turn off segmented downloads for all apps, set the following in `config.yml`:

```yaml
segmented_downloads: false
```

### Override per app

You can override the global setting for a specific app:

```yaml
name: myapp
segmented_downloads: false
strategy:
  strategy: direct
  url: "https://example.com/myapp.AppImage"
  check_method: etag
```

To check whether a server supports range requests for a given app, run `fp-appimage-updater check`. The output includes range support hints for direct-download apps.
