How to Make a Modded Minecraft Server

A practical guide to building your own modded Minecraft server, from picking a modpack to handling the long-term maintenance most guides skip.

Last updated:
Author Jason Moth
Disclosure: When you purchase through links on our site, we may earn a referral fee.
Learn More

Setting up a modded Minecraft server is mostly about getting four things to match. The Minecraft version, the modloader, the Java version, and the mod set itself. When all four line up, a modded server runs about as smoothly as vanilla. When even one is off, the server either refuses to start or boots cleanly until the first chunk loads and then everything falls apart.

This guide is for anyone who’s picked a pack (or is about to) and wants to actually get it running. We’ll cover what your pack tells you to do, how much RAM you actually need, how to set up the server yourself or skip that work entirely, and the recurring chores you’ll deal with once it’s live.

Pick Your Modpack First

For most people, the modpack is the entry point. You watched a YouTuber play Better MC, your friends decided everyone’s running All The Mods 10 this winter, or you want to try Cobblemon because someone in your group won’t stop talking about it. Once you’ve picked a pack, the Minecraft version, modloader, Java version, and RAM requirements are decided too. They all sit on the pack’s launcher page.

Some of the Most Popular Minecraft Modpacks

The four catalogs worth knowing about are CurseForge, Modrinth, FTB App, and Technic. Most popular packs live on CurseForge or get mirrored across multiple catalogs. A handful of starting points by vibe:

  • Kitchen-sink tech and magic. All The Mods 10 (NeoForge 1.21.1), Enigmatica 9, FTB NeoTech
  • Hardcore survival. RLCraft (Forge 1.12.2, still the legacy poster child), Vault Hunters
  • Specific themes. Cobblemon (Fabric, monster-catching), Create-focused packs like Create: Astral
  • Curated vanilla-plus overhauls. Better MC, RAD 2
  • Skyblock and questing. SkyFactory 4, FTB Skies, Project Ozone 3

You can also build a custom pack by picking individual mods, but unless you’ve spent serious time inside the modded scene, don’t. Pack authors have already resolved hundreds of dependency conflicts you’d otherwise discover one crash at a time. Start with a published pack and customize from there. The next thing to figure out is whether your machine can run it.

Modpack Requirements

Every modpack page tells you the same three things. The Minecraft version (e.g., 1.20.1, 1.21.1), the modloader (Forge, NeoForge, Fabric, or sometimes Quilt), and the Java version. Match all three on the server side and you’re 80% of the way there.

A quick rundown on the loaders, since 2026 looks different from 2023.

Forge has been the default modloader for years and still owns the back catalog. RLCraft, anything on 1.12.2 or 1.16.5, plenty of 1.20.1 packs.

NeoForge is the community-driven fork that took over from Forge for Minecraft 1.20.5 and newer. Most major new packs (ATM10, FTB NeoTech, Enigmatica 10) are NeoForge now. If your pack is on 1.20.5 or later, it’s probably NeoForge.

Fabric is lightweight and modular. Cobblemon, performance mods like Sodium and Lithium, and a growing slice of content packs.

Quilt is a Fabric-compatible fork. Niche, but if a pack specifies it, use it.

Match the loader exactly. Forge mods don’t run on Fabric servers, Fabric mods don’t run on Forge servers. NeoForge is mostly a drop-in for Forge but only for 1.20.5 and newer. Mixing breaks the server before the world even loads.

RAM and CPU Requirements

Two questions matter here. How much RAM, and how good a CPU.

For RAM, real numbers tied to real packs:

Pack TypePlayersRecommended RAM
Vanilla1-102-3 GB
Light modpack (under 50 mods)1-104-6 GB
Medium modpack (50-100 mods)1-106-8 GB
Heavy modpack (100+ mods)1-108-12 GB
RLCraft1-106-8 GB
Better MC1-108-10 GB
Cobblemon1-104-6 GB
FTB NeoTech1-108-10 GB
All The Mods 101-510-12 GB
All The Mods 105-1512-16 GB
Heavy modpack20+ players16+ GB

Those numbers are realistic floors. A 100-mod pack will technically boot on 4 GB but stutter every time someone explores fresh chunks. Adding 2 GB of headroom usually pays for itself in TPS.

CPU matters more than most beginners realize. Modded Minecraft is largely single-threaded, which means single-core clock speed and IPC count for more than the core count. A modern 5+ GHz Ryzen 9 chip will run modded servers noticeably better than an older 3 GHz Xeon, even if the Xeon has more cores. This is also why “I have 32 GB in my gaming PC” doesn’t mean you can run an ATM10 server while gaming on the same machine. Both workloads are fighting for CPU time on the same cores.

