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 | Sulfur & cinnabar; interval_select replaces weird_scaled_sampler (Site: 26.2) |
121.0 | 26.3 | block_transformer, the context providers and predicate as registries; decorated_pot_pattern ships files |
Snapshot formats run ahead of releases, and they move during a snapshot cycle. The 26.3 cycle alone has walked from format 108.0 (26.3 Snapshot 1) to 116.0 (26.3 Snapshot 8) — nine formats across eight snapshots, none of them yet a release. (Site: 26.2) Always match the exact target version rather than assuming the next release keeps a snapshot's number.
The full pack_format history (resource packs)
The resource-pack number space, from the same generated version data as the release-notes index. Read it next to the data-pack table above and the divergence is the point: for the same Minecraft version the two are almost never equal.
Resource pack_format | First build | Stable releases | Data pack_format in the same builds |
|---|---|---|---|
101.0 | 26.4-snapshot-6 | snapshots only | 125.1 |
100.2 | 26.4-snapshot-5 | snapshots only | 125.0 |
100.1 | 26.4-snapshot-4 | snapshots only | 124.0 |
100.0 | 26.4-snapshot-3 | snapshots only | 123.0 |
99.0 | 26.4-snapshot-2 | snapshots only | 122.1 |
98.0 | 26.4-snapshot-1 | snapshots only | 122.0 |
97.1 | 26.3-pre-1 | 26.3 | 119.0, 120.0, 121.0 |
97.0 | 26.3-snapshot-10 | snapshots only | 118.0 |
96.0 | 26.3-snapshot-8 | snapshots only | 116.0, 117.0 |
95.0 | 26.3-snapshot-7 | snapshots only | 115.0 |
94.0 | 26.3-snapshot-6 | snapshots only | 113.0 |
93.0 | 26.3-snapshot-5 | snapshots only | 112.0 |
92.0 | 26.3-snapshot-4 | snapshots only | 111.0 |
91.0 | 26.3-snapshot-3 | snapshots only | 110.0 |
90.0 | 26.3-snapshot-2 | snapshots only | 109.0 |
89.0 | 26.3-snapshot-1 | snapshots only | 108.0 |
88.0 | 26.2-pre-1 | 26.2 | 106.1, 107.0, 107.1 |
87.0 | 26.2-snapshot-7 | snapshots only | 105.1, 106.0 |
86.2 | 26.2-snapshot-5 | snapshots only | 104.0, 105.0 |
86.1 | 26.2-snapshot-4 | snapshots only | 103.0 |
86.0 | 26.2-snapshot-3 | snapshots only | 102.0 |
85.0 | 26.2-snapshot-1 | snapshots only | 101.2 |
84.0 | 26.1-pre-1 | 26.1, 26.1.1, 26.1.2 | 101.0, 101.1 |
83.0 | 26.1-snapshot-11 | snapshots only | 100.0 |
82.0 | 26.1-snapshot-10 | snapshots only | 99.3 |
81.1 | 26.1-snapshot-8 | snapshots only | 99.2 |
81.0 | 26.1-snapshot-7 | snapshots only | 99.1 |
80.0 | 26.1-snapshot-6 | snapshots only | 99.0 |
79.0 | 26.1-snapshot-5 | snapshots only | 98.0 |
78.1 | 26.1-snapshot-4 | snapshots only | 97.1 |
78.0 | 26.1-snapshot-3 | snapshots only | 97.0 |
77.0 | 26.1-snapshot-2 | snapshots only | 96.0 |
76.0 | 26.1-snapshot-1 | snapshots only | 95.0 |
75.0 | 1.21.11-pre1 | 1.21.11 | 94.0, 94.1 |
74.0 | 25w46a | snapshots only | 93.1 |
73.0 | 25w45a | snapshots only | 93.0 |
72.0 | 25w44a | snapshots only | 92.0 |
71.0 | 25w43a | snapshots only | 91.0 |
70.1 | 25w42a | snapshots only | 90.0 |
70.0 | 25w41a | snapshots only | 89.0 |
69.0 | 25w37a | 1.21.9, 1.21.10 | 87.0, 87.1, 88.0 |
68.0 | 25w36a | snapshots only | 86.0 |
67.0 | 25w35a | snapshots only | 85.0 |
66.0 | 25w34a | snapshots only | 84.0 |
65.2 | 25w33a | snapshots only | 83.1 |
65.1 | 25w32a | snapshots only | 83.0 |
65.0 | 25w31a | snapshots only | 82.0 |
64.0 | 1.21.7-rc2 | 1.21.7, 1.21.8 | 81.0 |
63.0 | 1.21.6-pre1 | 1.21.6 | 79.0, 80.0 |
62.0 | 25w21a | snapshots only | 78.0 |
61.0 | 25w20a | snapshots only | 77.0 |
60.0 | 25w19a | snapshots only | 76.0 |
59.0 | 25w18a | snapshots only | 75.0 |
58.0 | 25w17a | snapshots only | 74.0 |
57.0 | 25w16a | snapshots only | 73.0 |
56.0 | 25w15a | snapshots only | 72.0 |
55.0 | 1.21.5-pre1 | 1.21.5 | 70.0, 71.0 |
54.0 | 25w10a | snapshots only | 70.0 |
53.0 | 25w08a | snapshots only | 68.0, 69.0 |
52.0 | 25w07a | snapshots only | 67.0 |
51.0 | 25w06a | snapshots only | 66.0 |
50.0 | 25w05a | snapshots only | 65.0 |
49.0 | 25w04a | snapshots only | 64.0 |
48.0 | 25w03a | snapshots only | 63.0 |
47.0 | 25w02a | snapshots only | 62.0 |
46.0 | 1.21.4-pre1 | 1.21.4 | 60.0, 61.0 |
45.0 | 24w46a | snapshots only | 60.0 |
44.0 | 24w45a | snapshots only | 59.0 |
43.0 | 24w44a | snapshots only | 58.0 |
42.0 | 1.21.2-pre3 | 1.21.2, 1.21.3 | 57.0 |
41.0 | 1.21.2-pre1 | snapshots only | 57.0 |
40.0 | 24w40a | snapshots only | 56.0 |
39.0 | 24w38a | snapshots only | 54.0, 55.0 |
38.0 | 24w37a | snapshots only | 53.0 |
37.0 | 24w36a | snapshots only | 52.0 |
36.0 | 24w34a | snapshots only | 50.0, 51.0 |
35.0 | 24w33a | snapshots only | 49.0 |
34.0 | 24w21a | 1.21, 1.21.1 | 45.0, 46.0, 47.0, 48.0 |
33.0 | 24w18a | snapshots only | 42.0, 43.0, 44.0 |
32.0 | 1.20.5-pre4 | 1.20.5, 1.20.6 | 41.0 |
31.0 | 24w13a | snapshots only | 37.0, 38.0, 39.0, 40.0, 41.0 |
30.0 | 24w12a | snapshots only | 36.0 |
29.0 | 24w11a | snapshots only | 35.0 |
28.0 | 24w09a | snapshots only | 33.0, 34.0 |
26.0 | 24w06a | snapshots only | 31.0, 32.0 |
25.0 | 24w05a | snapshots only | 30.0 |
24.0 | 24w03a | snapshots only | 28.0, 29.0 |
22.0 | 1.20.3-pre1 | 1.20.3, 1.20.4 | 26.0, 27.0 |
21.0 | 23w45a | snapshots only | 24.0, 25.0 |
20.0 | 23w43a | snapshots only | 22.0, 23.0 |
19.0 | 23w42a | snapshots only | 21.0 |
18.0 | 1.20.2-pre2 | 1.20.2 | 18.0, 19.0, 20.0 |
17.0 | 23w32a | snapshots only | 17.0, 18.0 |
16.0 | 23w31a | snapshots only | 16.0 |
15.0 | 23w17a | 1.20, 1.20.1 | 14.0, 15.0 |
14.0 | 23w14a | snapshots only | 13.0, 14.0 |
13.0 | 1.19.4-pre1 | 1.19.4 | 12.0, 13.0 |
12.0 | 22w45a | 1.19.3 | 10.0, 11.0, 12.0 |
11.0 | 22w42a | snapshots only | 10.0 |
9.0 | 22w11a | 1.19, 1.19.1, 1.19.2 | 10.0 |
8.0 | 21w39a | 1.18, 1.18.1, 1.18.2 | 8.0, 9.0 |
7.0 | 20w45a | 1.17, 1.17.1 | 6.0, 7.0, 8.0 |
6.0 | 1.16.2-rc1 | 1.16.2, 1.16.3, 1.16.4, 1.16.5 | 6.0 |
5.0 | 1.15-pre1 | 1.15, 1.15.1, 1.15.2, 1.16, 1.16.1 | 5.0 |
4.0 | 1.14 | 1.14, 1.14.1, 1.14.2, 1.14.3, 1.14.4 | 4.0 |
Generated by tools/pack_format_resource.py from misode/mcmeta. One row per distinct format, ordered by first appearance. The fourth column lists every data format that shipped while that resource format was current, which is why some rows carry more than one: the two spaces move independently, and a point-release branch can keep an older resource format alive after a newer one has already appeared in snapshots.
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 82.0 (25w31a), formats carry a minor component — 1.21.9 shipped as
88.0. The major part bumps on breaking changes and the minor on non-breaking additions, so packs stay compatible across minor increments. But the minor never goes inpack_format. That field is an integer carrying the major alone, in every vanilla pack measured:81at 1.21.8,88at 1.21.9,94at 1.21.11,101at 26.1,107at 26.2,121at 26.3. The minor appears only inmin_format/max_format, which take[major, minor]— 26.3 ships[121, 0]. TheMAJOR.MINORform in the tables above is notation for reading the history, not a value to paste. This entry previously said to writeMAJOR.MINORinpack_format, and dated the change to 88.0 / 1.21.9; both were wrong (TC-035). - 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.