pack_format history

The complete data-pack pack_format version map β€” every format from 4 (1.13) to 107.1 (26.2), the 1.21 folder singularization, the 1.21.9 shift to float formats, and how to pick a format for your target version.

pack_format: data β‰  resource

pack_format is a monotonically increasing version stamp; it bumps whenever the data-pack schema changes in a breaking way. Data packs and resource packs share the style of numbering, but their values diverge.

⚠ Gotcha

Never copy a resource-pack number into a data pack's pack.mcmeta, or vice-versa β€” the two number spaces are versioned independently. For the same Minecraft version they are almost always different numbers. For example, at the 25w31a change, the "keep pack_format if you support older than …" threshold is format 82 for data packs but format 65 for resource packs. Confirm both independently from the Pack format page when authoring a combined pack.

The full pack_format history (data packs)

The numbering has gaps β€” a bump only happens on a breaking schema change, so not every Minecraft version increments it, and some numbers are skipped entirely.

pack_formatMinecraft version(s)Notable change
41.13 – 1.14.4Initial data-pack system
51.15 – 1.16.1Predicates
61.16.2 – 1.16.5Custom world generation (worldgen/)
71.17 – 1.17.1/replaceitem/item
81.18 – 1.18.1Loot-table functions require type
91.18.2/locate syntax change
101.19 – 1.19.3filter section; chat_type
121.19.4Damage types (damage_type/)
151.20 – 1.20.1Sign NBT restructure; predicate renames
181.20.2Function macros
261.20.3 – 1.20.4Strict text-component parsing; overlays era
411.20.5 – 1.20.6Item components replace raw NBT
481.21 – 1.21.1Data-driven enchantments & paintings; folder singularization
571.21.2 – 1.21.3Attribute-ID prefixes removed
611.21.4TNT-minecart field rename
711.21.5Text components are objects in NBT; mob-variant registries
801.21.6Dimension cloud_height; dialog/
811.21.7 – 1.21.8music_disc_lava_chicken
88.01.21.9 – 1.21.10Float format introduced; min_format/max_format
94.11.21.11Non-breaking additions (minor bump)
101.126.1 – 26.1.2Villager trades data-driven
107.126.2(26.2 line)
πŸ“Œ Note

Snapshot formats run ahead of releases (e.g. the mcmeta version dump shows 26.3 snapshots at format 110). Always match the exact target version rather than assuming the next release keeps a snapshot's number.

The 1.21 folder singularization (24w21a → format 48)

Snapshot 24w21a (shipped in 1.21, format 48) renamed every data-pack registry folder from plural to singular. Packs targeting 1.21+ must use singular names; packs targeting ≀ 1.20.6 must use plural. There is no automatic aliasing β€” a plural folder in a 1.21 pack is simply ignored, and vice-versa.

⚠ Gotcha

This is the single most common cause of "my pack does nothing on 1.21" reports. If a pack loads without error but nothing happens, check the folder names first.

≀ 1.20.6 (plural)1.21+ (singular)
functions/function/
structures/structure/
advancements/advancement/
recipes/recipe/
loot_tables/loot_table/
predicates/predicate/
item_modifiers/item_modifier/
tags/functions/tags/function/
tags/blocks/tags/block/
tags/items/tags/item/
tags/entity_types/tags/entity_type/
tags/fluids/tags/fluid/
tags/game_events/tags/game_event/
πŸ“Œ Note

dimension/, dimension_type/, and the worldgen/* folders were already singular before 1.21 and were unchanged by this rename. Newer dynamic-registry folders (enchantment/, damage_type/, mob variants, etc.) are singular by design.

🚧 Workaround

To support both eras, use overlays: put singular folders in base data/ (targeting 1.21+) and a plural-folder copy inside an overlay whose formats/max_format covers ≀ 1.20.6 β€” or ship two separate packs. When porting a pre-1.21 pack, rename all seven top-level folders plus the six tags/ sub-folders. See Pack structure for the overlay mechanics.

Float formats & min_format/max_format (1.21.9+)

Beginning 1.21.9 (25w31a), format numbers gained a minor component and the metadata range fields changed.

⚠ Version differences
  • Since format 88.0 / 1.21.9 (25w31a): pack_format gained a minor component, written as MAJOR.MINOR (e.g. 88.0, 94.1, 101.1). The major part bumps on breaking changes; the minor part bumps on non-breaking additions, so packs can stay compatible across minor increments.
  • Since 25w31a: pack_format became optional for packs that only support format β‰₯ 82.
  • Since 25w31a: supported_formats was replaced by min_format / max_format, taking either an integer or a [major, minor] array (82 ≑ [82] ≑ [82, 0]). The old supported_formats field is kept only for back-compat with < 82 clients.
  • Since the 26.x line: Minecraft's version numbering also went date-based (26.1, 26.2, …), which is why recent formats (101.1, 107.1, 110) map to 26.* names rather than 1.21.*.

Picking a format & spanning versions

πŸ’‘ Best practice

Hard-code the number for your release version, and add a min_format/max_format (or, on pre-25w31a clients, supported_formats) range only if you intend to span versions. Use misode's mcmeta version dump as the machine-readable source of truth for any exact number, and see Pack structure for full pack.mcmeta and overlay examples.

🎩 Trick

A pack that must span the 25w31a boundary should declare both pack_format (for old clients) and min_format/max_format (for new clients) β€” new clients ignore the legacy field, old clients ignore the new fields β€” and use overlays to swap in version-shaped copies of any files whose schema changed.

Sources