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.
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_format | Minecraft version(s) | Notable change |
|---|---|---|
| 4 | 1.13 β 1.14.4 | Initial data-pack system |
| 5 | 1.15 β 1.16.1 | Predicates |
| 6 | 1.16.2 β 1.16.5 | Custom world generation (worldgen/) |
| 7 | 1.17 β 1.17.1 | /replaceitem → /item |
| 8 | 1.18 β 1.18.1 | Loot-table functions require type |
| 9 | 1.18.2 | /locate syntax change |
| 10 | 1.19 β 1.19.3 | filter section; chat_type |
| 12 | 1.19.4 | Damage types (damage_type/) |
| 15 | 1.20 β 1.20.1 | Sign NBT restructure; predicate renames |
| 18 | 1.20.2 | Function macros |
| 26 | 1.20.3 β 1.20.4 | Strict text-component parsing; overlays era |
| 41 | 1.20.5 β 1.20.6 | Item components replace raw NBT |
| 48 | 1.21 β 1.21.1 | Data-driven enchantments & paintings; folder singularization |
| 57 | 1.21.2 β 1.21.3 | Attribute-ID prefixes removed |
| 61 | 1.21.4 | TNT-minecart field rename |
| 71 | 1.21.5 | Text components are objects in NBT; mob-variant registries |
| 80 | 1.21.6 | Dimension cloud_height; dialog/ |
| 81 | 1.21.7 β 1.21.8 | music_disc_lava_chicken |
| 88.0 | 1.21.9 β 1.21.10 | Float format introduced; min_format/max_format |
| 94.1 | 1.21.11 | Non-breaking additions (minor bump) |
| 101.1 | 26.1 β 26.1.2 | Villager trades data-driven |
| 107.1 | 26.2 | (26.2 line) |
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.
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/ |
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.
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.
- Since format 88.0 / 1.21.9 (25w31a):
pack_formatgained a minor component, written asMAJOR.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_formatbecame optional for packs that only support format β₯ 82. - Since 25w31a:
supported_formatswas replaced bymin_format/max_format, taking either an integer or a[major, minor]array (82β‘[82]β‘[82, 0]). The oldsupported_formatsfield 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 than1.21.*.
Picking a format & spanning versions
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.
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.