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
- Developer Portal → your game → Addressables → Enable
- Copy the Remote Load Path shown there
Unity build settings
Set these before you build the base game:
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:
status is passed, failed, skipped, or info. Only failed refuses.
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:
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:
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: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.
Limits
Split a larger set across several
upload-batch and register-batch calls, then publish
once at the end.
Caching
Catalog files are served withno-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.
