// guide
How to make a modded Minecraft server
A modded server is a normal Minecraft Java server with a mod loader and the same mods your players run. The steps are the same for any pack: get the server files, run them on the right Java, give them enough RAM, accept the EULA, then let your friends in. This guide does it by hand on your own PC or VPS, and shows where a host saves you steps.
1. Pick a pack or a loader
Most people start from a modpack on CurseForge or Modrinth. The pack decides everything else: the Minecraft version, the loader (Forge, NeoForge or Fabric) and the exact mod list. Before you start, note four things from the pack’s page: its Minecraft version, its loader, whether it publishes a server pack, and how much RAM its authors suggest. Our modpack guides list all four for every pack we’ve checked.
If you’re building your own mod list, choose the Minecraft version and loader first, then only use mod files built for that exact pair. A Fabric mod won’t load on Forge, and a 1.20.1 mod won’t load on 1.21.1. Mixing them is one of the most common crashes (wrong mod loader).
Whatever you pick, give the server its own empty folder. Don’t build it inside your game’s instance folder.
2. Get the server files
Route A: a CurseForge server pack
Many CurseForge packs publish a ready-made server pack for each release. Open the pack’s Files tab, click the version your players will use, and look under Additional Files. Two examples we checked:
- All the Mods 10 8.2 has
ServerFiles-8.2.zip(over 1 GB) as an additional file. - Prominence II v4.1.2 has “Serverpack for v4.1.2” there, even though its Modrinth version has no server file.
Some packs put the server pack on the main file list instead, so if there’s nothing under Additional Files, look there for a file with “server” in its name. Extract it into your empty folder. Inside the ATM10 zip, for example, are mods/, config/, defaultconfigs/, kubejs/, datapacks/, the NeoForge installer, user_jvm_args.txt and two start scripts (startserver.sh and startserver.bat). On first run its script installs NeoForge, refuses to start on anything older than Java 21, and then starts the server. When a pack ships its own start script, use it, and read its comments: ATM10’s explains how to point it at a specific Java.
Route B: a Modrinth pack (.mrpack)
Modrinth packs come as one .mrpack file, which is a zip. It doesn’t contain the mods themselves. It has a modrinth.index.json that lists every file with its download link and an env field saying whether the client and the server need it, plus an overrides/ folder of configs and other files (and optionally server-overrides/ for the server only).
A tool can build the server from that. mrpack-install installs the loader, downloads every file the index doesn’t mark as unsupported on the server, and copies the overrides:
mrpack-install cobbleverse 1.7.42 --server-dir server
It only knows what the pack author wrote in env, and many packs mark everything as needed on both sides. Check the version you download, too: the last stable release, v0.16.10 from February 2024, sets up Fabric, Quilt and Forge servers but not NeoForge. NeoForge support is only in its newer beta builds. For the manual way, and for packs with no server pack at all, see making a server for a modpack with no server pack.
Route C: just the loader, for your own mods
- NeoForge or Forge: download the installer jar for your Minecraft version from neoforged.net or files.minecraftforge.net, put it in the empty folder, and run it with
--installServer:
For Minecraft 1.17 and newer it writesjava -jar neoforge-21.1.209-installer.jar --installServerrun.sh,run.bat,user_jvm_args.txtand alibraries/folder. Put your mods in amods/folder next to them. More in our NeoForge server guide. - Fabric: on fabricmc.net/use/server, pick the Minecraft and loader versions and download the executable server jar, named like
fabric-server-mc.1.21.1-loader.0.18.4-launcher.1.1.2.jar. No installer needed. Most Fabric mods also need Fabric API inmods/.
3. Install the right Java
The Java version follows the Minecraft version, whatever the loader:
| Minecraft | Java |
|---|---|
| 26.1 and newer | Java 25 |
| 1.20.5 – 1.21.11 | Java 21 |
| 1.18 – 1.20.4 | Java 17 |
| 1.17 | Java 16 |
| 1.16.5 and older | Java 8 |
Eclipse Temurin (adoptium.net) has free builds of each; the JRE is enough for a server. Newer isn’t better here: a 1.20.1 Forge pack can fail on Java 25, and Forge for 1.12.2 won’t start on anything above Java 8. The Minecraft Java version chart explains why and how to run several Java versions side by side, and lists the Java for every pack we cover.
4. Start it and accept the EULA
Open a terminal in the server folder and start it:
- Forge 1.17+ and NeoForge:
sh run.sh noguion Linux or macOS, or double-clickrun.baton Windows. The script starts the server with youruser_jvm_args.txt. - Forge 1.16.5 and older:
java -Xmx4G -jarfollowed by the Forge jar the installer created, thennogui. - Fabric:
java -Xmx4G -jar fabric-server-mc.1.21.1-loader.0.18.4-launcher.1.1.2.jar nogui(with your jar’s name). - A server pack with its own script: run that script instead.
The first start always stops early with:
You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
That’s expected. Open eula.txt in the server folder, read Mojang’s EULA (the link is in the file), change eula=false to eula=true, save, and start the server again. If it keeps asking, see EULA not accepted.
The second start loads every mod and generates the world, which takes a while on a big pack. It’s ready when the console prints Done (…)! For help, type "help". A wall of WARN lines on the way is normal. To shut down, type stop in the console and wait for it to finish saving the world.
5. Set the RAM
On Forge 1.17+ and NeoForge, RAM goes in user_jvm_args.txt. The installer writes it with the setting commented out:
# Xmx and Xms set the maximum and minimum RAM usage, respectively.
# They can take any number, followed by an M or a G.
# M means Megabyte, G means Gigabyte.
# For example, to set the maximum to 3GB: -Xmx3G
# To set the minimum to 2.5GB: -Xms2500M
# A good default for a modded server is 4GB.
# Uncomment the next line to set it.
# -Xmx4G
Remove the # from the last line and set your number, for example -Xmx8G for a mid-size pack. On Fabric and old Forge, the -Xmx goes in the java command itself, as in step 4.
-Xmx caps Java’s heap, and the process uses some memory on top of it. Leave room for that and for your operating system, and if you play on the same PC, for your own game too: a modded client needs plenty of RAM as well. How much a pack needs depends mostly on its size and your player count; how much RAM a modded server needs has a table.
6. Open it to your friends
On the same network
Friends on your home network can join with your PC’s local address, like 192.168.1.20. Minecraft listens on port 25565 unless you changed server-port in server.properties.
Over the internet: port forwarding
- Give your PC a fixed local address (a DHCP reservation in your router), so the rule keeps pointing at it.
- In your router, forward TCP port 25565 to that address. The menu is usually called port forwarding or virtual servers.
- Allow Java through your PC’s firewall.
- Give friends your public IP address (search “what is my IP”). They join with that address, plus
:portif you changed it.
Check for CGNAT first. Compare the WAN address your router reports with the public IP a “what is my IP” search shows. If the two differ, or the router’s address is in the 100.64.0.0 to 100.127.255.255 range, you’re most likely behind CGNAT: your provider puts several customers behind one public address, and port forwarding on your router won’t help. Your options are asking the provider for a public IPv4 address, using a tunnel service, or hosting the server elsewhere.
Two more things to know: everyone you give the address to can see your home IP, and the server is only up while your PC is on. If the server won’t start because the port is taken, see failed to bind to port. If it runs but friends can’t get in, why friends can’t join a modded server goes through each error message they might see.
On a host
A hosted server comes with its own address and nothing to forward. That’s most of what you pay for in this step.
7. Friends join with the same pack
Every player needs the same pack, at the same version, as the server. Install it from the same source in a launcher that supports modpacks, such as the CurseForge app, the Modrinth App or Prism Launcher, and check the version number matches. A player on a different pack version, or missing a mod, usually can’t connect, or is disconnected right after joining.
- Client-side extras are fine. Players can add their own shaders or minimaps. Those stay on their PC; never copy them to the server (client-only mod on the server). Not sure which side a mod belongs on? Try the client-or-server-side checker.
- Keep it private. Type
whitelist add PlayerNamefor each friend, thenwhitelist on. On Minecraft 26.3 and newer, a freshly createdserver.propertiesalready has the whitelist on, so add your friends before they try to join.op PlayerNamegives someone admin commands. - Updating later means updating the server and every player together. How to update a modpack server covers it without losing your world.
8. Home or hosted: the honest costs
Hosting at home costs no subscription, and for a few friends who play while you’re online, it’s a fine way to start. The costs are real, though; they’re just not on a bill from us.
| Your own PC | A host (DSN) | |
|---|---|---|
| Money | Electricity. A PC drawing 100 W around the clock uses 72 kWh a month (100 W × 720 hours); multiply by your rate. Check your own PC’s draw. | Planned at Standard $16 (4 GB), Premium $30 (8 GB) or Heavy $42 (12 GB) a month. Ordering is closed until we relaunch. |
| When it’s up | Only while your PC is on and awake. | Runs without your PC. We don’t promise an uptime SLA. |
| Performance | Shares CPU and RAM with whatever else you run, including your own game. | Hardware picked for single-core speed. Our first servers had a Ryzen 7 5800X and NVMe storage; the relaunch hardware isn’t final yet, and we’ll publish the CPU and storage before ordering opens. |
| Network | Port forwarding, possibly CGNAT, your upload speed, your home IP shared. | Its own address, and no home IP to hand out. Our first servers ran in US East (Virginia) behind the data center’s network DDoS protection; we’ll confirm the location and DDoS protection with the new hardware. |
| Backups | Whatever you set up yourself. | Nightly off-site backups with monthly restore checks, plus 5 on-demand backups. |
| Your time | You’re the admin: installs, updates, crashes. | Still yours for the pack, but the panel does the installs, and support is by email or Discord. |
Measure your own PC’s power draw with a plug-in meter if you want a real number; ours above is only an example of the sum.
When it won’t start
Paste the end of the console, logs/latest.log or the newest file in crash-reports/ into the free crash log analyzer. It names the error and the fix. The usual first-boot problems:
- Wrong Java version — “Unsupported class file major version”
- Client-only mod on the server — “invalid dist DEDICATED_SERVER”
- Missing mod dependency — a mod that needs a library you didn’t add
- Out of memory — “Java heap space”
Or skip steps 2 to 6.
On DSN, the panel installs Forge, NeoForge, Fabric or a CurseForge or Modrinth pack in one click. You pick Java from a dropdown, accept the EULA yourself in the console, and get a file manager, SFTP and scheduled tasks. We're moving DSN Servers to new hardware, and ordering is closed until then. Join the launch list and we'll email you when servers open.