February 17, 2026

Merge Builds, Environment Management CLI, Remove Files with File Preview, Build File Viewer in Dashboard, Local Checksum Cache & Segmented Verification, Link Only Mode, Per-Instance Launch Argument Ov


Merge Builds

🔀 Merge Builds — Partial Updates for Large Games

Merge builds are designed for large games where only a small portion of the content changes between updates. Instead of uploading a full 20 GB build, you upload a ZIP containing only the modified files and the system creates a new build with the changes merged in.

How it works:

  1. Select a baseline build — any completed, deployed build (including previous merge builds)

  2. Upload a ZIP with only the changed/new files

  3. The backend copies the baseline content to a new build and applies your changes on top

  4. The result is a new independent build — the baseline stays untouched

  5. Assign the new merge build to an environment when ready

Key benefits:

  • Faster uploads — upload only what changed, not the entire game

  • Same storage — merge builds are full builds with their own R2 content

  • Safe rollback — baseline is never modified, rollback = switch environment back

  • Chainable — merge into a merge build (merge builds are eligible baselines)

  • File removal — optionally remove files from the baseline during merge


🖥️ CLI — Interactive Baseline Selection

When creating a merge build in interactive mode, the CLI fetches eligible builds from the API and presents them in a selection list with detailed build info:

Each build shows:

Field
Description

Build ID

The unique build identifier

(merge) tag

Indicates the build is itself the result of a merge

Version

Patch version (e.g., v1.3)

Environment

Which environment(s) this build is assigned to, or "No environment"

Date

When the build was created

Deployed size

Total size of the deployed patch content

File count

Number of files in the build

Build notes

First 40 characters of the build notes (if any)

Manual fallback — you can always select "Enter Build ID manually" to type an ID directly.

CLI command-line usage:


✂️ CLI — Remove Files from Build

The new remove-files command creates a new build from a baseline with specified files removed, without uploading anything:

Interactive mode — select "✂️ Remove Files from Build" from the main menu:

The interactive flow guides you through app selection, baseline build selection (with the same rich build list), path entry, and optional notes.

Path validation — the CLI validates entered file paths against the actual build files before submitting. Invalid paths are rejected with a clear error message.

Command options:

Option
Alias
Description
Required

--app

-a

Application ID

Yes

--build

-b

Baseline Build ID to remove files from

Yes

--paths

-p

File paths to remove (can specify multiple)

Yes

--notes

-n

Build notes for the new build

No

--no-watch

Don't watch build progress after creation

No


🌍 CLI — Environment Management

The new environments command group lets you manage your app environments without leaving the terminal:

Interactive mode — select "🌍 Manage Environments" from the main menu:

The interactive flow presents a sub-menu with all environment actions:

List environments displays a formatted table:

Column
Description

ID

Environment ID

Name

Environment name

Active Build

Currently assigned build ID, or "None"

Enabled

Whether the environment is active

System

Whether it's a system-managed environment

Access Code

Access code if configured

Assign build — when assigning a build to an environment, the CLI shows a confirmation message:

Delete environment — in interactive mode, only non-system environments are shown. A confirmation prompt is required before deletion.

Subcommand reference:

Subcommand
Options
Description

list

--app, -a (required)

List all environments for an app

create

--app, -a, --name, -n (both required)

Create a new environment

delete

--app, -a, --name, -n (both required)

Delete an environment

assign-build

--build, -b, --environment, -e (both required)

Assign a build to an environment


Dashboard

🎨 Redesigned App Environments Section

IMPROVED - App Environments section and new preview

The environments list now features a cleaner, more informative layout:

Launcher Preview panel — a new sidebar on the right side shows a real-time preview of how the selected environment looks in the launcher:

  • Displays the app banner/logo

  • Shows an Environment dropdown reflecting the selected environment

  • Renders the Play button using the app's actual accent color

  • Includes the settings gear icon just like the real launcher

  • Updates dynamically as you switch between environments


🔄 Merge Builds in Environment Selection

NEW - Merge Build in Dashboard
  • Merge builds are selectable — since they have their own complete content, they can be assigned to any environment

  • Rollback — done by selecting a different build in the environment dialog


🗑️ Remove Files from Build

NEW - Remove Files from Build Dialog
NEW - Build Details Remove File Button

