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.2Sulfur & cinnabar; interval_select replaces weird_scaled_sampler (Site: 26.2)
121.026.3block_transformer, the context providers and predicate as registries; decorated_pot_pattern ships files
📌 Note

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_formatFirst buildStable releasesData pack_format in the same builds
101.026.4-snapshot-6snapshots only125.1
100.226.4-snapshot-5snapshots only125.0
100.126.4-snapshot-4snapshots only124.0
100.026.4-snapshot-3snapshots only123.0
99.026.4-snapshot-2snapshots only122.1
98.026.4-snapshot-1snapshots only122.0
97.126.3-pre-126.3119.0, 120.0, 121.0
97.026.3-snapshot-10snapshots only118.0
96.026.3-snapshot-8snapshots only116.0, 117.0
95.026.3-snapshot-7snapshots only115.0
94.026.3-snapshot-6snapshots only113.0
93.026.3-snapshot-5snapshots only112.0
92.026.3-snapshot-4snapshots only111.0
91.026.3-snapshot-3snapshots only110.0
90.026.3-snapshot-2snapshots only109.0
89.026.3-snapshot-1snapshots only108.0
88.026.2-pre-126.2106.1, 107.0, 107.1
87.026.2-snapshot-7snapshots only105.1, 106.0
86.226.2-snapshot-5snapshots only104.0, 105.0
86.126.2-snapshot-4snapshots only103.0
86.026.2-snapshot-3snapshots only102.0
85.026.2-snapshot-1snapshots only101.2
84.026.1-pre-126.1, 26.1.1, 26.1.2101.0, 101.1
83.026.1-snapshot-11snapshots only100.0
82.026.1-snapshot-10snapshots only99.3
81.126.1-snapshot-8snapshots only99.2
81.026.1-snapshot-7snapshots only99.1
80.026.1-snapshot-6snapshots only99.0
79.026.1-snapshot-5snapshots only98.0
78.126.1-snapshot-4snapshots only97.1
78.026.1-snapshot-3snapshots only97.0
77.026.1-snapshot-2snapshots only96.0
76.026.1-snapshot-1snapshots only95.0
75.01.21.11-pre11.21.1194.0, 94.1
74.025w46asnapshots only93.1
73.025w45asnapshots only93.0
72.025w44asnapshots only92.0
71.025w43asnapshots only91.0
70.125w42asnapshots only90.0
70.025w41asnapshots only89.0
69.025w37a1.21.9, 1.21.1087.0, 87.1, 88.0
68.025w36asnapshots only86.0
67.025w35asnapshots only85.0
66.025w34asnapshots only84.0
65.225w33asnapshots only83.1
65.125w32asnapshots only83.0
65.025w31asnapshots only82.0
64.01.21.7-rc21.21.7, 1.21.881.0
63.01.21.6-pre11.21.679.0, 80.0
62.025w21asnapshots only78.0
61.025w20asnapshots only77.0
60.025w19asnapshots only76.0
59.025w18asnapshots only75.0
58.025w17asnapshots only74.0
57.025w16asnapshots only73.0
56.025w15asnapshots only72.0
55.01.21.5-pre11.21.570.0, 71.0
54.025w10asnapshots only70.0
53.025w08asnapshots only68.0, 69.0
52.025w07asnapshots only67.0
51.025w06asnapshots only66.0
50.025w05asnapshots only65.0
49.025w04asnapshots only64.0
48.025w03asnapshots only63.0
47.025w02asnapshots only62.0
46.01.21.4-pre11.21.460.0, 61.0
45.024w46asnapshots only60.0
44.024w45asnapshots only59.0
43.024w44asnapshots only58.0
42.01.21.2-pre31.21.2, 1.21.357.0
41.01.21.2-pre1snapshots only57.0
40.024w40asnapshots only56.0
39.024w38asnapshots only54.0, 55.0
38.024w37asnapshots only53.0
37.024w36asnapshots only52.0
36.024w34asnapshots only50.0, 51.0
35.024w33asnapshots only49.0
34.024w21a1.21, 1.21.145.0, 46.0, 47.0, 48.0
33.024w18asnapshots only42.0, 43.0, 44.0
32.01.20.5-pre41.20.5, 1.20.641.0
31.024w13asnapshots only37.0, 38.0, 39.0, 40.0, 41.0
30.024w12asnapshots only36.0
29.024w11asnapshots only35.0
28.024w09asnapshots only33.0, 34.0
26.024w06asnapshots only31.0, 32.0
25.024w05asnapshots only30.0
24.024w03asnapshots only28.0, 29.0
22.01.20.3-pre11.20.3, 1.20.426.0, 27.0
21.023w45asnapshots only24.0, 25.0
20.023w43asnapshots only22.0, 23.0
19.023w42asnapshots only21.0
18.01.20.2-pre21.20.218.0, 19.0, 20.0
17.023w32asnapshots only17.0, 18.0
16.023w31asnapshots only16.0
15.023w17a1.20, 1.20.114.0, 15.0
14.023w14asnapshots only13.0, 14.0
13.01.19.4-pre11.19.412.0, 13.0
12.022w45a1.19.310.0, 11.0, 12.0
11.022w42asnapshots only10.0
9.022w11a1.19, 1.19.1, 1.19.210.0
8.021w39a1.18, 1.18.1, 1.18.28.0, 9.0
7.020w45a1.17, 1.17.16.0, 7.0, 8.0
6.01.16.2-rc11.16.2, 1.16.3, 1.16.4, 1.16.56.0
5.01.15-pre11.15, 1.15.1, 1.15.2, 1.16, 1.16.15.0
4.01.141.14, 1.14.1, 1.14.2, 1.14.3, 1.14.44.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.

⚠ 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 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 in pack_format. That field is an integer carrying the major alone, in every vanilla pack measured: 81 at 1.21.8, 88 at 1.21.9, 94 at 1.21.11, 101 at 26.1, 107 at 26.2, 121 at 26.3. The minor appears only in min_format / max_format, which take [major, minor] — 26.3 ships [121, 0]. The MAJOR.MINOR form in the tables above is notation for reading the history, not a value to paste. This entry previously said to write MAJOR.MINOR in pack_format, and dated the change to 88.0 / 1.21.9; both were wrong (TC-035).
  • 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