For Server Developers

How to Make a Minecraft Server (Paper, Java, and Everything Else)

Paper, the right JDK, and the four decisions that actually determine whether your server survives its first month.

Getting a Minecraft server running takes about ten minutes. Getting one that doesn't get griefed, doesn't crash under six players, and doesn't quietly run the wrong Java version takes a few more decisions. This guide covers both, current as of 26.2.

What you need before you start

Choosing your server software

Paper is the de-facto standard in 2026, and there's little reason left to pick Spigot or CraftBukkit for a new server. It's a drop-in replacement — migrating a vanilla world is automatic — and it carries performance work and configuration options vanilla doesn't.

Pick Fabric instead if what you want is mods rather than plugins. The two ecosystems are separate; Bukkit-family plugins do not run on Fabric.

Forks like Purpur, Pufferfish and Leaf exist, and they mostly matter once you're past 100 concurrent players. Below that, the difference is negligible. We'll also be honest that we could not verify the current maintenance status of each fork — check the project's own repository activity before depending on one.

One 26.1 change that affects plugins

Paper fully dropped its internal remapper in 26.1. Obfuscated names are gone, and plugins compiled against Spigot mappings break. If you're running older plugins or writing your own, read Paper plugin best practices before you update.

Installing the right Java version

From the official PaperMC documentation:

Minecraft versionRequired Java
1.7.10 – 1.11Java 8
1.12 – 1.16.4Java 11
1.16.5Java 16
1.17 – 1.19Java 17
1.20 – 1.21.11Java 21
26.1 and laterJava 25

One conflict worth flagging: at least one third-party mirror lists Paper 26.2 as requiring Java 21. That contradicts the official documentation, and we defer to the official docs — install Java 25 for 26.1 and later. If you want the version history behind that table, see the latest Minecraft update.

First run and the EULA

Drop the jar in an empty folder and run:

java -Xms4G -Xmx4G -jar paper.jar --nogui

The first run stops immediately and generates eula.txt. Open it, change eula=false to eula=true, and run the command again. That's the whole "installation".

Paper server setup: startup script and flags

Two rules for memory. Set -Xms equal to -Xmx — a fixed heap avoids resize pauses. And leave roughly 512MB to 1GB of system RAM outside the heap for the JVM itself and the OS; allocating your entire machine's memory to the heap is a classic way to make things worse.

PaperMC publishes an official Startup Script Generator, which is the easiest correct answer. If you'd rather paste the documented baseline, Aikar's flags are officially recommended in the Paper docs:

java -Xms4G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper.jar --nogui

In fairness: a minority view on r/admincraft holds that these flags are mostly placebo on Java 21 and newer. We're including that because it's a real position, not because we've measured it either way. The flags are the documented baseline, they don't hurt, and they're what support channels will assume you're running.

Configuring the basics

Two recent changes will confuse you if you're following an older guide. allow-nether was removed from server.properties in 1.21.9 — Nether access is now a gamerule, or enable-nether in Paper's global config. And Paper's unsupported-settings.compression-format was merged into vanilla as region-file-compression in 26.1. Full key-by-key detail is in server.properties, fully explained.

Letting friends connect

Port forwarding

The lowest-latency option, and the one that exposes your home IP address to anyone who joins. The risk is real but limited in practice; the sensible discipline is to close the port when the server isn't running.

Tunnels like playit.gg

playit.gg gives you a free tunnel that hides your IP and works behind CGNAT, which port forwarding can't. The trade-offs: you're depending on a third party staying up, and you're adding latency. One report describes severe degradation with three or more players — a single data point, not a general finding, but worth testing early.

Paid hosting

Third-party and anecdotal figures — non-authoritative, and prices move — put vanilla servers around $10–20/month, modded around $20–35, and heavy modpacks around $35–50, with per-gigabyte pricing roughly $1–3/GB.

Self-hosting cuts both ways in the anecdotes. Some admins report a rude awakening once electricity and hardware are counted honestly. Others report the opposite: one ran a low-power box costing around £700 for four and a half years. Both are individual experiences, not a cost model.

Security essentials

Do not set online-mode=false on a public server. It removes account verification entirely, which means anyone can join impersonating anyone — including your operators — and multiple sources treat it as an EULA violation. If your situation genuinely requires it, mitigate with a whitelist plus an authentication plugin such as AuthMe Reloaded or FastLogin, and understand you're accepting the risk.

The whitelist is the highest-value control you have; r/admincraft calls it the number one way to protect against random griefing. Beyond that, three habits: take backups and verify they restore, hand out operator status sparingly and revoke it when it's no longer needed, and keep configuration under version control so you can see what changed.

Common first-time mistakes