How to Add a Datapack to a Minecraft Server
Drop the zip into your world's datapacks folder, run /reload, and confirm with /datapack list — plus the per-world gotcha that breaks it on Paper.
Adding a datapack is one of the rare server jobs with no install step: you drop the pack's .zip into the right folder, reload, and it's live. The folder is world/datapacks/, the reload is /reload or a restart, and the confirmation is /datapack list. That's the entire job, and it works the same on vanilla, on a Paper server, on Fabric, and in singleplayer, because datapacks are part of Minecraft itself rather than something bolted on. The one place people trip is which world the folder belongs to — on Paper and Spigot there's more than one, and a pack only affects the world it sits in.
Worth getting the distinction clear before you start, because it explains everything else. A datapack changes game data — recipes, loot tables, advancements, functions, predicates, even custom dimensions — using the system the game already ships with. There's no external program, no jar, no Bukkit hook. That's also its ceiling: a datapack works inside existing mechanics and can't add a genuinely new block or mob the way a mod can. If you need new systems, permissions, or a database, that's plugin territory, and plugins are a different thing entirely.
Step 1: Find the world folder
Datapacks are scoped to a single world, so the first thing to nail down is which folder is your world. The name isn't always world — it's whatever level-name= is set to in server.properties. Open that file, read the value, and that's your folder. The default really is level-name=world, so most servers do have a folder literally called world sitting next to the jar, but some managed hosts rename it, and if you assume wrong you'll drop the pack into a world the server never loads.
On singleplayer the equivalent lives under your saves directory: .minecraft/saves/<world>/datapacks. Same idea, different path.
Step 2: Open (or create) the datapacks folder
Inside the world folder there's a subfolder named datapacks. If it's already there, good. If it isn't, make one — it has to be spelled exactly datapacks, directly inside the world folder, so the full path reads world/datapacks/. The game creates this automatically the first time a world loads on a recent version, but on a fresh world or a freshly renamed one you sometimes have to add it yourself, and a typo here is a silent failure: the pack simply never shows up.
Step 3: Drop the pack in — don't unzip it
A datapack you download is already in the format the game wants. Upload the .zip as-is, straight into datapacks/, and you're done with this step. Extracting it is not only unnecessary, it's the single most common way to break the install.
If you do extract it, the rule is that pack.mcmeta has to sit at the top level of the resulting folder, right alongside the data/ folder. The usual mistake is a double-nested folder — you unzip and get mypack/mypack/pack.mcmeta, one level too deep, and the game can't see it. When in doubt, leave the zip zipped; the game reads it perfectly well that way.
A valid pack, zipped or not, contains three things at its root:
pack.mcmeta— a small JSON file carrying thepack_formatnumber, and it's required.- a
data/folder, organized by namespace, holding the actual recipes, functions, loot tables, and so on. pack.png— an optional icon that shows in the datapack list, safe to leave out.
That pack_format number matters more than it looks. It tells the game which version the pack was built for, so the pack you download has to match the version your server runs. Use the pack build that matches your server's actual version; as of September 2026 vanilla is on 26.3 while Paper's stable builds are for 26.2, and some plugin stacks still target 26.1. 26.3 also moved the data pack format to 121.0 with a lot of breaking changes, so expect a pack built for 26.2 to need an update before it works on 26.3. Grab the build that matches your version and you avoid the usual reason a freshly added pack won't turn on.
Step 4: Load it
The pack is in the folder but the game won't notice until you tell it to look. Two ways:
/reload— run it from the console, or in-game as a level-2-or-higher operator. This rereads functions, loot tables, recipes, and tags live, without kicking anyone, and for most packs it's instant.- Restart the server. Stop it, start it again, and the pack loads with the world.
A restart is the more reliable of the two, and it's what to reach for if /reload misbehaves. Some datapack features — anything touching world generation, like custom biomes or dimensions — only apply on a fresh world load, not on a live reload, so a worldgen pack can look like it did nothing after /reload when it just needs a clean start. /reload can also occasionally desync the server's data state; a full restart clears that up every time. If a pack isn't behaving and you've checked everything else, restart before you assume the pack is broken.
Step 5: Verify it loaded
Run /datapack list and read the output. An enabled world pack shows up with a file/ prefix — so a pack you dropped in as mypack.zip appears as file/mypack. That prefix is how you know the game is reading it from the world folder rather than from a built-in source. The built-in vanilla data shows separately; a bare server lists something like There are 1 data packs enabled: [vanilla] There are no more data packs available, and hovering the vanilla entry reads Default The default data for Minecraft. Once your pack appears next to it with the file/ prefix, it's live.
Packs in the folder enable themselves automatically on load, so you usually won't touch the enable commands. When you need them:
/datapack enable <name>turns one on, and/datapack disable <name>turns it off.- Names containing a slash have to be quoted, so it's
/datapack enable "file/my_pack", not the bare form. - You control load order with
first/last, or relative to another pack withbefore/after <existing>.
All of enable, disable, and list need permission level 2. The /datapack create <id> <description> command, which scaffolds a new empty pack, needs level 4.
The per-world gotcha (and host panels)
Here's the step almost everyone misses on a multi-world server. On Bukkit, Spigot, and Paper, the Nether and the End aren't part of the main world folder — they're separate folders, world_nether and world_the_end, each with its own datapacks/ subfolder. A datapack only affects the world whose folder it lives in. So a pack you dropped into world/datapacks/ works in the overworld and does absolutely nothing once a player steps through a portal.
If the pack should apply everywhere — most loot, recipe, and advancement packs should — copy it into each dimension's folder: world/datapacks/, world_nether/datapacks/, and world_the_end/datapacks/, reloading after. Vanilla and Fabric keep all three dimensions in one world, so they don't have this split, which is why a pack that "works fine in singleplayer" can look half-broken once it's on Paper.
One shortcut worth knowing: some managed-host control panels have a dedicated Datapacks uploader that drops the file into the right place and reloads for you, hiding the folder step entirely. Handy when it's there — though those panels sometimes only expose the main world folder, which quietly recreates the Nether-and-End problem above. The manual folder method works on every host, so it's the one to learn.
FAQ
My pack shows as incompatible and won't enable — what now?
That's almost always a pack_format mismatch: the number inside pack.mcmeta was written for a different game version than your server runs, and the game won't override it for you. Open pack.mcmeta, check the pack_format value, and replace the pack with a build made for your version — on canon, a 26.1 server wants a 26.1-era pack. If the newest build you can find is still older than your server, only the pack's author can bump that number; nothing you change in the folder will make an incompatible pack load.
Do players need to download or install anything to use a datapack?
No. Datapacks run entirely server-side, so every connecting player gets the new recipes, loot, and advancements automatically — there's no client mod or resource pack to install, and nobody has to relog. That's a real edge over mods, and it's part of why datapack-driven servers fill the vanilla category — anyone on the matching game version can join on the default Java port 25565 and it just works.
What's the difference between /datapack list available and enabled?
/datapack list enabled shows only the packs currently active, in their load order, which is what you want when verifying an install worked. /datapack list available shows packs the game found in the folder but that are currently disabled — useful when you've turned one off with /datapack disable and want to confirm it's still sitting there ready to re-enable. Plain /datapack list shows both groups at once.
Can I add two datapacks that change the same thing?
Yes, and load order decides the winner. If two packs edit the same loot table or recipe, the one loaded later overrides the earlier one. You set that explicitly when enabling — /datapack enable <name> last forces a pack to the bottom of the stack so its changes take priority, and before/after <existing> positions it relative to a specific pack. Without that, packs load in the order the game discovers them, which isn't always the order you'd guess, so set it deliberately when two packs overlap.


