---
title: "Deploy Minecraft Paper Server"
description: "Pinned Paper Minecraft: 2G heap, /data volume, EULA, autopause, TCP 25565."
category: "Other"
url: https://railway.com/deploy/minecraft-paper-server
---

# Deploy Minecraft Paper Server

Pinned Paper Minecraft: 2G heap, /data volume, EULA, autopause, TCP 25565.

**[Deploy Minecraft Paper Server on Railway](https://railway.com/template/minecraft-paper-server)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/minecraft-paper-server/manifest.json

- **Creator:** leodev
- **Category:** Other

## Template content

### paper

- **Image:** itzg/minecraft-server:2026.9.0-java25

## Documentation

# Deploy and Host Minecraft Paper Server on Railway

Pinned [Paper](https://papermc.io/) Java Edition on [itzg/minecraft-server](https://github.com/itzg/docker-minecraft-server). World and plugins live on a `/data` volume. Players join over a public **TCP 25565** proxy (not HTTP). Heap defaults to **2G**, not 8G.

## About Hosting Minecraft Paper Server on Railway

This is a single `paper` service:

- Image `itzg/minecraft-server:2026.9.0-java25` (digest `sha256:4e29d14082d94748f945edad3ee5307b97adc730fec49860199f5e52218a9ae3`)
- Java 25 (Paper 26.x minimum)
- `TYPE=PAPER`, `VERSION=26.2`, `PAPER_BUILD=121` (stable)
- Volume mount `/data` for world, `server.properties`, plugins, logs
- TCP proxy application port **25565**
- `MAX_MEMORY=2G` and `INIT_MEMORY=2G` with Aikar flags
- Native empty-server pause via `PAUSE_WHEN_EMPTY_SECONDS=60`
- No extra dashboard service (panels balloon RAM on a 2G heap)

Join address is the Railway TCP proxy `host:port` shown on the service (the public port is assigned by Railway; the container still listens on 25565).

## Why Deploy Minecraft Paper Server on Railway

Marketplace Minecraft cards such as BLEtpx still default an **8G heap**, unpinned `:latest` images, and weak persistence. This listing pins the itzg tag and Paper build, mounts `/data`, exposes TCP 25565, keeps the heap at 2G, requires an explicit EULA, and documents autopause.

Verified on the template test project: deployment `512d44f1-9a13-4388-b24e-5eed78132776` reached `SUCCESS` with `/data` mounted; logs showed `Done (10.110s)!`; a status ping on the TCP proxy returned `Paper 26.2` with MOTD `Paper on Railway`.

## Common Use Cases

- Small friend-group Paper SMP
- Plugin testing on a pinned Paper build
- Always-on Java Edition server with a sane Railway bill
- Worlds that survive redeploys via `/data`
- Idle-friendly hosting with native pause-when-empty

## Dependencies for Minecraft Paper Server Hosting

You need a Minecraft Java Edition client and acceptance of the [Minecraft EULA](https://aka.ms/MinecraftEULA). The server downloads the pinned Paper jar on first boot (needs outbound HTTPS). Premium accounts are required unless you set `ONLINE_MODE=FALSE`.

### Deployment Dependencies

- **`EULA` (required):** you must set this to `TRUE` yourself. That is Mojang EULA acceptance. The server will not start otherwise. Do not leave it blank.
- `TYPE=PAPER`, `VERSION=26.2`, `PAPER_BUILD=121` — pinned Paper
- `MAX_MEMORY=2G`, `INIT_MEMORY=2G` — never 8G
- `USE_AIKAR_FLAGS=TRUE`
- `ENABLE_AUTOPAUSE=FALSE` — itzg JVM freeze; leave off unless you need it
- `PAUSE_WHEN_EMPTY_SECONDS=60` — native pause when no players are online
- `MAX_TICK_TIME=-1` — disables the vanilla tick watchdog (required if you later enable itzg autopause)
- `VIEW_DISTANCE=8`, `SIMULATION_DISTANCE=6`, `MAX_PLAYERS=20`
- `ONLINE_MODE=TRUE`, `MODE=survival`, `DIFFICULTY=normal`
- Volume `/data` and TCP proxy port 25565 (created by the template)

No generated secrets. Whitelist/ops are in-game or files on `/data`.

## One-click deploy

1. Click deploy.
2. Set **`EULA=TRUE`** (required).
3. Wait for first boot (downloads Paper 26.2-121 and generates a world).
4. Open the Paper service → Settings → Networking → TCP Proxy. Copy `host:port`.
5. Minecraft Java client → Multiplayer → Direct Connection → paste `host:port`.

## Autopause (save RAM when empty)

Prefer native pause on Paper 26:

- `PAUSE_WHEN_EMPTY_SECONDS=60` maps to `pause-when-empty-seconds`. The JVM stays up; the dedicated server stops ticking after 60 empty seconds.
- Set `0` / `-1` if farms must keep running with nobody online.

Legacy itzg freeze (`ENABLE_AUTOPAUSE=TRUE`) SIGSTOPs Java and wakes on a TCP knock:

```text
ENABLE_AUTOPAUSE=TRUE
MAX_TICK_TIME=-1
JVM_DD_OPTS=disable.watchdog:true
```

Leave that **off** by default. `knockd` plus Railway’s TCP proxy is easy to misconfigure. Do **not** set `ENABLE_AUTOSTOP=TRUE` — Railway will treat a stopped process as a crash and restart it.

## How this is healthier than BLEtpx-style clones

- Pinned image tag + digest, not `:latest`
- Pinned Paper 26.2 build 121
- 2G heap, not 8G
- `/data` volume
- Explicit required `EULA`
- Autopause documented (native + optional itzg)
- TCP 25565 only — no RAM-heavy dashboard

## After Deploy

1. Confirm logs contain `Done (` and `Starting Minecraft server on *:25565`.
2. Copy the TCP proxy endpoint.
3. Join with a Java client. Default `ONLINE_MODE=TRUE`.
4. Drop plugin jars into `/data/plugins` (volume browser or `railway ssh`) and restart.
5. Raise `MAX_MEMORY` / `INIT_MEMORY` together only if you also size the Railway service above heap + ~500MB native.

## Support Checklist

If a deploy fails, include the Paper deployment ID, whether `/data` is mounted, the TCP proxy endpoint, and log lines around EULA, Paper download, memory (`Setting initial memory`), and `Done (`.


## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/minecraft-paper-server
