> For the complete documentation index, see [llms.txt](https://gamelauncher.cloud/help/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://gamelauncher.cloud/help/applications/upload-builds/build-patching.md).

# How Patching Works

What happens to your build after you upload it, and why updates are small

You upload a full ZIP every time, but your players almost never download a full game again. This page explains what the platform does in between.

{% hint style="info" %}
Everything here is automatic. There is nothing to configure and nothing to change in your game.
{% endhint %}

***

## Build Processing Stages

Every build goes through the same pipeline:

1. **⬆️ Uploading:** file upload to cloud storage
2. **⬇️ Downloading:** server retrieves the file
3. **📦 Unzipping:** extracting build contents
4. **🔧 Creating Patch:** comparing against the previous build and generating delta patches
5. **✅ Completed:** build is ready for distribution

**Processing time** (depends on build size and file count)

* Small builds (under 1 GB with about 500 files): 5 to 30 seconds
* Medium builds (1 to 5 GB with about 1,000 files): 3 to 5 minutes
* Large builds (5 to 50 GB with about 25,000 files): 5 to 25 minutes

***

## Delta Patching

Game Launcher Cloud compares your new build with the previous one and ships only the difference.

```mermaid
graph LR
    A[Build #1<br/>1.5 GB] --> C[Delta Patch<br/>150 MB]
    B[Build #2<br/>1.6 GB] --> C
    C --> D[Player<br/>Downloads<br/>Only 150 MB]

    style C fill:#10b981,stroke:#333,stroke-width:2px,color:#fff
    style D fill:#667eea,stroke:#333,stroke-width:2px,color:#fff
```

**Benefits:**

* **90% smaller downloads** on average
* **Faster updates** for players
* **Lower bandwidth costs**
* **Automatic**, no configuration needed

{% hint style="success" %}
**Example:** if you change 100 MB in a 5 GB game, players download 100 MB instead of the full 5 GB.
{% endhint %}

***

## Smart Bundles

Games with thousands of tiny files pay a heavy per-file overhead when downloading. Smart Bundles group small files into optimized packages during patch generation.

```mermaid
graph LR
    A[Many Small Files] --> B[Smart Bundling]
    B --> C[Optimized Packages]
    C --> D[Faster Downloads]

    style A fill:#ef4444,stroke:#333,stroke-width:2px,color:#fff
    style D fill:#10b981,stroke:#333,stroke-width:2px,color:#fff
```

**How it works:**

1. **Analysis:** the system identifies small files (under 5 MB)
2. **Bundling:** groups related files into optimized packages
3. **Compression:** applies efficient compression
4. **Distribution:** the launcher downloads and extracts bundles seamlessly

**Example impact:** a **1.16 GB** game with **309 files** becomes **1.07 GB** with only **5 files** to download.

**Cost:** about 20% additional storage during patch generation, in exchange for much faster downloads for your players.

{% hint style="info" %}
**Availability:** Smart Bundles apply to newer builds. Older builds keep using standard patching without issues.
{% endhint %}

***

## File Verification (xxHash64)

Every file is verified with **xxHash64**, which is 10 to 20 times faster than MD5. That means quicker patch generation on the server and shorter verification times for players during updates.

* ✅ **Backward compatible:** old patches created with MD5 keep working
* ✅ **Automatic detection:** the launcher knows which algorithm each patch uses
* ✅ **Nothing to do:** no action needed from you or your players

***

## Excluding Files from Patches

Log files, caches and user data do not belong in a patch. You can exclude them per application in **App Settings → Build & Patch → Ignored Paths**, and the rules apply to every future build.

Full syntax, defaults and limits: [Ignore Paths](/help/extensions/cli-releases/cli-builds.md#ignore-paths).

***

## Best Practices

### 🎯 Keep builds small

* Remove source code, temp files and development tools
* Compress textures and audio appropriately
* Use your engine's compression settings
* Test the build locally before uploading

### 🔄 Release safely

* Upload to a Staging environment first
* Test thoroughly before promoting to Production
* Keep build notes detailed, players read them
* Schedule big updates during off-peak hours

***

## Next Steps

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>📦 Upload Builds</strong></td><td>Back to the upload guides</td><td><a href="/help/applications/upload-builds.md">Upload Builds and Patches</a></td></tr><tr><td><strong>🌍 Environments</strong></td><td>Test in Staging before going to Production</td><td><a href="/help/applications/environments.md">Environments</a></td></tr><tr><td><strong>⚙️ Application Settings</strong></td><td>Ignored paths and other per app options</td><td><a href="/help/applications/app-settings.md">Application Settings</a></td></tr></tbody></table>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://gamelauncher.cloud/help/applications/upload-builds/build-patching.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
