Running a Minecraft server

Java or Bedrock, which server software to run, what the machine actually needs, and which ports to open.

Game servers5 min read

On this page
  1. Java Edition or Bedrock Edition
  2. What the choice changes downstream
  3. Choosing server software for Java
  4. What the server needs from a machine
  5. Single-core speed matters more than core count
  6. RAM, and why more is not always better
  7. Disk
  8. Network
  9. Ports
  10. Related

A Minecraft server is one long-running process you own on a machine you have root on. The first decision, Java Edition or Bedrock Edition, changes the software you download, the port you open, the extensions you can install, and who can join, so make it before anything else.

Java Edition or Bedrock Edition

These are two different games that happen to share a name. They do not run the same server software and they do not speak the same protocol.

Java Edition is the desktop version played on Windows, macOS, and Linux. The server is a .jar file you run with a Java runtime. It has the large plugin and mod ecosystem, and it listens on TCP 25565 by default.

Bedrock Edition is the version on consoles, phones, tablets, and the Microsoft Store build for Windows. The server is Bedrock Dedicated Server, a native Linux x86-64 binary from Mojang. It is extended with add-ons and scripts rather than plugins, and it listens on UDP 19132 by default.

What the choice changes downstream

Java EditionBedrock Edition
Server softwareA .jar, run by a Java runtimeA native Linux binary
Default portTCP 25565UDP 19132, plus 19133 for IPv6
ExtensionsPlugins (Bukkit API) or mods (Fabric, Forge)Add-ons, behaviour packs, script API
Who can joinDesktop Java clients onlyConsole, mobile, and Windows Bedrock clients
TransportTCP, so gameplay and the server list ping share one portUDP, over RakNet

Players cannot cross between the two on their own. A Java server can accept Bedrock clients if you run a protocol translator such as Geyser, which listens on its own UDP port and speaks Bedrock on one side and Java on the other. That is an extra moving part with its own port to open, not a setting you switch on.

On a Java Edition serverJava clientsDesktop: Windows,macOS, LinuxBedrock clientsConsoles, phones,tablets, WindowsStore buildTCP 25565GeyserTranslator, on itsown UDP portJava Edition serverA .jar, run by a Java runtime. Plugins or mods.On a Bedrock Edition serverJava clientsDesktop: Windows,macOS, LinuxBedrock clientsConsoles, phones,tablets, WindowsStore buildCannot crosson their ownUDP 19132IPv6: 19133Bedrock Dedicated ServerA native Linux binary. Add-ons, behaviour packs,scripts.
Who can reach each edition’s server. Java clients join a Java server directly on TCP 25565, and Bedrock clients reach it only through a translator such as Geyser, on a port of its own. A Bedrock server takes Bedrock clients on UDP 19132, and Java clients cannot cross to it. Illustration.

Pick the edition your players are on. If most of them are on consoles or phones, Bedrock is not optional. If you want plugins, Java is not optional.

Choosing server software for Java

Vanilla is the reference implementation and everything else is a fork of it or a loader that sits on top of it.

SoftwareWhat it isPick it when
VanillaMojang's own server jar. No plugin API.You want exact vanilla behaviour and no extensions, on a small private server.
PaperA performance-focused fork in the CraftBukkit and Spigot line. Runs Bukkit API plugins, adds a large set of configurable behaviour and optimisations.Almost any plugin server. This is the default choice.
PurpurA fork of Paper that adds gameplay toggles and further options. Runs the same plugins as Paper.You want Purpur's specific gameplay switches and accept that it tracks Paper, so its builds for a new Minecraft version arrive after Paper's.
FabricA lightweight mod loader. Mods, not plugins, and most need Fabric API installed alongside.You are running a Fabric modpack, or you need mods that change the game itself. Fabric usually updates to a new Minecraft version quickly.
Forge and NeoForgeThe heavyweight modding platforms. Most large modpacks target one of these.Your players want a specific modpack. The pack tells you which loader and which version to use.
Velocity and BungeeCordProxies, not servers. They sit in front of several backend servers and move players between them.You are running more than one server as one network. Velocity is the current one, BungeeCord is the older.

