← All posts
minecraftserver-managementdatapackspluginsmoddingcomparison

Datapacks vs Plugins vs Mods: What Each One Can and Cannot Do on a Server

Where datapacks, plugins and mods sit on a Java Edition server, what each one can and can't change, whether players have to install anything, and how to pick the lightest option for the change you want.

ChunkPod Team · · 11 min read

Datapacks vs Plugins vs Mods: What Each One Can and Cannot Do on a Server

A datapack, a plugin and a mod can all change how your Minecraft server plays, but they sit in very different places and have very different limits. Picking the wrong one usually means more work than you needed. You might end up with a plugin to change one crafting recipe, or a modded server that makes every player install a mod loader just to get a teleport command.

This post covers Java Edition. Bedrock has its own add-on system, which works differently.

Where each one lives

It helps to think of a server in three layers.

  • The vanilla game. This is the server jar Mojang ships. It already reads datapacks.
  • Server software. Spigot, Paper and Purpur wrap the vanilla server and add a plugin API. Fabric, Forge and NeoForge are mod loaders that let code change the game itself.
  • Your content. This is datapacks, plugins or mods, depending on what the layer below supports.

A datapack is a folder or zip of JSON files and .mcfunction files that goes in the world's datapacks folder. It's data, not code. The game reads it and uses it the same way it uses its own built-in data.

A plugin is a Java .jar that goes in the server's plugins folder. It talks to the game through an API: Bukkit, plus the Spigot and Paper additions on top of it. It runs only on the server.

A mod is a Java .jar that goes in the mods folder of a Fabric, Forge or NeoForge server. It can change the game's own code, and most mods need to be installed on each player's client too.

That last point is the biggest practical difference between the three, so keep it in mind for the rest of the post.

Datapacks

Datapacks arrived in Java Edition 1.13 and have grown a lot since. Mojang keeps moving more of the game into data files, so most updates give datapacks more to work with.

What datapacks can do

  • Recipes. Add new crafting, smelting or stonecutting recipes, or override vanilla ones.
  • Loot tables. Change what mobs drop, what's in chests and what you get from fishing.
  • Advancements. Add custom advancements, or use them as hidden triggers for other logic.
  • Functions. These are lists of commands in .mcfunction files. A function tagged to run every tick or on load gives you simple game logic, like a custom mechanic, a timer or a scoreboard-based system.
  • Tags and predicates. Group blocks, items or entities, and define conditions that other files can check.
  • World generation. Custom biomes, structures, noise settings and even whole dimensions. Terralith is a well-known example: it reworks overworld terrain and runs as a datapack.
  • Newer data-driven features. Recent versions let datapacks define things like enchantments (since 1.21), damage types, armor trim patterns and painting variants.

All of this works on Vanilla, Paper, Fabric, Forge and NeoForge, because they all load datapacks. Players don't install anything. They join with a normal client and the server handles the rest.

What datapacks can't do

  • No truly new blocks or items. A datapack can give an existing item a new name, lore or custom model data, but the game still treats it as that base item. Pair it with a resource pack and it can look new, but it won't get new block behavior.
  • No textures, models or sounds. Those belong to resource packs, which are a separate thing. A server can prompt players to download one through the resource-pack setting in server.properties.
  • No contact with the outside world. No databases, no web requests, no Discord integration and no reading files on disk.
  • Limited logic. Commands can do a surprising amount, but anything with complex state, like an economy with shops or a land claim system with trust lists, gets messy fast.

Things to watch

Functions that run every tick with broad selectors like @e can cost real TPS on a busy server, so a badly written datapack can lag the server just like a bad plugin can.

Datapacks also declare a pack_format number in their pack.mcmeta file, and that number changes between Minecraft versions. An old pack may load with a warning or break outright after an update.

World generation packs only affect chunks generated after the pack is added. Adding one to an existing world leaves a visible seam between old and new terrain.

Plugins

Plugins are the usual choice for SMPs and community servers that want players to join with a plain vanilla client. They run on Spigot, Paper, Purpur and other software in the Bukkit family.

What plugins can do

  • Commands and permissions. Homes, warps, teleport requests, kits, and permission groups through something like LuckPerms.
  • React to almost any event. Block breaks, player joins, chat messages, entity damage and inventory clicks. A plugin can listen for these, cancel them or change the result.
  • Store data properly. Plugins can use files, SQLite, MySQL and other databases, so economies, claims and player stats survive restarts.
  • Talk to the outside world. Discord bridges like DiscordSRV, web maps like BlueMap and Dynmap, voting sites and web panels.
  • Menus. Chest-style inventory GUIs for shops, settings and warps.
  • Protection and moderation. Land claims with GriefPrevention, region protection with WorldGuard, block logging and rollback with CoreProtect, and anti-cheat.
  • World generation. Plugins can supply their own terrain generators. Terra and Iris are two plugins built for custom terrain.
  • Bedrock crossplay. Geyser, usually paired with Floodgate, lets Bedrock players join a Java server.

Players need nothing besides a vanilla client, which is a big reason plugin servers are easy to join.

