Skip to main content
Addressables let you change remote content — levels, art, balance data — without publishing a new base build. You upload the catalog and bundles once, publish them, and players pick them up on their next catalog check. Addressables are supported for WebGL only.
Addressables go live as soon as you publish them. There is no review step — unlike base builds, which wait for a SusaPlay reviewer. Instead, SusaPlay checks every publish against your live build and refuses content that would break it, and you can roll back to an earlier release.

Enable Addressables

  1. Developer Portal → your game → Addressables → Enable
  2. Copy the Remote Load Path shown there
Enabling is a one-time setup step and is only available in the portal.

Unity build settings

Set these before you build the base game:
The Remote Load Path is baked into the WebGL build. If it is wrong when you build, no bundle upload can fix it for players who already have that build — you have to publish a new base build.
A binary catalog is the default in Addressables 2.x, which runs on Unity 6: leave Enable Json Catalog off in the Addressable Asset Settings. Addressables 1.x writes a JSON catalog, which SusaPlay refuses. If you stay on Unity 2021.3 or 2022.3, use Addressables 1.21.3 or later and add ENABLE_BINARY_CATALOG to the WebGL Scripting Define Symbols in Player Settings, then rebuild both the player and the content. Bundle Naming Mode matters because uploaded bundle filenames must carry Unity’s 32-character lowercase hash, such as remote_mainmenu_scenes_all_8a60300e1ab74f60538aa6bf690bc976.bundle. That hash is also how SusaPlay knows a bundle has not changed.

File requirements

A publishable set is exactly one catalog hash, exactly one catalog bin with the same version suffix, and at least one bundle. Mixing catalog files from two different builds is rejected — that pair is what tells Unity which bundles to load.

Upload from the Developer Portal

Developer Portal → your game → Addressables, then drop your whole Addressables output folder onto the upload area. The portal picks out the catalog pair and every .bundle, ignores everything else, uploads them in parallel with per-file progress, and skips any bundle SusaPlay already has. Click Review and publish to see what the publish would change — files added and removed, the catalog version, and each compatibility check. Click Publish to make it live. If a check fails, the portal shows why and offers no publish button.

Upload from CI

The same three shapes work with your developer API key. Sign the whole set in one call, upload the files, then register them.

1. Sign the batch

fileType is optional — SusaPlay infers it from the filename. The response holds an uploads array with one signed uploadUrl per file, and a reused array listing bundles you should not send because SusaPlay already has them.

2. Upload each file

PUT each uploadUrl with the Content-Type given alongside it. URLs are valid for 20 minutes. Skip everything under reused.

3. Register and publish

register-batch reports what it recorded, what it reused, and anything missing because its upload never arrived. publish promotes the whole staged set to live and returns the new releaseNumber, publishedFiles, changedFiles, unchangedFiles, removedFiles, the catalogVersion now serving, and deletedReleases — older releases that can no longer be restored (see Releases). To review before you publish, see Plan a publish first.
Enabling Addressables and deleting staged files stay in the portal. Your API key covers uploading, registering, publishing, and rolling back. Uploading and registering need the addressables:write permission, as does planning (dryRun); publishing and rolling back need addressables:publish.

Only changed bundles move

A bundle filename contains its content hash, so a bundle whose name already exists in your live set holds the same bytes. SusaPlay skips the upload and keeps the file it has. On a typical incremental Addressables build only the catalog pair and the few bundles you touched are transferred and re-cached, which is why publishing is fast even for a large set. A file that is live but absent from your new set stops reaching players when you publish. Publish the complete set every time, not just the changed files.

Releases

Every publish creates a release, numbered 1, 2, 3 and so on for each game. A release is the catalog pair and the bundles it names. SusaPlay keeps the three newest releases plus the live one; publishing deletes older releases, and their files once no kept release uses them. The portal lists the kept releases under Addressables → Releases, newest first, with the date, the catalog version, the file count and size, and the build that was live when each was published. GET /catalog/game/{gameId}/addressables returns the same list as releases, with liveReleaseId and operationInProgress. If you published Addressables before releases existed, your current live set becomes release 1 on your next publish, so you can roll back to it.

Compatibility check

Before a publish or a rollback changes anything, SusaPlay reads the catalog and checks it against your game’s live build: If your game has no live build yet, C1 and the check for bundles inside the build are skipped. A failed check refuses the request with 409 INCOMPATIBLE_CATALOG. Nothing changes, and your live content keeps serving. error.compatibility holds the result:
Each check’s status is passed, failed, skipped, or info. Only failed refuses.
Most failures come from building the content with different settings than the live build — a different Remote Load Path, or a group switched between local and remote. Build the content from the same project and profile as the live build, or publish a new build first.
If you believe a check is wrong, contact SusaPlay support.

Plan a publish first

Send "dryRun": true to see what a publish would do without changing anything:
The response holds the plan: A dry run answers 200 even when a check fails — read compatibility.compatible. Send the expected values back exactly as the plan returned them: expectedLiveReleaseId is a string, such as "4", or null if your game has no release yet. To publish exactly what you reviewed, send the two expected values back:
If the live release or the staged files changed since the plan — someone else published, or uploaded another file — the publish is refused with 409 CONFLICT. Plan again. Only one publish or rollback runs per game at a time. A second one gets 409 OPERATION_IN_PROGRESS; wait a few minutes and try again.

Roll back

Rolling back makes a kept release live again. Use it when a publish passed the checks but the content is wrong — a bad level, broken balance data. In the portal: Addressables → Releases, then Roll back to this release on the release you want. The portal shows the same review as a publish, then rolls back. From CI, plan first, then roll back:
With dryRun, the response is the plan: filesAdded, filesRemoved, filesChanged, filesUnchanged, catalogVersion, compatibility and expectedLiveReleaseId. The real rollback answers with releaseNumber, fromReleaseNumber, catalogVersion, fileCount, and compatibility. A rollback:
  • is checked against your current live build, like a publish. A release built for an older build may fail C1–C3 if you have since published a new build;
  • creates no new release, so undoing it is another rollback, to the newer release. The release you roll away from stays only if it is among the three newest;
  • leaves your staged files untouched.
It is refused when:

Limits

Split a larger set across several upload-batch and register-batch calls, then publish once at the end.

Caching

Catalog files are served with no-cache, so a published catalog reaches players immediately. Bundles are immutable and cached for a year at the edge — safe, because a changed bundle gets a new filename.

If your content is suspended

SusaPlay can suspend a game’s Addressables — a kill switch for broken or unsafe remote content. While suspended, player requests that are not already cached at the edge fail, and the base build keeps running. The portal shows the reason. Uploading and publishing are blocked until an admin reinstates it.

Troubleshooting