This sits on top of a vanilla Minecraft Java Edition server on a LochStudios KVM VPS. Same minecraft user, same /home/minecraft/server directory, same TCP port 25565. You swap the jar, then drop files into plugins/ or mods/.
Need that vanilla server first? Set up a Minecraft Java Edition server on Linux. Need a VPS? See VPS. On a dedicated server, open a support ticket and we will size the box with you.
This is not Minecraft Bedrock, and it is not a cPanel job.
Pick plugins or mods (not both)
| Path | What players install | Typical use |
|---|---|---|
| Paper (plugins) | Vanilla Minecraft Java only | Chat, economy, claims, anti-grief, permissions |
| Fabric or Forge / NeoForge (mods) | The same loader and the same mods as the VPS | New blocks, dimensions, gameplay overhauls |
Pick one process. A Paper plugin .jar does not load on Fabric. A Fabric or Forge mod does not load on Paper. Hybrid "plugins plus mods" jars are a separate, brittle stack. We do not start there.
Paper is the plugin server we recommend. It speaks the Bukkit / Spigot plugin API and performs better than building Spigot yourself. You do not need BuildTools.
Fabric is the lighter mod loader. Forge and NeoForge have the larger classic mod lists. Every player must match the loader and the Minecraft version.
A vanilla world usually loads on Paper of the same Minecraft version. Paper extra data can make a later return to vanilla painful. Do not convert a Paper world to Fabric or Forge. Restore the backup from before you changed jars if you want a different path.
Before you start
- Sign in at the portal, open the VPS service, and keep that page open. Copy the IPv4 from there. Do not guess a hostname.
- Connect with a sudo user, or
rooton a fresh box.
- Connect to your VPS via SSH from macOS or Linux
- Connect to your VPS via SSH from Windows
- Confirm Java still matches the Minecraft version you will run. Current official jars (26.x) need Java 25. Older 1.21.x needs Java 21. Table and install steps: Set up a Minecraft Java Edition server on Linux.
- Prefer a systemd unit already in place: Run a Minecraft server as a systemd service (auto-start). That unit expects
User=minecraft,WorkingDirectory=/home/minecraft/server, and (for Paper)server.jar.
If SSH from your computer will not connect, open the console on the same VPS service. That session does not need port 22 from your network.
Plugins and mods use more RAM than vanilla. Keep -Xmx below the VPS size so the OS still has room. Raise the heap only when free -h still shows spare RAM. A 2 GB VPS is not enough once you add a plugin pack.
Step 1: Back up the world, then stop the process
Stop first so files are not mid-write.
sudo systemctl stop minecraft
If you still start the jar in SSH instead of systemd, type stop in that console and wait for the process to exit. Do not use Ctrl+C as your usual stop.
Copy the world (and the Nether / End folders if they exist):
sudo -u minecraft cp -a /home/minecraft/server/world /home/minecraft/server/world.backup
sudo -u minecraft cp -a /home/minecraft/server/server.jar /home/minecraft/server/server-vanilla.jar
# Only if these directories already exist:
sudo -u minecraft cp -a /home/minecraft/server/world_nether /home/minecraft/server/world_nether.backup
sudo -u minecraft cp -a /home/minecraft/server/world_the_end /home/minecraft/server/world_the_end.backup
A dated tarball of the whole tree is better before a big change: Back Up and Restore a Game Server World or Save.
Path A: Paper (plugins)
Players keep using ordinary Minecraft Java. Only the VPS changes.
A1: Download Paper
- On your computer, open papermc.io/downloads/paper.
- Pick the same Minecraft version as your world (current Paper tracks 26.x; older worlds stay on their 1.21.x line).
- Copy the direct
.jarURL for that build. The hash in the URL changes every build. Do not reuse an old one from a blog.
sudo -u minecraft wget -O /home/minecraft/server/paper.jar 'PASTE_THE_JAR_URL'
ls -lh /home/minecraft/server/paper.jar
The file should be tens of megabytes. A few-kilobyte file is an HTML error page, not the jar. Delete it and copy the URL again.
A2: Make it server.jar
sudo -u minecraft mv /home/minecraft/server/paper.jar /home/minecraft/server/server.jar
sudo chown -R minecraft:minecraft /home/minecraft/server
eula.txt from the vanilla setup still applies. Do not recreate it with sudo -u minecraft echo ... > eula.txt. The > redirect runs as your shell user and can leave a file minecraft cannot write.
If you ever need to write it again:
printf 'eula=true\n' | sudo -u minecraft tee /home/minecraft/server/eula.txt
A3: Start once so plugins/ appears
If the systemd unit already points at server.jar:
sudo systemctl start minecraft
sudo journalctl -u minecraft -f
Wait until the log says it is done, then Ctrl+C to leave the log view, and:
sudo systemctl stop minecraft
You should now have /home/minecraft/server/plugins/.
No unit yet? Start it once by hand, then install the unit before you walk away:
sudo -u minecraft -H bash -c 'cd /home/minecraft/server && java -Xmx4G -Xms4G -jar server.jar nogui'
Type stop when it is done. Match -Xmx / -Xms to the RAM table in the vanilla article.
A4: Add plugin jars
Put only .jar files in plugins/. Common catalogues:
- Hangar (Paper's own plugin list)
- Modrinth (filter to the Paper / Bukkit loader)
- SpigotMC resources
- Bukkit Dev
Match the plugin's Minecraft version (or the range it claims) to your Paper version. Read the plugin page for dependencies. WorldGuard needs WorldEdit. A lot of economy plugins need Vault.
Download the jar on your computer, confirm the size looks like a real jar (not a 2 KB HTML page), then copy it up. Replace USER and the IPv4 with the sudo user and the address on the VPS in the portal:
scp worldguard.jar USER@YOUR.IPV4.HERE:/tmp/worldguard.jar
On the VPS:
sudo mkdir -p /home/minecraft/server/plugins
sudo mv /tmp/worldguard.jar /home/minecraft/server/plugins/worldguard.jar
sudo chown minecraft:minecraft /home/minecraft/server/plugins/worldguard.jar
Repeat for each plugin. If a project publishes a direct .jar URL you can wget that URL as the minecraft user into plugins/. Do not wget a project homepage or a /latest/download page that returns HTML.
A5: Restart and read the console
sudo systemctl start minecraft
sudo journalctl -u minecraft -n 80
Look for each plugin enabling without an error. Most plugins write a config folder under plugins/ on first run.
Do not type reload or /reload in the game console. That command leaves plugins in a half-loaded state. Change a config, then:
sudo systemctl restart minecraft
A6: Edit a plugin config
Example after EssentialsX has created its folder:
sudo -u minecraft nano /home/minecraft/server/plugins/Essentials/config.yml
Save, then sudo systemctl restart minecraft.
Sensible first plugins
| Plugin | Role | Notes |
|---|---|---|
| LuckPerms | Groups and permissions | Set this up before you hand out /op |
| EssentialsX | Homes, kits, chat basics, spawn | Often paired with Vault |
| Vault | Economy / permissions bridge | Install it when another plugin asks for it |
| WorldEdit | Selection and terraforming | Required by WorldGuard |
| WorldGuard | Region claims and protection | Needs WorldEdit |
| CoreProtect | Block logging and rollback | Disk and CPU grow with activity |
You do not need all of these. Add one, restart, confirm the console is clean, then add the next.
Path B: Fabric or Forge (mods)
Every player must install the same Minecraft version, the same loader, and the same mods. If that is more than you want to support, stay on Paper.
Use a vanilla world backup. Do not point Fabric or Forge at a world that has already been running on Paper.
B1: Choose a loader
- Fabric: lighter, many performance and QoL mods. Worked example below.
- Forge or NeoForge: larger classic catalogues (new biomes, magic, tech packs).
Do not mix Fabric mods and Forge mods in one folder.
B2: Install Fabric
- On your computer, open fabricmc.net/use/server.
- Select the Minecraft version that matches the world you intend to load.
- Copy the Executable Server (.jar) URL. Loader and installer numbers change. Do not reuse an old
fabric-installer-0.11.2command from a tutorial.
sudo systemctl stop minecraft
sudo -u minecraft wget -O /home/minecraft/server/fabric-server-launch.jar 'PASTE_THE_JAR_URL'
ls -lh /home/minecraft/server/fabric-server-launch.jar
Again, tens of megabytes (or a launcher that then pulls the rest on first run). A tiny HTML file is wrong.
The first start downloads the matching vanilla server into this directory. Keep eula.txt as eula=true and owned by minecraft.
Create the mods folder before you start:
sudo -u minecraft mkdir -p /home/minecraft/server/mods
sudo chown -R minecraft:minecraft /home/minecraft/server
B3: Point systemd at the Fabric jar
The Minecraft unit from the vanilla article launches server.jar. Fabric's process is fabric-server-launch.jar. Edit the unit:
sudo nano /etc/systemd/system/minecraft.service
Set ExecStart to your heap size and the Fabric jar, for example:
ExecStart=/usr/bin/java -Xmx4G -Xms4G -jar fabric-server-launch.jar nogui
Keep User=minecraft and WorkingDirectory=/home/minecraft/server. Then:
sudo systemctl daemon-reload
sudo systemctl start minecraft
sudo journalctl -u minecraft -n 80
B4: Add mods
Catalogues:
- Modrinth (filter to Fabric or to Forge / NeoForge)
- CurseForge
Each file must match three things: Minecraft version, loader (Fabric vs Forge), and any required library mod (almost every Fabric pack needs Fabric API). Drop .jar files into /home/minecraft/server/mods/, fix ownership, restart systemd.
sudo chown minecraft:minecraft /home/minecraft/server/mods/*.jar
sudo systemctl restart minecraft
sudo journalctl -u minecraft -n 80
A crash on startup is usually a version mismatch or a missing library mod. Read the first ERROR in that journal, not the last line.
B5: Give players the same pack
Players cannot join a Fabric or Forge server with a vanilla client.
- Install Prism Launcher (or another instance manager) on each PC.
- Create an instance for the same Minecraft version and loader as the VPS.
- Copy the jars from
/home/minecraft/server/mods/into that instance'smods/folder. Include Fabric API (or the Forge / NeoForge equivalents). - Launch that instance, then add the server as
YOUR.IPV4.HERE:25565.
Changing one mod on the VPS means updating every player.
Forge or NeoForge instead
Download the official installer from the Forge or NeoForge site for your Minecraft version. On the VPS, as minecraft, run it with --installServer in /home/minecraft/server. That writes a libraries/ tree and a run.sh (or equivalent) instead of a single server.jar.
Point systemd ExecStart at that run.sh, or open a support ticket and we will wire the unit with you. Tell us the VPS service, the Minecraft version, and whether you chose Forge or NeoForge. Do not put the password in the ticket.
Worlds, RAM, and mixing
- Paper of the same version can load a vanilla world. Take the backup in Step 1 first.
- Going back to vanilla from Paper can fail or drop Paper-only data. Keep
server-vanilla.jarand the world backup. - Fabric / Forge belong on a vanilla (or same-loader) world, not on a Paper world.
- Too many plugins or mods will hitch the tick loop. Lower
view-distanceandmax-playersinserver.propertiesbefore you keep adding jars. - Watch RAM and CPU with Monitor Server Resources. If the kernel is swapping, add swap: Add Swap Space to Your VPS, or raise the VPS size from VPS.
Players still connect to the IPv4 on the VPS in the portal, port 25565. Firewall recap: Open the Right Firewall Ports for Your Game Server.
If it will not start, or a plugin or mod fails
The new jar is a few kilobytes. The download was a web page. Get a fresh URL from Paper or Fabric and replace the file.
Unsupported class file or a Java version error. Java does not match that Minecraft line. Check java -version against the table in the vanilla article.
A plugin is listed as disabled. Read sudo journalctl -u minecraft -n 100. Usual causes: wrong Minecraft version, a missing dependency jar, or a second copy of the same plugin in plugins/.
reload made things worse. Stop using it. sudo systemctl restart minecraft is the clean path.
Fabric or Forge crashes during Loading mods. One jar is for the other loader, or for another Minecraft version. Remove the last jar you added and retry.
Players on a modded server see a registry / missing-mod disconnect. Their instance does not match the VPS pack. Sync mods/ again.
The VPS feels slow after you added jars. Remove the heaviest plugin or mod, lower view-distance, and confirm -Xmx is not the entire VPS RAM.
Still stuck? Open a support ticket. Tell us the VPS service, Paper vs Fabric vs Forge, the Minecraft version, and java -version. Do not send the password.
What to do next
- Vanilla install (Java, EULA,
server.properties): Set up a Minecraft Java Edition server on Linux - Auto-start on reboot: Run a Minecraft server as a systemd service (auto-start)
- World backups: Back Up and Restore a Game Server World or Save
- Player ports: Open the Right Firewall Ports for Your Game Server
A step is unclear? Open a support ticket and we will walk through the VPS and the jar layout with you.