How to Set Up a Minecraft Server on a Windows VPS: Step-by-Step Technical Guide

Step-by-step walkthrough to set up a Minecraft server on a Windows Server VPS: Java, Vanilla/Paper, ports, firewall, auto-start service and backups.

Hosting a Minecraft server on a Windows VPS is a natural choice for those who already manage other applications via Remote Desktop and prefer the Windows Server graphical interface. Setup is less sensitive to Linux permissions, file management is handled through Explorer and basic monitoring fits in Task Manager. The cost: Windows Server consumes more RAM at idle (~1 GB) and has licensing baked into the VPS, but for many people the productivity gain is worth it.

This guide is for those who have never set up a Minecraft Java server in a remote environment and prefer Windows to a Linux terminal. We’ll go from zero — installing the correct Java, choosing between Vanilla and Paper, configuring server.properties, opening the port on the firewall, turning the server into an automatic service and setting up backups. Estimated time: 45-60 minutes from initial RDP to the first player connecting.

Before starting, it’s worth setting expectations: Minecraft is single-threaded where it matters (the main tick loop), so per-core clock matters more than core count. A VPS with 2 vCPUs at 3.5 GHz+ and 4 GB of RAM comfortably handles 10-15 players on Paper. For pure Vanilla with light mods, the same plan supports 5-8 players.

Prerequisites

What you need ready

A VPS with Windows Server 2022 (or 2019), at least 4 GB of RAM and 40 GB of disk. Working RDP access with the Administrator user. A reasonable internet connection on your end to transfer files via RDP clipboard or direct download on the server.

System Windows Server 2022
Minimum RAM 4 GB
Default Java port 25565 TCP
Default Bedrock port 19132 UDP
Required Java Java 21 LTS

The Java version choice matters: Minecraft 1.20.5 and above require Java 21. Versions 1.18-1.20.4 run on Java 17. Installing Java 8 (which many old tutorials recommend) only works for versions 1.16 and earlier — don’t use it on a new server.

Installing Java 21

The cleanest distribution for Windows is Eclipse Temurin (OpenJDK built by Adoptium). Microsoft Build of OpenJDK also works and has a native MSI installer.

01

Connect to the VPS via RDP using the credentials provided by Hostini. On Windows Server, open Microsoft Edge and download the Java 21 LTS installer:

https://adoptium.net/temurin/releases/?version=21

Select: OS = Windows, Architecture = x64, Package Type = JDK, Version = 21 LTS. Download the .msi file.

02

Run the installer as administrator. On the “Custom Setup” screen, check the options:

  • Add to PATH
  • Set JAVA_HOME variable
  • Associate .jar files

Without these three checked, you’ll have to configure them manually later. Finish with Next > Install.

03

Verify the installation by opening PowerShell (not CMD) and running:

java --version

The output should show openjdk 21.x.x and the Temurin name. If “java is not recognized” appears, the PATH was not updated — restart the RDP session (Disconnect, reconnect) and try again.

Downloading the server: Vanilla or Paper

Vanilla is Mojang’s official server, with no optimizations or plugin support. Paper is a fork that rewrites critical parts of the engine for performance gains — it maintains full compatibility with Vanilla worlds, but supports plugins (Bukkit/Spigot/Paper).

FeatureVanillaPaper
Performance with 10+ playersLimitedExcellent
Plugins/modsNoYes (Bukkit API)
Client compatibility100%100%
Built-in anti-cheatNoBasic patches
Async chunk loadingNoYes

For any server with more than 3-4 active players, Paper is recommended.

04

Create the folder C:\Minecraft (or anywhere — just avoid Program Files, which has write restrictions). Inside it, download the server JAR:

For Vanilla, go to https://www.minecraft.net/en-us/download/server and copy the link for the current version’s server.jar.

For Paper, go to https://papermc.io/downloads/paper, choose the version (e.g., 1.21.4) and download the latest stable build (paper-1.21.4-XXX.jar).

Rename it to server.jar to simplify commands.

05

Accept the EULA. Create the file eula.txt in the same folder with the content:

eula=true