Each completed build now has a "Remove Files" action button (✂️). Clicking it opens a two-panel dialog:

  • Left panel — enter file paths to remove (one per line), optional build notes, and see real-time path validation

  • Right panel — browse all files in the build with search filtering; click any file to add it to the removal list

Features:

  • File preview panel — see every file in the build with size information before deciding what to remove

  • Click-to-add — click any file in the preview to instantly add its path to the removal list

  • Path validation — entered paths are validated against the actual build files in real-time, with invalid paths highlighted

  • Original build untouched — the source build is never modified

  • Creates a new merge build — the result is a full, independent build you can assign to any environment

  • No upload required — the backend copies the baseline content and removes the specified files server-side

Use cases:

  • Remove a deprecated plugin or DLL

  • Clean up legacy assets between versions

  • Remove test files that were accidentally included


📂 Build File Viewer and Revamped Build Details

NEW - Build File Viewer

Each completed build in the build details page now has a "View Files" toggle button. Clicking it expands an inline file viewer showing every file in the build:

  • Search filtering — quickly find files by name or path

  • File size display — see the size of each file

  • File count — total number of files shown in the header

  • Download Raw — link to download the raw VersionInfo.info file

  • No download required — browse the entire build contents without downloading the build


NEW - Link Only Mode for Apps

Link Only Mode is designed for games or apps hosted on external platforms, or any scenario where you want the launcher to redirect users to a URL rather than manage a local installation.

How it works:

  1. Go to App Settings → Platforms and enable Link Only Mode

  2. Enter the destination URL (e.g., your website, a Discord invite)

  3. Optionally customize the Button Text and Status Text from a list of predefined options

  4. The launcher's play button will open the URL in the user's default browser instead of downloading

The Platforms tab now includes a Link Only Mode card with:

  • Toggle switch — enable or disable link-only for each platform

  • URL input — the destination URL that opens when the user clicks play

  • Button Text dropdown — select from 13 predefined button labels (or leave the default "Open")

  • Status Text dropdown — select from 9 predefined status messages displayed below the play button (or "None" for no status text)

  • Live preview — an interactive preview chip showing exactly how the play button will appear in the launcher, including the external link icon and the selected button text

🎯 Per-Instance Launch Argument Overrides

NEW - Instance Argument Overrides

When an app is configured with Multiple Executions, you can now override the global Launch Arguments on a per-instance basis. This is useful for multi-client setups where each instance needs different parameters (e.g., different client slots, screen positions, or server roles).

How it works:

  1. Go to App Settings → Platforms and ensure Multiple Executions is enabled

  2. In the Launch Arguments field, use the {{instance_id}} placeholder to inject the instance number automatically — e.g., -clientIndex {{instance_id}}

  3. For finer control, click "+ Add Override" under Instance Argument Overrides (Primary or Secondary) to define completely custom arguments for a specific instance number

  4. Instances without an override use the global Launch Arguments (with {{instance_id}} resolved)

{{instance_id}} placeholder:

Instance
Launch Arguments
Resolved Value

1

-clientIndex {{instance_id}}

-clientIndex 1

2

-clientIndex {{instance_id}}

-clientIndex 2

3

-clientIndex {{instance_id}}

-clientIndex 3

Instance Argument Overrides:

  • Each override consists of an instance number and a custom argument string

  • Overrides take full priority — the global Launch Arguments are completely replaced for that instance

  • Add and remove overrides dynamically with the "+ Add Override" and delete (✕) buttons

  • Empty overrides are automatically filtered out on save

  • The {{instance_id}} placeholder is also supported inside overrides

Example use case — Unity multi-client:

Instance
Override Arguments

1

-clientIndex 1 -screen-fullscreen 1

2

-clientIndex 2 -screen-fullscreen 0 -screen-width 800

3

-clientIndex 3 -screen-fullscreen 0 -screen-width 800 -popupwindow


Launcher Desktop

File Verification Speed Improvements

File Verification Benchmark - Special thanks to TCG World for allowing us to use the game for this demonstration.

Local Checksum Cache — Skip Re-Hashing Unchanged Files

Previously, every time the launcher verified a game's integrity (on launch, repair, or update check), it had to read and hash every file on disk — even files that hadn't changed since the last check. For large games with thousands of files, this could take minutes.

The new Local Checksum Cache (checksums.json) stores each file's xxHash64 hash alongside its last-modified timestamp and size. On subsequent verifications, the launcher performs a fast metadata check (a stat call taking ~microseconds) instead of re-reading and hashing the entire file (~milliseconds to seconds per file).

