Skip to main content
A PackSet is the unit of Grounds asset distribution. It binds the ordered ZIP stack, JVM catalog, Minecraft compatibility, integrity hashes, and source provenance into one validated manifest. Consumers select a channel or an immutable release, rather than constructing a stack of unrelated URLs. For an introduction to individual packs, contributions, catalogs, and their relationship to scenes, read the content concepts.

Pack order and ownership

grounds-global contains grounds-content first and grounds-platform second. The later platform pack has higher client priority. The order is part of the contract; preserve it when building an Adventure request.

Four identities to keep separate

An asset catalog pin is exact. A runtime compiled against resourcepacks-catalog:1.0.0 does not automatically acquire a different catalog because the client receives a newer ZIP. The action catalog has its own independent revision and Maven artifact.

Distribution layout

The CDN origin is https://cdn.grounds.gg:
A channel document is mutable; a release/build directory is immutable. The channel binds a sequence and publication target to a manifest URL, exact SHA-256, and size. Stable targets releases; Edge targets builds. Reused Edge pack URLs may refer to earlier builds only when the final pack hashes and size match; the catalog and manifest remain current-commit objects.

Manifest schema

Manifest schema is 2. Config and scene schema numbers are separate. SHA-1 is the Minecraft delivery hash. SHA-256 and sizes bind distribution/catalog bytes. A fixed UUID identifies each logical pack; it is not a unique request ID or release identity. The JVM contract rejects noncanonical JSON, duplicate keys, invalid field/type/value combinations, and mismatched origins/publication roots. The resolver checks the expected target, manifest hash/size, and requested source before accepting state. Do not hand-edit a published manifest or treat a hash as permission to accept an arbitrary URL.

Channel and pin semantics

With source.pin absent or null, the plugin follows source.channel. A release pin overrides the channel but retains that channel in the document for use when the pin is cleared. Release IDs are canonical v<major>.<minor>.<patch> without prerelease suffixes; the Portal/Forge request uses the version without v. A channel switch clears a pin. A release pin does not advance Stable or Edge. A rollback selects an older compatible immutable release; it does not overwrite CDN objects.

Minecraft compatibility

Current product/contract baseline is Minecraft 26.3, pack format 97. Forge can inspect historical manifests, but its Stage selection mutation rejects release pins with a different Minecraft version or format. For example, a 26.2/88 publication is inspectable but cannot be pinned through the current Stage selector.
Publication, configuration, proxy resolution, and client acceptance are four distinct states. A successful publish does not activate the product; a successful selection write does not prove every player has accepted it.
Continue with build/publication, client API, Velocity configuration, and operator UI.

Implementation sources

Verified against the main-branch source on October 14, 2026.