Without this, the server exits on the first run with the message “You need to agree to the EULA”. The meaning: you accept the Minecraft terms of use. Without acceptance, there’s no server.

Configuring the server

06

Create a start.bat file in the C:\Minecraft folder with the content:

@echo off
java -Xms2G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -jar server.jar nogui
pause

The important flags:

  • -Xms2G: initial 2 GB heap
  • -Xmx4G: maximum 4 GB heap (adjust based on VPS RAM; leave ~1 GB free for the OS)
  • -XX:+UseG1GC: G1 garbage collector, better for low latency
  • nogui: runs in console mode (no Mojang graphical window)

The rule of thumb: never pass more than (total_RAM - 1GB) in -Xmx. On a 4 GB VPS, the healthy ceiling is -Xmx3G.

07

Run start.bat by double-clicking it. On the first run, the server generates the configuration files and the world, then exits (if EULA was not accepted) or stays running waiting for connections.

Stop the server by typing stop in the console and pressing Enter. Do not close the window with X — that can corrupt the world save.

08

Edit the generated server.properties. The most relevant fields:

server-port=25565
max-players=20
view-distance=10
simulation-distance=6
online-mode=true
motd=Test server
difficulty=normal
gamemode=survival

view-distance controls how many chunks the server sends to each client — values above 12 multiply traffic and CPU. Start with 10 and adjust as needed. simulation-distance (chunks with active mobs and ticks) should always be ≤ view-distance.

Opening the port on the firewall

Windows Defender Firewall blocks inbound connections on 25565 by default. Without this rule, no one outside can connect — the typical symptom is a client-side timeout.

09

Open PowerShell as Administrator and create the inbound rule:

New-NetFirewallRule -DisplayName "Minecraft Java" -Direction Inbound -Protocol TCP -LocalPort 25565 -Action Allow

If you’re also going to run Bedrock, add:

New-NetFirewallRule -DisplayName "Minecraft Bedrock" -Direction Inbound -Protocol UDP -LocalPort 19132 -Action Allow
Provider firewall vs Windows firewall

Some VPS providers have an external firewall (in the provider panel) on top of the Windows firewall. Confirm that both are allowing 25565 — opening only one side gives the same timeout symptom. Hostini VPS opens all ports at the network level; control stays in the Windows Firewall.

Turning it into an automatic service

Running the .bat manually works, but if Windows restarts (automatic update, power loss, maintenance), the server won’t come back on its own. Solution: NSSM (Non-Sucking Service Manager).

10

Download NSSM at https://nssm.cc/download. Extract the ZIP and copy nssm.exe (win64 version) to C:\Windows\System32 or to C:\Minecraft.

In PowerShell as Administrator:

cd C:\Minecraft
nssm install MinecraftServer

In the NSSM window:

  • Path: C:\Program Files\Eclipse Adoptium\jdk-21.x.x-hotspot\bin\java.exe
  • Startup directory: C:\Minecraft
  • Arguments: -Xms2G -Xmx4G -XX:+UseG1GC -jar server.jar nogui

In the “Details” tab, set Display name = “Minecraft Java Server”. In the “I/O” tab, point stdout and stderr to C:\Minecraft\logs\service-out.log and service-err.log. Click “Install service”.

11

Start the service:

Start-Service MinecraftServer

Check the status:

Get-Service MinecraftServer

The Status column should show “Running”. To follow the log in real time:

Get-Content C:\Minecraft\logs\service-out.log -Wait -Tail 50

Verification

12

On the VPS itself, test the local connection. Open another PowerShell and run:

Test-NetConnection -ComputerName localhost -Port 25565

TcpTestSucceeded : True confirms the server is listening. Then, from your personal computer:

Test-NetConnection -ComputerName YOUR_PUBLIC_IP -Port 25565

If TcpTestSucceeded is True externally, the server is accessible. Open Minecraft, click “Multiplayer” > “Add Server”, enter the VPS public IP and connect.

Automatic backups

A corrupted Minecraft world without backup is total loss. Configure daily backup from the start.

13

Create C:\Minecraft\backup.ps1:

