Changelog / format versions
redotcom/docs/specs/2026-10-25-pack-framework.md, redotcom/packages/creator-contracts/src/packs.ts, redotcom/packages/creator-contracts/src/rules.ts, redotcom/packages/viewer/src/console/adapters/mods.ts, redotcom/packages/viewer/src/packs/pagePacks.ts, redotcom/packages/viewer/src/packApplyOverlay.ts, redotcom/tools/hdPackThunderstore.tsThe pack formats and the contract versions, newest first, each with what it does today.
Status: Format only. The current format, s2u-pack version 2, is checked and stored but not applied in the game.
The earlier formats below each keep their own status, given with each entry; they are the ones a player can see work
today, loaded in Home > Experiments > Mods.
The current versions
Read from the pack contract's code. A pack names the engine contract it needs in its contract range; the build
publishes its own version, and a pack whose range does not include it is refused (pack.CONTRACT_MISMATCH).
| name | value | what it is |
|---|---|---|
PACK_FORMAT | s2u-pack | The format every v2 manifest names. |
PACK_FORMAT_VERSION | 2 | The formatVersion every v2 manifest names. |
ENGINE_CONTRACT_VERSION | 0.1.1 | The engine contract this build publishes. |
RULES_PACK_CONTRACT_FLOOR | 0.1.1 | The lowest engine contract a rules pack may admit. It stays 0.1.1 when the engine contract moves on. |
RULES_VOCABULARY_VERSION | 0 | The version of the rules vocabulary (events, conditions, actions). |
PACK_TARGET_US | SCUS-97275 | The disc revision a pack's target names. |
How the engine contract moves: under the caret ranges the project uses, ^0.1.0 takes any 0.1.x. An addition that
breaks no existing pack raises the last number, so older packs keep loading; a change that would break packs raises
the middle one.
History
Newest first. Dates are when the change landed in the code.
2026-11-07 -- Home > Experiments > Mods, and texture packs on every page
One loader for every earlier format: Home > Experiments > Mods. Drop a zip, a folder or loose files, or choose a
file; each pack is listed with its kind, its size (an HD pack's decoded) and where it applies, with a switch and
Remove; one texture pack is chosen at a time. A pack wrapped in Thunderstore's package format is unwrapped and read as
the pack inside. Texture packs and HD texture packs now apply on every page -- the main game's matches, online ones
included, its menus, the Forge and the test room -- under the MODERN and PS2 pictures, at once, behind an "Applying
pack... n/N" overlay. Removed: VIDEO MODE's "HD (GoE Soul)" picture, the test room's HD switch, and its texture-pack
chooser and "Import pack (.zip)" button; the test room's mods panel is one line and Reload map. A temporary "Add test
HD texture pack" button downloads the project's test HD pack until the pack is on Thunderstore. The project's tool for
the HD pack (tools/hdPackThunderstore.ts) can write it as a Thunderstore package.
Today: works -- texture packs and HD texture packs on every page; data mods and the model pack in the test room
only. See Testing a pack locally.
2026-10-31 -- HD texture packs import from a zip
The test room's "Import pack (.zip)" took an HD texture pack and kept it in this browser only, one pack at a time. An earlier-format pack, not a v2 one. Until 2026-11-07 it was held: imported and stored, drawn nowhere. Today: works -- dropped into Home > Experiments > Mods (the test room's button is gone), chosen there, drawn on every page. See The earlier formats.
2026-10-27 -- Thunderstore's package format, and the rules-pack checks
- The store's root files (
manifest.json,icon.png,README.md, optionalCHANGELOG.md) may sit beside a v2 pack'ss2u-pack.json, outside the pack's identity. New codepack.STORE_FILEfor afilesrow that names one. - The store's rules held as data (
THUNDERSTORE_PACKAGE_RULES), the export mapping our id and version onto the store's, and a store package check, with thestore.codes. - A
rulespack must not admit an engine before 0.1.1 (pack.CONTRACT_FLOOR); its rules members must be JSON objects (pack.RULES_MEMBER_INVALID) whose capabilities agree with the manifest's handler claims (pack.CAPABILITY_MISMATCH). - A v2 pack can be imported: checked and stored. The import also reads
.md,.gltf,.ktx2,.oggand.wavmembers for v2 packs.
Today: format only for a v2 pack. Nothing builds a store package from a v2 pack, the project's store team is not decided yet, and the game loads nothing from the store; Home > Experiments > Mods reads a Thunderstore zip of an earlier-format pack you downloaded yourself. See Thunderstore.
2026-10-27 -- the rules vocabulary, version 0; engine contract 0.1.0 to 0.1.1
The events, conditions and actions a rules pack may use, frozen as data, with their budgets
(RULES_VOCABULARY_VERSION 0). Because the vocabulary is an addition, the engine contract moved from 0.1.0 to 0.1.1,
the last number, so packs written for ^0.1.0 keep loading. (The contract's first draft of this change said 0.2.0; it
was corrected to 0.1.1 the same day.) A rules pack states ^0.1.1.
Today: rules packs run in the Forge's local Play only, and the Forge is paused. See
Rules and limits.
2026-10-26 -- options on a handler claim
A handlers claim may carry options: plain JSON data for the claimed handler, its size and nesting bounded by the
contract (PACK_HANDLER_OPTIONS_BYTES_ADAPTATION, PACK_HANDLER_OPTIONS_DEPTH_ADAPTATION), its content checked by the
handler.
Today: format only.
2026-10-25 -- s2u-pack version 2
The v2 pack: a manifest, s2u-pack.json, with an id, a SemVer version, a target, an engine contract range, kinds
(content, rules, system), sides, dependencies, a sha256 and size for every file, intents and handler claims; the
pack hash as the pack's identity; the bounds; the pack. refusal codes; and one model of findings and reports. Engine
contract 0.1.0. The three earlier formats are read through adapters as v2 content packs, so one checker covers them
all.
Today: format only -- checked and stored, never applied.
2026-10-20 -- the model pack (s2u-model-pack version 1)
A folder or zip with models.json and GLB files, drawing a GLB in place of one of the game's meshes. Collision stays
the game's.
Today: test room only, with modmodels in the page's address; added and switched in Home > Experiments > Mods.
2026-10-18 -- s2u-mod version 1
A zip or folder with mod.json, replacing files of the game's data with your own bytes, chosen in the test room's mod
panel. The bytes are substituted, never run.
Today: test room only, added, ordered and switched in Home > Experiments > Mods. Refused in a lobby match and in the
replay viewer.
2026-10-08 -- texture packs (s2u-local-texture-pack version 1)
Replacement images for one map's opaque textures, served from a local folder the repository never holds. They change the colour of solid texels only, never how anything is drawn. Today: works on every page, on its own map, chosen in Home > Experiments > Mods.
Not yet in any version
- JSON Schema files for editors.
- A command that builds a Thunderstore package from a v2 pack.
- Applying a v2 pack in the game, pack code of any kind, a pack's own audio in play, and packs in online matches.