Plugins and mods are not interchangeable, and this is the trap people fall into first. See Installing and managing Minecraft plugins for what loads where. Hybrid servers that claim to run both exist, but they lag behind on version updates and are supported by neither project, so treat them as a last resort rather than a way to avoid the decision.

What the server needs from a machine

Minecraft is unusual as a server workload, and reading a generic VPS spec sheet will lead you to the wrong choice.

Single-core speed matters more than core count

The world runs on one main thread. Every tick, that thread moves entities, runs redstone, checks block updates, spawns mobs, and fires plugin events, in order. The server aims for 20 ticks per second, which gives each tick a budget of 50 milliseconds. When a tick takes longer than that budget, the tick rate falls and players feel it as rubber-banding, delayed block breaking, and hoppers running slowly.

Adding cores does not make a single tick finish sooner. A faster core does. When you compare plans, the per-core clock speed and the generation of the processor matter more than the number of vCPUs.

Extra cores are not wasted. They carry chunk loading and generation, world saving, garbage collection, plugin tasks that run off the main thread, and any other server you run on the same box. They raise how much the machine can do around the tick, not how fast the tick itself completes.

Main thread20 ticks a second: each one has 50 msTick 1Tick 2Tick 350 ms50 ms50 msA tick's work, in order: entities, redstone, block updates, mob spawning, plugin eventsPast the 50 ms budget: the next tick starts late, and the tick rate fallsOther coresThe work around the tick, not a share of the tick itselfChunk loading and generationWorld savingGarbage collectionPlugin tasks off the main threadOther servers on the boxMain thread20 ticks a second: each one has 50 msTick 1Tick 2Tick 350 ms50 ms50 msA tick's work, in order: entities, redstone,block updates, mob spawning, plugin eventsPast the 50 ms budget: the next tick startslate, and the tick rate fallsOther coresThe work around the tick, not a share of thetick itselfChunk loading and generationWorld savingGarbage collectionPlugin tasks off the main threadOther servers on the box
One main thread, one tick at a time. A tick that runs past its 50 ms pushes the next one back, which is what a falling tick rate is. The other cores take the work around the tick but no share of the tick itself, which is why a faster core helps and more cores do not. Illustration.

RAM, and why more is not always better

The server keeps loaded chunks, entities, and everything your plugins hold in the Java heap. More players, a bigger view distance, and more plugins all need more heap.

Giving the Java process every gigabyte on the machine is a mistake, and a common one. The operating system needs memory left over, the Java runtime uses memory outside the heap you configure, and a very large heap takes longer to collect, which shows up as a pause in the middle of a tick. Heap sizing is the first section of Optimising a Minecraft server.

Disk

Worlds are stored as region files and chunk access is a lot of small reads and writes. Solid state storage, ideally NVMe, is what keeps chunk loading from becoming the thing that stalls a tick. Plan for the world to grow as players explore, and pregenerate it so that growth happens when you choose rather than while people are playing.

Network

Per player, Minecraft does not move much data. What players notice is latency and packet loss, not bandwidth, so the region you place the server in matters more than the port speed. Pick the location closest to the majority of your players.

Ports

WhatProtocol and portNotes
Java gameplayTCP 25565Set by server-port in server.properties. Gameplay and the server list ping both use it, so this is the only port Java players need.
Bedrock gameplayUDP 19132Set by server-port in the Bedrock server.properties. server-portv6 defaults to 19133.
QueryUDP, same number as server-port unless you change query.portOnly exists when enable-query=true. Leave it off unless a monitoring tool needs it.
RCONTCP 25575Only exists when enable-rcon=true. Do not expose it. See Protecting a Minecraft server from attacks.

On a Clouduxe server the port is opened with an inbound rule, and there is a ready-made bundle for each edition. See Game presets and Port rules.

Need a server, or a hand with one?

Pick a plan to deploy a server, or open a ticket in the panel. Support runs 24/7/365.