What plugins can't do

  • No truly new content. A plugin can't make the client show a block or mob it doesn't already know about. Plugins like ItemsAdder and Oraxen get close by combining existing items, custom model data and a server resource pack. Under the hood it's still vanilla items and blocks, such as note block states, dressed up to look different.
  • Limited access to core mechanics. Plugins work through the API. If there's no event or method for what you want, you're stuck, or the plugin reaches into server internals (often called NMS), which tends to break with every Minecraft update.
  • No Fabric or Forge. Bukkit plugins don't load on mod loaders. Hybrid servers like Mohist and Arclight try to run plugins and mods together, but they have a reputation for compatibility problems on both sides.

Proxy plugins are separate

Velocity and BungeeCord have plugins too, but they use a different API. A Velocity plugin runs on the proxy and handles things across your whole network, like server switching or network-wide chat. It won't load on Paper, and a Paper plugin won't load on Velocity. Some projects, LuckPerms included, ship a separate build for each platform.

Mods

Mods run on a mod loader: Fabric, Forge or NeoForge. Each mod is built for a specific Minecraft version and a specific loader, so a Fabric mod for 1.21.1 won't load on NeoForge, and often won't load on a later Minecraft version either.

What mods can do

Mods can patch the game's code directly. Fabric mods commonly use a library called Mixin for this. That means they can:

  • Add new blocks, items, mobs, biomes and dimensions with real behavior of their own.
  • Add whole new systems, like machines, magic or automation. Create is the classic example.
  • Change rendering, the UI and other client-side behavior.
  • Rewrite vanilla code paths for performance. Lithium optimizes game logic such as mob AI and block ticking, and it works when installed on the server alone.

What mods cost you

  • Players usually need them too. Any mod that adds something the client has to show, like a new block or mob, has to be installed on every player's client in a matching version. That's what modpacks are for: players install the pack through a launcher like CurseForge or the Modrinth App and get the same set of mods as the server.
  • Version lock. Updating Minecraft means waiting for every mod on your server to update. Big packs can stay on an older version for a long time.
  • Heavier servers. Large modpacks need more RAM and CPU than a plugin server with the same number of players.
  • No Bukkit plugins. You'll need a mod version of any plugin you relied on, if one exists.

Server-side mods

Not every mod needs the client. Some mods are server-side only, such as performance mods like Lithium, permission mods and various utility mods. A Fabric server running only server-side mods can be joined with a vanilla client, which puts it closer to a plugin server in practice. A mod's page on Modrinth lists whether it's needed on the client, the server or both.

Which format for which change

Start with the lightest option that can do the job: vanilla settings first, then a datapack, then a plugin, then a mod.

Check vanilla before anything else. Plenty of "one player sleep" plugins and datapacks exist because vanilla didn't have the option. Since 1.17 there's a game rule that sets what share of players need to sleep to skip the night. Game rules, server.properties and the other config files cover more than most people expect.

Change you wantBest fitWhy
New or changed crafting recipesDatapackRecipes are data, and it works on any server
Custom mob drops or chest lootDatapackLoot tables are built for this
Custom terrain on a new worldDatapack or pluginNeither needs a client install
Custom advancementsDatapackIt's a native feature
Homes, warps, teleport requests, kitsPluginNeeds commands, permissions and saved data
Economy, shops, land claimsPluginNeeds a database and more complex logic
Discord chat bridge, web mapPluginNeeds connections outside the game
Ranks and permission groupsPluginLuckPerms and similar
Bedrock players joiningPluginGeyser, which also has a Fabric version
New blocks, mobs or machinesModThe client has to know about the content
New dimensions with new mechanicsModA datapack can add a dimension, but not new behavior inside it
Deep performance changes on a modded serverModFor example Lithium on Fabric

Common mix-ups

  • A plugin for a recipe. Adding a plugin to change one recipe gives you a dependency that has to be updated with each Minecraft version. A datapack does the same job in a JSON file.
  • A mod loader for server features. Moving to Fabric or Forge to get homes and warps means every player has to install a loader, unless you stick to server-side-only mods. If you don't need new content, a plugin server is simpler for your players.
  • A datapack for a complex system. Datapack economies exist, but once you need per-player data, GUIs and admin commands, a plugin is much easier to maintain.
  • Treating the formats as either-or. A Paper server can run plugins and datapacks together, and a Fabric server can run mods and datapacks together. Datapacks are the one format every server type shares.

Picking server software around it

The format you need should decide your server software, not the other way around. For vanilla gameplay with extras, Paper or Purpur with plugins and datapacks covers most of it. For new content, you need Fabric, Forge or NeoForge with mods, plus a modpack for your players.

The Server Software Comparator puts Vanilla, Paper, Purpur, Spigot, Fabric, Forge, NeoForge, Velocity and BungeeCord side by side, including what players have to install for each one. It's free and works for any server, wherever it's hosted.

ChunkPod is a Minecraft host in early access. If you'd like to run your server there later, join the waitlist to get notified when hosting opens.