Fastlanepatch CDN

Documentation

Integrate the SDK, publish from CI, and decide how polite the peer layer should be.

SDK

py
#include <fastlane.h>

fl_ctx *ctx = fl_init("atlas", "live", FL_PLATFORM_WIN64);
fl_set_bandwidth_cap(ctx, 0);          /* unlimited while idle */
fl_set_peer_enabled(ctx, true);

fl_update_handle *u = fl_update_begin(ctx, "2026.8.1");
while (fl_update_poll(u, &progress) == FL_RUNNING) {
    ui_set_progress(progress.stage, progress.fraction);
}
fl_update_commit(u);   /* atomic */

Progress and UI

Report four stages separately: manifest, download, verify, apply. Players read a single bar that pauses as a hang; four labelled stages cut our customers' support load noticeably.

Chunking

Run it in CI, on the same artefact you ship. Chunking is deterministic, so two builds from the same inputs produce identical chunk sets.

Branches

bash
fastlane publish --branch live      --version 2026.8.1
fastlane publish --branch ptr       --version 2026.9.0-rc2
fastlane publish --branch beta-ab   --version 2026.8.1 --cohort 5%

Pre-seeding

Push the chunk set to the edge and allow launchers to download before unlock. Set the unlock time and the patch becomes applicable at that instant, with no download.

Pre-seeding is the single biggest lever on release-day experience. Aim to have 50–70% of players pre-downloaded; beyond that the marginal benefit falls off and the storage on player machines starts being noticed.

Peer policy

json
{
  "peer": {
    "enabled": true,
    "upload_cap_kbps": 4096,
    "pause_while_playing": true,
    "disable_on_metered": true,
    "opt_out_respected": true,
    "max_peers": 24
  }
}

Telemetry

Per-stage timings, failure reasons and peer efficiency, delivered to your own sink. No player identifiers leave the client — the install ID is rotated per title and per update.