Minecraft Custom Advancements Data Pack Guide
Build minecraft custom advancements in a data pack: a tab root and a child with display, criteria and rewards, plus how to grant them in 26.3.
Updated 5 Nov 2026Written for Minecraft 26.32 min read
Written for Minecraft 26.3.
Minecraft custom advancements live in a data pack as JSON files. Each file has a display, one or more criteria and optional rewards. A file with no parent starts a new tab.
Before you start
Minecraft Java Edition 26.3, data pack format 121.0.
A data pack. See pack basics.
Operator rights for
/advancement.
Where the files go
Save advancements at data/<namespace>/advancement/<name>.json. The folder is advancement, singular, since 1.21 (it was advancements before). The ID of data/example/advancement/root.json is example:root.
Create a tab root
Create
data/example/advancement/root.json.Add a
displaywith an icon, title and description. All three are required.Add a criterion.
minecraft:impossiblenever fires by itself, so only a command can grant it.
{
"display": {
"icon": { "id": "minecraft:emerald" },
"title": { "text": "Welcome" },
"description": { "text": "You joined the server." },
"show_toast": false,
"announce_to_chat": false
},
"criteria": {
"joined": { "trigger": "minecraft:impossible" }
}
}Without a parent this file becomes a root, and background (root only) sets the tab picture. Grant the root from a function or command when a player joins.
Create a child
A child names its parent and uses a real trigger. This one fires when the player has 5 to 10 diamonds in their inventory:
{
"parent": "example:root",
"display": {
"icon": { "id": "minecraft:diamond" },
"title": { "text": "Shiny" },
"description": { "text": "Collect five diamonds." },
"frame": "goal"
},
"criteria": {
"has_diamonds": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{ "items": "minecraft:diamond", "count": { "min": 5 } }
]
}
}
},
"rewards": {
"experience": 100
}
}frameistask(default),goalorchallenge.hidden(default false) hides it until it is earned.requirementslists groups of criteria. Leave it out to require all of them.rewardscan also giverecipes,loottables or run afunction.
Reward loot uses loot tables: see loot tables.
Grant and revoke
/advancement grant @s only example:root
/advancement grant @s from example:root
/advancement revoke @s everythingonly affects one advancement, from adds its children, through adds parents and children, and until goes back to the root.
Check it worked
Open the advancements screen (L): your tab should show.
Grant the root, then pick up five diamonds. The child should complete.
Revoke and repeat to test again.
Common problems
The tab does not appear
A root with no earned advancement can stay hidden. Grant it with only first.
It fails to load
A missing icon, title or description, or a circular parent, stops the file loading. Check the console.
Wrong folder
Use advancement, not advancements.
Icon items with data
Item data on an icon goes in components next to id, not in old NBT.
Do not mistype the parent. A parent that does not exist leaves the child unloaded with no in-game message.
More docs: debugging a pack.