How it works:

  1. On first verification, all files are hashed normally and their checksums are stored in the local cache

  2. On subsequent verifications, the launcher checks each file's LastWriteTimeUtc and Size against the cached entry

  3. If metadata matches → the cached hash is reused instantly (cache hit)

  4. If metadata changed or entry is missing → the file is re-hashed and the cache is updated (cache miss)

  5. Stale entries (files removed from the manifest) are automatically pruned

Key details:

Aspect
Detail

Cache location

%LocalAppData%\GameLauncher\Cache\Apps\{gameId}\checksums.json

Hash algorithm

xxHash64

Persistence

Atomic write (temp file + move) to prevent corruption

Error handling

Cache failures are non-blocking — the download flow is never interrupted

Cache pruning

Entries for files no longer in the manifest are automatically removed

Performance impact:

  • First launch: no change (all files must be hashed)

  • Subsequent launches: up to 90%+ faster verification for unchanged files

  • A stat call (~microseconds) replaces a full file-read + hash (~milliseconds to seconds)


Segmented File Verification — Smarter Batch Processing

Previously, the launcher processed each file individually with unbounded parallelism, which could overwhelm the thread pool for games with 20,000+ files. The new Segmented File Verification groups files into logical segments before processing:

  • Bundle segments — files that belong to the same Smart Bundle are grouped together by their BundleId

  • Directory segments — non-bundled files are grouped by their parent directory

This transforms ~20,000 individual file operations into ~100–300 segment-level operations, processed with bounded parallelism based on CPU core count.

How it works:

  1. The FileSegmenter reads the manifest and groups files by bundle or directory

  2. Segments are processed in parallel with MaxDegreeOfParallelism = Environment.ProcessorCount

  3. Within each segment, files are checked sequentially (cache-first, then hash if needed)

  4. Results are aggregated at the segment level

Key benefits:

  • Prevents thread pool starvation — bounded parallelism instead of spawning thousands of tasks

  • Better disk I/O patterns — files in the same directory are read together, improving sequential read performance

  • Bundle-aware — files from the same Smart Bundle are verified as a group

  • Combined with checksum cache — segments with fully cached files complete almost instantly

Additional improvement:

  • File read buffer increased from 4 KB to 64 KB for better disk throughput during hashing


NEW - Link Only Mode

When a game is configured as Link Only, the Desktop launcher:

  • Opens the URL in the user's default browser when the play button is clicked

  • Displays the custom button text — translated to the launcher's language for predefined options, or shown as-is for custom text

  • Shows the custom status text below the play button — also translated for predefined options

  • Auto-scales long text — the play button uses a Viewbox to automatically shrink text that would otherwise overflow

  • Skips all download logic — no verification, no patching, no update checks for link-only apps

  • Supports 7 languages — English, Spanish (MX), Thai, Simplified Chinese, Portuguese (BR), Hebrew, and French


Connection Error Screen

NEW - Connection Error Screen

When the launcher fails to retrieve the launcher manifest from both the API server and the local cache, it now displays a Connection Error screen instead of showing a blank or broken UI.

The screen provides clear troubleshooting steps:

  • Check your internet connection and try again

  • VPN issues — try disabling it or switching to a different country. Some regions (e.g., China, Russia) may have network restrictions; in that case, try using a VPN

  • Firewall or antivirus — make sure it's not blocking the application

  • Run as Administrator — try running the launcher with elevated permissions

  • Contact the launcher administrator if the problem persists

A "Retry Connection" button allows the user to attempt reconnecting without restarting the launcher.


Connection Diagnostics Window

NEW - Diagnostics Window

The new Connection Diagnostics Window is a dedicated tool that runs a comprehensive suite of network checks and presents the results in a clear two-column layout — troubleshooting recommendations on the left, detailed diagnostic results on the right.

7 Automated Checks:

Check
What it tests

Internet

HTTP request to google.com — verifies basic internet connectivity

DNS

Resolves the API hostname — checks DNS resolution and shows resolved IPs

API Health

Calls the API health endpoint — validates the backend is reachable and healthy

CDN

Requests the CDN base URL — confirms CDN reachability and response status

SSL

Validates the API SSL certificate — checks expiration date and issuer

Clock

Compares local time with the API server time — detects clock drift