$date = Get-Date -Format "yyyy-MM-dd-HHmm"
$backupPath = "C:\Backups\minecraft-$date.zip"
Compress-Archive -Path "C:\Minecraft\world","C:\Minecraft\world_nether","C:\Minecraft\world_the_end" -DestinationPath $backupPath
Get-ChildItem "C:\Backups\minecraft-*.zip" | Sort-Object CreationTime -Descending | Select-Object -Skip 7 | Remove-Item

This script compresses the three worlds (overworld, nether, end) and keeps only the 7 most recent backups. Schedule it in Task Scheduler to run daily at 04:00 (low-traffic hours).

Backup with the server running

To avoid file inconsistency during compression, run save-all flush in the server console before the backup and save-off during it. Plugins like CoreProtect (Paper) automate this. Without these precautions, the chance of corruption on a server with 5+ active players during backup is real.

Next steps

With the server running as a service, the next items to explore:

  • Essential plugins (Paper): EssentialsX (basic commands), LuckPerms (permissions), CoreProtect (anti-grief with rollback).
  • Monitoring: configure CPU/RAM alerts via Performance Monitor to catch bottlenecks before they affect TPS.
  • World pre-generation: use Chunky to pre-generate a 10000-block radius — reduces exploration lag during gameplay.
  • DDoS protection: attacks on popular Minecraft servers are common. If you’re putting this into production, Hostini VPS comes with DDoS protection configured by default — no client adjustment needed.
  • Migration to dedicated: above 50 simultaneous players or a heavy modpack, consider a dedicated server with high per-core clock (5+ GHz boost) — Minecraft scales poorly with more cores but rewards single-thread clock.

A Minecraft server on Windows is a case where environment familiarity pays for the RAM overhead. For those learning Linux administration at the same time, it’s worth considering the Ubuntu version of this guide. For those already living in Windows Server, this setup is resilient enough to run for months without intervention.

Frequently asked questions

How much RAM do I need to host Minecraft Java on a Windows VPS?

For 10 players on Vanilla, 2 GB of heap (-Xmx2G) is the comfortable floor. Paper handles 20 players with 4 GB. Heavy mods/modpacks (Forge with 100+ mods) start at 6-8 GB. Always reserve ~1 GB for Windows Server itself beyond the Java heap.

Why should I use Paper instead of Vanilla Minecraft?

Paper is an optimized fork of Spigot/Bukkit with much more stable TPS at 10+ players, async chunk loading and anti-exploit patches. It runs the same worlds as Vanilla without conversion and supports plugins. For a casual server with 2-3 friends, Vanilla is enough; above that, Paper saves RAM and CPU.

Do I need to open port 25565 on the Windows Server firewall?

Yes. Windows Defender Firewall blocks inbound connections by default. Create an inbound TCP rule for port 25565 (or whatever you configured in server.properties). Without this, the server starts internally but no one outside can connect — the client-side error is timeout, not connection refused.

How do I make the Minecraft server restart automatically when Windows restarts?

Configure the server as a Windows Service using NSSM (Non-Sucking Service Manager). NSSM wraps java.exe in a manageable service with automatic restart on crash and start at boot. Simple alternative: schedule the .bat in Task Scheduler with an 'At startup' trigger.

Can I run Minecraft Bedrock on the same Windows VPS as Java?

Yes, but on different ports (Java on 25565 TCP, Bedrock on 19132 UDP) and with separate binaries — the official Bedrock server (bedrock_server.exe) runs natively on Windows. To unify the Java and Bedrock player base in the same world, consider Geyser+Floodgate running on Paper.

Does RDP/Remote Desktop consume a lot of RAM on Windows Server? Should I disconnect to save resources?

An active RDP session uses ~150-300 MB. You don't need to disconnect — just use 'Disconnect' (not Logout) to leave the session suspended without killing processes. Logout ends graphical apps opened by the user; the Minecraft service (if configured via NSSM) keeps running independently.

Topics:
Next steps VPS, dedicated or managed panel for FiveM, SAMP, MTA, Tibia and more.Host your game server with Hostini →
Was this tutorial helpful?
Chat on WhatsApp