If your machine doesn’t have the headroom (or you don’t want to leave it on 24/7), a managed Minecraft host is the practical option. ServerPrism starts around 2 GB and scales up to 128 GB on the same plan ladder. Ryzen 9-class CPUs and NVMe storage across the tiers, so you can pick the right size for your pack and resize the plan later if your needs change.

Setting Up the Server

If you’re going managed, skip ahead. Pick a plan, install your pack from the panel’s modpack catalog, and you’re done. The rest of this section is for self-hosting.

The basic flow looks the same regardless of which loader your pack uses. Install Java, download the loader installer, install the server, accept the EULA, drop in the pack files, edit server.properties, start it up. The specifics differ slightly between loaders.

Install the Right Java Version

Modded Minecraft pins itself to specific Java major versions. Minecraft 1.18.2 to 1.20.4 needs Java 17. Minecraft 1.20.5 and newer needs Java 21. Forge for 1.12.2 still uses Java 8, which matters for legacy packs like RLCraft.

Adoptium is the cleanest free distribution. On Windows, install via the .msi. On Linux, your package manager almost certainly has openjdk-17 or openjdk-21 ready (apt install openjdk-21-jdk on Ubuntu, etc.). Make sure java -version returns the version you actually want before continuing.

Install the Loader

The download is loader-specific.

  • NeoForge. For Minecraft 1.20.5 and newer. Get the installer from neoforged.net.
  • Forge. For legacy versions (1.20.1 and earlier). files.minecraftforge.net.
  • Fabric. Cleanest experience. Download the Executable Server JAR from fabricmc.net and it works as a drop-in replacement for the vanilla server JAR.
  • Quilt. Niche but well-documented. Installer at quiltmc.org, GUI or CLI.

For Forge or NeoForge, run the installer with the headless flag.

JavaScript
java -jar neoforge-XX.X.X-installer.jar --installServer

For Fabric, the executable JAR is the install. For Quilt, the installer has both GUI and CLI modes.

One persistent gotcha. Forge and NeoForge installers will sometimes fail because they can’t fetch the matching vanilla server JAR. If that happens, install the vanilla server first (download server.jar from minecraft.net, run it once), then rerun the loader installer.

Accept the EULA and Drop In Your Pack

After the installer runs, you’ll have a server folder with libraries, scripts, and the server JAR. Run the server once. It’ll create eula.txt and stop. Open eula.txt, change eula=false to eula=true, save, run again. The server boots, generates server.properties, and creates the world.

Stop the server. Now drop in your pack files (mods folder, config folder, sometimes kubejs or defaultconfigs). Most packs ship as a Server Pack ZIP from CurseForge or as an .mrpack from Modrinth. Extract everything into your server directory.

Start the server again. Watch the console. If everything matches, the server boots, generates the world, and waits for connections. If something doesn’t match, the console will tell you which mod is unhappy.

Edit Server.properties

A few settings worth tweaking right away. motd is the message of the day, the line players see in your server list. max-players caps the player count. view-distance and simulation-distance matter more than they sound.

Lower simulation-distance especially on heavy packs. Modded entities and block AI are far heavier than vanilla, and the simulation distance controls how far from each player the server actively ticks entities and blocks. A simulation distance of 6 instead of 10 is often the difference between a smooth server and one that stutters every time a player explores.

Port Forwarding, CGNAT, Public IPs

If your server lives on your home machine, friends can’t connect to it from outside your network until you’ve forwarded the port. Minecraft’s default is 25565. The actual procedure depends on your router (look up your model plus “port forwarding”), but the broad steps are the same. Log into the router’s admin page, find port forwarding or virtual servers, point port 25565 to your machine’s local IP.

Then there’s CGNAT. Carrier-grade NAT is a second layer of address translation that sits at your ISP. If your ISP uses CGNAT, your home router doesn’t actually have a public IP, it has a private IP behind a shared public one. Forwarding ports through your router won’t reach you from the outside no matter how perfectly you set it up. Mobile-tethered connections, fiber on shared IPv4, and increasingly even residential cable connections can be CGNAT.

A Diagram Displaying how CGNAT Works

Two ways to check. Look at your router’s WAN IP and compare it to whatismyipaddress.com. If they don’t match, you’re behind CGNAT. The other way is calling your ISP and asking for a static or non-CGNAT IP. Some will sell you one, some won’t.

If you’re stuck behind CGNAT, you have three options. Pay your ISP for a real IP. Use a tunneling service like playit.gg or Tailscale, which run an outbound agent and proxy connections through their network. Or pay a managed host that already has a real IP attached to your server.