Firewall

Inspects Windows Firewall rules — checks inbound/outbound rules for the launcher

Smart result display:

  • Each check shows a green ✅ or red ❌ icon with detailed result text (status code, response time, resolved IPs, certificate info, etc.)

  • User-friendly error messages — technical exceptions like "No such host is known" are translated into clear descriptions (e.g., "DNS resolution failed — Could not resolve api.gamelauncher.cloud")

  • The Copy button copies all diagnostic results to the clipboard for easy sharing with support, including raw error details for failed checks

  • A retry counter tracks how many times diagnostics have been run in the current session

Three-state left panel:

  • Running — shows a neutral stethoscope icon with "Connection Diagnostics" while checks are in progress

  • All Passed — shows a green checkmark with "All Checks Passed" when every check succeeds

  • Errors Found — shows the warning icon with "Connection Error" and troubleshooting steps when any check fails

Fix Firewall button — when the firewall check detects blocking rules, a dedicated button appears to automatically fix the Windows Firewall rules for the launcher executable.

Accessible from multiple entry points:

  • Connection Error panel — "Run Diagnostics" button on the main error screen

  • Offline indicator — click the offline status icon in the top navigation bar

  • Launcher Settings — "Run Diagnostics" button in the Launcher settings tab


Per-Instance Launch Argument Resolution

When launching a game configured with Multiple Executions, the Desktop launcher now:

  • Resolves {{instance_id}} — replaces the placeholder with the actual instance number (1, 2, 3, …) for each process

  • Applies per-instance overrides — if the Dashboard defines a custom argument string for a specific instance, it completely replaces the global arguments for that instance

  • Works across all launch paths — normal launch, optimized mode, and multi-instance launch all resolve arguments correctly

  • Smart process detection — when arguments contain {{instance_id}} or per-instance overrides, the launcher matches running processes by executable path only (skipping argument comparison) to avoid false negatives during optimized mode monitoring

Resolution order for each instance:

  1. Check if a per-instance override exists for this instance number → use it as-is (with {{instance_id}} resolved)

  2. Otherwise, use the global Launch Arguments with {{instance_id}} replaced by the instance number


Fixes

🐛 Build Version Not Updating After Game Updates

Some users reported that after updating a game, the version label below the play button still showed the version from the original installation — even after multiple updates.

This was a visual-only bug. The game files were always updated correctly on disk, but the launcher UI was not refreshing the version display after completing a download. This has been fixed so the version label now updates immediately after every download or update finishes.


🐛 Launched Apps Not Closing When Launcher Exits

Previously, when the user closed the launcher (from the tray icon "Exit" menu, the window close button, or a force shutdown), any games that had been launched would continue running as orphaned processes. The launcher only stopped its internal monitoring timers but never terminated the actual game processes.

Now, when the launcher exits through any shutdown path:

  • All monitored game processes are killed along with their entire process tree

  • Monitoring timers are disposed

  • A fallback mechanism retries the kill without the process tree flag if the first attempt fails

  • The cleanup runs in both the normal shutdown (CleanupServices) and the force shutdown (ForceShutdown) paths


🐛 News UI Improvements

  • "Read More" button misalignment — the button was rendering incorrectly in certain layouts; it now displays properly within the news card

  • Default placeholder image — when a news entry has no image configured, a generic default image is now shown instead of a blank or broken area


API

📡 New Endpoint — Merge Candidates

  • Returns completed, deployed builds for an app that can serve as merge baselines

  • Includes environment assignment info (which environments each build is assigned to)

  • Both original and merge builds are included (all completed + deployed builds)

  • Used by the CLI interactive mode and available for third-party integrations


📡 New Endpoint — Remove Files from Build

  • Creates a new merge build from a baseline with specified files removed — no ZIP upload needed

  • Validates permissions, baseline build status, and removed paths

  • Enqueues the merge build job immediately for background processing

  • Used by the Dashboard "Remove Files" dialog and the CLI remove-files command


📡 New Endpoint — Build File List

  • Returns the complete list of files in a deployed build, parsed from VersionInfo.info

  • Each file includes its relative path and size in bytes

  • Used by the Dashboard file viewer, the remove-files dialog for path validation, and the CLI for path validation

  • Requires the build to be in a completed/deployed state


Need Help? Check out our Help Center or join our Discord Community!

Last updated

Was this helpful?