How to set up a Minecraft server from scratch
Full setup walkthrough for a Minecraft Java Edition dedicated server: pick the right flavor (Vanilla, Paper, Spigot, Purpur, Fabric, Forge), configure server.properties, tune performance (view-distance, simulation-distance, Paper's config/paper-global.yml), set up ops and whitelist, install plugins or mods, wire up a BungeeCord / Velocity proxy for multi-server networks, and fix the common errors. Separate section for Bedrock Edition.
- What you need first
- Pick a server flavor
- Deploy the server (1-click)
- File layout & where things go
- Core
server.propertiessettings - Performance tuning (Paper)
- Ops, whitelist, bans
- Plugins (Paper/Spigot) & mods (Fabric/Forge)
- BungeeCord / Velocity proxies
- Bedrock Edition notes
- Connect and test
- Common errors and fixes
What you need first
- An active Minecraft plan on Fatality Servers. See our Minecraft hosting plans.
- A Minecraft Java Edition license per player (for Bedrock: a Bedrock copy each). The server binary itself is free.
- Enough RAM โ Minecraft is Java-based and hungry. Per-player rule-of-thumb: 100 MB base + 50 MB per concurrent player (vanilla), 200 MB + 100 MB per player (plugin-heavy Paper), 1 GB + 200 MB per player (large modpack like ATM10 or GT:NH).
- A basic SFTP client (FileZilla, WinSCP) and a text editor that won't mangle YAML (VS Code, Notepad++).
Sizing note: view-distance & mob density matter more than raw player count. A vanilla 10-player server on view-distance=10 uses 2-3 GB; bumping to view-distance=32 pushes it past 6 GB. Modpacks like All The Mods 10 want 10+ GB just to boot. If you plan to run 1.20.x+ modded, our Community plan is the floor.
Pick a server flavor
"Minecraft server" actually means half a dozen different binaries depending on what you want to do:
| Flavor | Use case | Plugins? | Mods? | Perf |
|---|---|---|---|---|
| Vanilla | Reference / small friends server | โ | โ | Baseline |
| Paper | Community survival / lobbies / most servers | โ Bukkit/Spigot | โ | ๐ฅ Fastest vanilla-compatible |
| Spigot | Older/legacy setups โ use Paper instead | โ | โ | Fair |
| Purpur | Paper + extra configurable gameplay tweaks | โ (Paper-compat) | โ | ~Paper |
| Folia | Very large survival / spreads ticks across cores | โ (Folia-specific) | โ | Only worthwhile 200+ players |
| Fabric | Modern mod loader (Fabric mods) | โ (unless Bukkit bridge) | โ Fabric | Very good |
| Forge | Traditional mod loader (most modpacks) | โ (unless hybrid) | โ Forge | Good |
| NeoForge | Community fork of Forge (1.20.2+) | โ | โ NeoForge | Good |
| Quilt | Fabric fork with extra QoL | โ | โ Fabric-compat | Good |
| Mohist / Arclight | Hybrid: plugins + Forge mods in one | โ | โ | Compromised |
Picking for most people: if you want plugins, use Paper. If you want mods, use Forge for most modpacks and Fabric for newer ones. Avoid Mohist / Arclight hybrid loaders unless you specifically need both โ the stability cost isn't worth it for most servers.
Deploy the server (1-click)
Our Minecraft template asks you which flavor + version on first deploy, downloads the matching jar (PaperClip for Paper, official Mojang jar for Vanilla, installer for Forge, etc.), writes a starter server.properties, accepts the EULA, and opens TCP 25565 on your plan's IP.
-
Pick the Minecraft template at checkout
On the Minecraft hosting page, pick a plan sized for your use case. Starter = 4-10 vanilla players. Community = 20-40 Paper survival with QoL plugins. Flagship = 100+ slot public or heavy modpack.
-
Pick flavor + version
Dropdown: Vanilla / Paper / Purpur / Fabric / Forge / NeoForge / Mohist + MC version (1.8 through latest). Swap anytime from the panel โ version changes preserve your world.
-
Accept the EULA
Mojang requires you to accept the Minecraft EULA. Panel does this automatically by setting
eula=trueineula.txt. First boot without it: server refuses to start. -
Wait for first-boot world generation
On first run, the server generates a 256ร256 spawn chunk area โ takes 30-90 seconds depending on flavor and seed. Console ends with
Done (12.345s)! For help, type "help".
File layout & where things go
/
โโโ server.jar โ the Minecraft server binary (Paper/Vanilla/etc.)
โโโ server.properties โ main config
โโโ eula.txt โ Mojang EULA acceptance
โโโ ops.json โ operator list (admins)
โโโ whitelist.json โ allow-list of players
โโโ banned-players.json โ player bans
โโโ banned-ips.json โ IP bans
โโโ usercache.json โ UUID โ name cache
โโโ world/ โ overworld
โ โโโ level.dat
โ โโโ playerdata/
โ โโโ region/ โ chunk data (.mca files)
โ โโโ data/
โโโ world_nether/ โ Nether dim
โโโ world_the_end/ โ End dim
โโโ logs/ โ rolling log files
โ โโโ latest.log
โโโ plugins/ โ Paper/Spigot plugins (.jar each)
โโโ mods/ โ Forge/Fabric mods (.jar each)
โโโ config/ โ per-plugin / per-mod configs
โ โโโ paper-global.yml โ Paper's new global config (1.19+)
โ โโโ paper-world-defaults.yml
โ โโโ <mod-name>/
โโโ bukkit.yml โ Bukkit core config (CraftBukkit legacy)
โโโ spigot.yml โ Spigot core config
โโโ banned-names.txt
The world/ folder IS your save. Don't delete it unless you want a fresh world. Don't edit it while the server is running (corruption risk). Don't FTP-drag a live world from Windows to Linux without stopping the server first โ filesystem locks on session.lock will fight you.
Core server.properties settings
Plain key=value pairs. The values most people tweak:
motd=A Minecraft Server
server-port=25565
max-players=20
online-mode=true
enforce-secure-profile=true
gamemode=survival
difficulty=normal
hardcore=false
pvp=true
allow-flight=false
allow-nether=true
force-gamemode=false
spawn-protection=16
spawn-monsters=true
spawn-animals=true
spawn-npcs=true
view-distance=10
simulation-distance=10
entity-broadcast-range-percentage=100
network-compression-threshold=256
level-name=world
level-type=minecraft:normal
level-seed=
generate-structures=true
white-list=false
enforce-whitelist=false
enable-rcon=true
rcon.password=change-me-very-strong
rcon.port=25575
enable-query=false
query.port=25565
# Paper-specific (ignored on vanilla)
use-native-transport=true
prevent-proxy-connections=false
Values to know:
motdโ the text shown in the server list. Supports ยง color codes. 59-char limit.max-playersโ slot count. Match your plan.online-modeโ keep true for public servers; checks Mojang auth.false= "cracked" mode, allows pirated clients but breaks skins/auth on some plugins.view-distanceโ chunk radius sent to each client. Every +1 increases memory use exponentially. 10 is Mojang default; 16 is common for community servers; 32 is lag city.simulation-distanceโ how far from players entities/redstone tick. Usually equal or slightly less than view-distance.difficultyโpeaceful,easy,normal,hard. Peaceful disables mob spawns entirely.level-seedโ leave empty for random. Paste a seed string to regenerate a specific world.enable-rcon+rcon.passwordโ enable for remote admin tools (RCON, Discord bots).network-compression-thresholdโ packet size above which gzip kicks in. 256 for most servers; set to-1to disable if you're running Velocity with TCP offload.
Performance tuning (Paper)
Paper is the performance-tuned fork most servers run. Its real config lives in config/paper-global.yml and config/paper-world-defaults.yml (since 1.19). Highlights to tune:
# config/paper-world-defaults.yml (excerpt)
chunks:
prevent-moving-into-unloaded-chunks: true
delay-chunk-unloads-by: 10s
collisions:
max-entity-collisions: 8
entities:
armor-stands:
do-collision-entity-lookups: false
tick: false
behavior:
disable-chest-cat-detection: true
phantoms-do-not-spawn-on-creative-players: true
spawning:
despawn-ranges:
ambient:
hard: 128
soft: 32
animal:
hard: 128
soft: 32
axolotls:
hard: 128
soft: 32
creature:
hard: 128
soft: 32
misc:
hard: 128
soft: 32
monster:
hard: 128
soft: 32
environment:
optimize-explosions: true
treasure-maps:
enabled: true
find-already-discovered:
loot-tables: default
villager-trade: false
hopper:
cooldown-when-full: true
disable-move-event: false
lootables:
auto-replenish: false
spawn:
allow-using-signs-inside-spawn-protection: false
keep-spawn-loaded: true
keep-spawn-loaded-range: 10
per-player-mob-spawns: true
Three tuning knobs that move the needle most:
per-player-mob-spawns: trueโ distributes mob cap per-player instead of globally. Huge for multi-base survival servers.despawn-rangesโ lower both values to reduce entity count. Default is already ok; some modpacks need aggressive cuts.view-distance/simulation-distanceโ the single biggest perf lever. Lower simulation-distance first (to 6-8) if TPS drops below 18.
JVM flags matter. Use Aikar's Flags for startup. They tune the G1 garbage collector for Minecraft's allocation pattern and routinely cut GC pause times by 50%+. Our Paper template ships with Aikar's flags enabled by default.
Ops, whitelist, bans
Ops (admins)
Grant operator permissions via console:
/op YourUsername
Or edit ops.json directly:
[
{
"uuid": "f7c77d99-9f15-4a66-a87d-c4a51ef30d19",
"name": "YourUsername",
"level": 4,
"bypassesPlayerLimit": true
}
]
Levels: 1 (spawn protection bypass), 2 (commands like /kick, /gamemode), 3 (/ban, /op), 4 (all commands including /stop). Most admins run level 4.
Whitelist
/whitelist on
/whitelist add YourFriend
/whitelist remove someone
/whitelist list
Or flip white-list=true in server.properties and edit whitelist.json directly. Whitelisted servers stay public in the server list but reject non-whitelisted joins.
Bans
/ban PlayerName Reason
/ban-ip 1.2.3.4 Reason
/pardon PlayerName
/pardon-ip 1.2.3.4
Plugins (Paper/Spigot) & mods (Fabric/Forge)
Paper/Spigot plugins
Download .jar files from Modrinth, SpigotMC Resources, or Paper's Hangar. Drop into plugins/, restart. On boot, Paper creates plugins/<PluginName>/config.yml for each.
Essential plugins for most community servers:
- EssentialsX โ homes, warps, kits, tpa, economy foundation
- LuckPerms โ group permissions, prefixes, suffixes (replaces legacy PEX)
- Vault โ economy/perms abstraction, required by many plugins
- WorldEdit + WorldGuard โ world editing + region protection
- CoreProtect โ block/item logger,
/co inspectis a lifesaver - DiscordSRV โ Discord โ server chat bridge
- PlaceholderAPI โ plugin-interop placeholder system
- ViaVersion + ViaBackwards โ lets older/newer clients connect to your server
Forge / NeoForge mods
-
Deploy the Forge flavor
Panel โ set flavor to Forge (or NeoForge for 1.20.2+) + Minecraft version. The installer runs automatically.
-
Upload
.jarfiles tomods/From CurseForge or Modrinth, grab the Forge-compatible
.jarfor your MC version. Drop intomods/, restart. -
Match client mods
Clients must have the exact same mods + versions. Tell players to install them (we recommend Modrinth's App or CurseForge's for easy one-click syncs), or distribute a modpack manifest.
Fabric mods
Same workflow as Forge, but use Fabric-compatible mods. The overlap is: Fabric mods are NOT Forge-compatible and vice-versa. Fabric API is a required dependency for most Fabric mods โ drop it in mods/ first.
Running a prebuilt modpack (ATM, FTB, Create, GT:NH)
Our panel has a Modpack Installer that fetches directly from CurseForge's API โ see our separate modpack install guide. Supports all CurseForge modpacks by ID.
Don't mix plugin and mod ecosystems casually. Running Mohist (Forge + Bukkit plugins) works but breaks on updates and has worse perf than pure-Forge or pure-Paper. Unless you NEED both, pick one lane. If you must hybrid, use Mohist on stable MC versions only โ never on the latest release the same week it drops.
BungeeCord / Velocity proxies
Running more than one Minecraft server (lobby โ survival โ minigames โ creative)? Put a proxy in front. Clients connect to the proxy; it routes them between backend servers invisibly.
Velocity (recommended)
Velocity is PaperMC's modern proxy โ faster, better-documented, actively maintained. Install steps:
-
Spawn a Velocity instance
On our panel, add a sibling under your subscription and pick Velocity as the template. Tiny plan (512 MB RAM) is enough.
-
Configure
velocity.tomlbind = "0.0.0.0:25565" motd = "&6My Network" show-max-players = 1000 online-mode = true player-info-forwarding-mode = "modern" [servers] lobby = "127.0.0.1:25566" survival = "127.0.0.1:25567" minigames = "127.0.0.1:25568" try = ["lobby"] -
Configure each backend server
On every Paper backend, set
online-mode=falseinserver.propertiesand enable Velocity modern forwarding inconfig/paper-global.yml:proxies: velocity: enabled: true online-mode: true secret: "copy-this-from-velocity/forwarding.secret"Backends now trust the proxy for auth โ never expose them on a public port.
BungeeCord (legacy)
Still works, still maintained by SpigotMC. Use only if you're running plugins that need BungeeCord-specific APIs and haven't been ported to Velocity.
Bedrock Edition notes
Bedrock is a different binary entirely โ Mojang ships bedrock-server separately. On our platform, pick the Bedrock template instead of Java. Key differences:
- Port: UDP
19132(not TCP 25565). - Config file:
server.properties(same name, different values). - No plugins in the Bukkit sense. Scripts are authored in JavaScript using Bedrock's scripting API.
- Hybrid Java + Bedrock access: use Geyser (a Paper plugin) to let Bedrock clients connect to your Java server.
For most server owners, running Java + Geyser + Floodgate on a Paper server is better than running Bedrock natively โ you get plugin support, cross-play, and one world for both editions.
Connect and test
-
Launch Minecraft on your PC
Main menu โ Multiplayer โ Add Server.
-
Enter your server address
YOUR-SERVER-IP(default port 25565) oryour-ip:portfor custom ports. If you've pointed a domain, enter that instead. -
Op yourself on first join
From the panel console:
op YourUsernameRejoin if you were already in โ op status takes effect on next login.
-
Smoke-test admin commands
/gamemode creative /tp @s ~ 100 ~ /save-all /whitelist on
Common errors and fixes
"Failed to verify username"
Player's session is stale or online-mode=true is rejecting their client. Fixes:
- Have player log out and back into the Minecraft launcher
- Check your server's internet โ if Mojang's auth servers are unreachable, all joins fail
- Check status.minecraft.net for Mojang-side outages
"Server is Out of Memory"
- Bump RAM allocation via the panel's Memory slider
- Use Aikar's Flags in the startup command (G1GC tuning)
- Install Spark plugin (
/spark heap) to identify what's eating memory - If modded: a specific mod is leaking โ check its issues page
Server lagging / low TPS
Install Spark (profiling plugin) and run:
/spark profiler start --timeout 120
# ... wait 2 minutes while lag reproduces ...
/spark profiler stop
Spark uploads a flame-graph URL. 95% of the time it points you directly at a bad plugin or an entity hotspot.
"Outdated server" / "Outdated client"
Client and server MC version mismatch. Two options:
- Change the client's version in the launcher profile
- Install ViaVersion + ViaBackwards + ViaRewind on the server to let multiple client versions connect
"Can't keep up! Is the server overloaded?"
Server tick took > 50 ms. Not fatal by itself, but if it repeats:
- Reduce
view-distanceandsimulation-distance - Run
/spark profilerto identify the hotspot - Upgrade CPU plan โ MC's main-tick thread is single-threaded, raw clock matters
World corruption ("Failed to load chunk")
- Stop the server immediately โ continued writes compound corruption
- Rollback from the panel's backup tab (daily snapshots + 30-day retention on all managed plans)
- If the backup is too old, try MCA Selector or RegionFixer to delete just the broken chunks
RCON connects but commands silent
enable-rcon=truemissing fromserver.properties- Wrong
rcon.password - Firewall blocking TCP on
rcon.port(25575 by default, different from game port)
Plugin doesn't load
- Wrong Minecraft version โ check the plugin's listed compat on Modrinth/Hangar
- Wrong Paper flavor โ a Fabric-only plugin won't load on Paper
- Missing dependency โ check
logs/latest.logfor "Unknown dependency: XYZ" - Plugin jar is corrupted โ re-download
Forge modpack won't start
- Wrong Java version โ MC 1.17+ needs Java 17, 1.20.5+ needs Java 21. Panel has a JVM dropdown.
- Modpack's recommended RAM isn't met โ ATM10 wants 10+ GB just to boot
- Forge/NeoForge version mismatch โ check
crash-reports/for the exact version the pack wants - Mixin conflict โ one mod's mixin is clashing with another's. Usually a specific pair; check the crash report's mixin section.
Stuck on something specific? Email support with your server IP, the last 200 lines of logs/latest.log, and any relevant crash report โ we'll usually have an answer within the hour.