Maintaining the Server Long-term

Two recurring chores once your server’s running. The first is modpack updates, the second is occasionally swapping packs entirely.

Pack updates happen often. Pack authors push fixes, balance tweaks, and feature changes regularly, sometimes weekly when a pack is in active development. On a self-hosted setup, you’re downloading the new server pack from CurseForge or Modrinth, comparing it to your existing folder, and replacing the mods, configs, and sometimes scripts. Backup the world first, since adding or removing mods can corrupt chunks if items or blocks from removed mods exist in loaded areas.

Switching to an entirely different pack is the bigger problem. The world your players have built is tied to the mods that generated it. Move from ATM10 to RLCraft and your world’s chunks reference blocks and items that no longer exist. Most hosts handle this by making you wipe the server and start over. On ServerPrism, if your group wants to try a different modpack for a few weeks and come back to your existing world later, both setups stay recoverable. Modpack, modloader, or game changes become reversible experiments rather than one-way commitments. The swap itself wipes the files (with a confirmation dialog that’s hard to click through accidentally), but snapshotting first through the panel’s backup workflow lets you restore the previous setup later.

ServerPrism’s Runtime Switch Confirmation Dialog

Where the panel does help is the day-to-day work that doesn’t need a full runtime change. ServerPrism’s Mod Manager browser has filter buttons for Forge, Fabric, NeoForge, and Quilt across the top, with a one-click Install button on each mod. Adding optimization mods like Lithium, Sodium, FerriteCore, or Krypton is faster than the FTP-and-replace dance most hosts make you do. The Modpacks tab handles modpack installs from CurseForge, Modrinth, FTB, and Technic the same way. Pick the pack, click install, the panel handles file placement. Resource scaling works the same. Resize the plan up or down without rebuilding the server.

ServerPrism’s Minecraft Mod Manager

The FTP step is mostly gone from ongoing maintenance. A full loader change still needs the standard backup-switch-restore workflow you’d run anywhere.

Handling Crashes

When a modded server refuses to start, the same handful of problems are usually responsible. The most common by far is a Java version mismatch. The pack expects Java 21 and you’ve got Java 17 installed, or the other way around. Run java -version and compare it to what the pack’s launcher page asks for.

Loader build mismatches come second. Your server is running Forge 47.2.0 but your client downloaded 47.1.0, and even that small difference can refuse the connection. Update one side to match the other exactly. Missing dependency libraries are the third regular suspect. Most Fabric and Quilt mods need Fabric API or QFAPI to function, and if those aren’t in the mods folder, the dependent mods either fail silently or throw cryptic class-not-found errors at boot. Drop the libraries in and try again.

Another frequent cause is a client-only mod ending up on the server. Shaders, minimaps, HUD overlays, sound packs. These only run on the client side, and the server console will complain about a class it can’t find. Pull them out of the server’s mods folder if you accidentally uploaded them with the rest of the pack.

A few less common ones still worth knowing about. After upgrading Fabric or NeoForge, the old .fabric folder occasionally needs to be deleted manually before the new loader runs cleanly. Hybrid stacks like Mohist and Magma try to run plugins and mods in the same server, and they can pull it off most of the time, but they also inherit failure modes from both ecosystems and tend to fall over on heavy packs. And if you’ve removed a mod from a world that was already populated, block entities from the missing mod will crash chunk loading on the next boot. Restore the mod, remove the affected blocks with /tp and /setblock, then remove the mod again from a clean slate.

When in doubt, the first error in the log file usually points at what’s wrong. Read the top of the stack trace, not the bottom of the wall of text.

Wrapping Up

Modded Minecraft is one of the few games where running your own server is genuinely worth the extra work. The world you build over a season actually feels like yours in a way no public server does, and the pack you put together (or grab off CurseForge in 90 seconds) does things vanilla never will. The trade is that you’re the sysadmin now, which means inheriting the small annoyances that come with the territory. Wrong Java versions, missing Fabric API, the friend who keeps trying to connect with his client on a different Forge build than everyone else.

If you’re starting fresh, run a vanilla server first to confirm Java and networking work properly on your setup. Add your pack on top once that’s verified, and only reach for optimization mods if performance actually starts dragging. Back up your world before every change in the mods folder. Skipping that step is how you eventually lose someone’s base to chunk corruption.

Leave a reply
Comment policy: We love comments and appreciate the time that readers spend to share ideas and give feedback. However, all comments are manually moderated and those deemed to be spam or solely promotional will be deleted.