Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Appendix G — Data Pack Folder Structure Cheat Sheet

A one-page map of every folder a data pack can contain. Use it to answer two questions fast: “Which folder does this file go in?” and “Is this folder required or optional?” Every folder and its one-line purpose comes straight from the wiki’s Data pack page. Folder names use the book’s singular convention (function, recipe, loot_table, never functions/recipes), exactly as the game expects them.

How a data pack is laid out

A data pack is a folder (or a .zip) with two things at its root, plus a data folder that holds everything else:

<data pack name>/
├── pack.mcmeta      ← REQUIRED. The only mandatory file. Metadata in JSON.
├── pack.png         ← optional. Icon shown next to the pack in the selection screen.
└── data/
    └── <namespace>/ ← your namespace (e.g. mypack). "minecraft" overrides vanilla.
        └── ... registry folders (below) ...

The rule that drives everything: a file at data/<namespace>/<registry>/<path>.json is loaded into the <registry> registry with the ID <namespace>:<path>. Both <registry> and <path> may contain slashes, which just create deeper sub-folders. Functions use .mcfunction instead of .json; structures use .nbt.

What’s required vs. optional: only pack.mcmeta is mandatory. The data folder, the namespace folder, and every registry folder below are optional: you create a folder only when you have a file to put in it. An empty data pack is just pack.mcmeta.

The experimental-settings mark (*)

A folder marked with * is an experimental-settings folder. Putting even one valid file inside any * folder marks the whole pack as “using experimental settings”: opening the world shows a warning screen, the world cannot be uploaded to Realms, and changes to those folders cannot be applied with /reload: you must exit and reopen the world (or reboot the server). Folders without a * are safe and /reload-friendly.

The complete tree

data/<namespace>/
├── function              .mcfunction files with lists of commands.
├── structure             .nbt files defining a saved structure of blocks.
├── tags/                 collections of things; each sub-folder is one tag type (.json).
│   ├── function          tags of functions.
│   └── <registry>        tags can be defined for any registry (see tag types).
│
│   ── all following folders hold .json files defining the content ──
│
├── advancement           definitions of advancements.
├── banner_pattern      * textures and names to use for banner patterns.
├── cat_variant         * textures and spawn conditions of cat variants.
├── chat_type           * formatting of chat messages.
├── chicken_variant     * textures and spawn conditions of chicken variants.
├── cow_variant         * textures and spawn conditions of cow variants.
├── damage_type         * attributes of damage and death messages.
├── dialog              * definitions of dialogs.
├── dimension           * biome layout and terrain of dimensions.
├── dimension_type      * properties of dimensions.
├── enchantment         * enchantment effects, supported items, level cost, etc.
├── enchantment_provider * selection of enchantments for specific uses.
├── frog_variant        * textures and spawn conditions of frog variants.
├── instrument          * instruments for goat horns.
├── item_modifier         loot functions used to modify items.
├── jukebox_song        * jukebox song definitions.
├── loot_table            loot from mobs, blocks, chests, etc.
├── painting_variant    * size and texture of paintings.
├── pig_variant         * textures and spawn conditions of pig variants.
├── predicate             tests for conditions based on position, mobs, etc.
├── recipe                recipes for crafting, smelting, etc.
├── sulfur_cube_archetype * defines Sulfur Cube archetypes.
├── test_environment    * groups GameTests with the right preconditions to run.
├── test_instance       * a test that can be run by the GameTest framework.
├── timeline            * specifies events and attributes by time of day.
├── trade_set           * a set of trades selected by villagers / wandering traders.
├── trial_spawner       * configuration of trial spawners.
├── trim_material       * colors, ingredients, and name of trim materials.
├── trim_pattern        * textures and name of trim patterns.
├── villager_trade      * trades of villagers and wandering traders.
├── wolf_sound_variant  * sound variants of wolves.
├── wolf_variant        * textures and spawn conditions of wolf variants.
├── world_clock         * clocks used to keep track of internal time.
├── zombie_nautilus_variant * textures and spawn conditions of zombie nautilus variants.
└── worldgen/           * world-generation registries:
    ├── biome             biome generation options, effects, etc.
    ├── configured_carver carver cave definitions.
    ├── configured_feature configuration of features.
    ├── density_function  math to calculate a value for each position in the world.
    ├── noise             size and amplitudes of a noise.
    ├── noise_settings    terrain shape (noise caves) and main terrain block types.
    ├── placed_feature    placement of features within a chunk.
    ├── processor_list    post-processing of blocks in structures.
    ├── structure         structure generation and allowed biomes.
    ├── structure_set     distribution of a set of structures within the world.
    ├── template_pool     a set of templates (structure files) for jigsaw structures.
    ├── world_preset      sets of dimensions selectable in the Create World screen.
    ├── flat_level_generator_preset  presets for the "Superflat" world type.
    └── multi_noise_biome_source_parameter_list  preset name for the multi-noise biome layout.

Quick reference: required vs. optional

PathRequired?Reloadable with /reload?
pack.mcmetaYes — the only mandatory filen/a
pack.pngNon/a
data/<namespace>/functionNoYes
data/<namespace>/structureNoYes
data/<namespace>/tags/...NoYes
data/<namespace>/loot_tableNoYes
data/<namespace>/recipeNoYes
data/<namespace>/advancementNoYes
data/<namespace>/item_modifierNoYes
data/<namespace>/predicateNoYes
any * folder (above)NoNo — exit/reopen world or reboot server

Reminder. tags is the one plural folder (it holds tag types, one sub-folder each). Everything inside it, and every other registry folder, is singular. If a folder you need isn’t in this tree, it isn’t a data pack folder: double-check the spelling against the list above.


Source: the Data pack page of the Minecraft Wiki (Java Edition 26.2), “Folder structure” section. Every folder name, purpose, and * mark is taken directly from that list.