Minecraft Orchestrator

November 2026

TL;DR: Minecraft Orchestrator lets me host any modpack on AWS and swap between them without losing a single world.

Motivation

I’ve played Minecraft since pretty much the day it came out, and I’ve lost count of the modpacks I’ve tried, from Cobblemon all the way to the extreme with GregTech . With so much variety out there and a lot of friends who like to play, I know my way around setting up a server.

I usually host on AWS whenever I have credits on hand and some spare time. The flexibility and cost savings are hard to beat compared to other host providers. The catch is that swapping modpacks gets tedious fast, and traditional hosts won’t keep your worlds when you switch, which really ruins the fun.

So I set out to build something that solves both.

Overview

Minecraft Orchestrator is a web dashboard backed by a small control system that runs one Minecraft server at a time on AWS. Every modpack I want to play is saved as a profile, and the dashboard can start, stop, or swap between them without me touching a terminal. Each profile keeps its own world, so coming back to a pack weeks later picks up exactly where everyone left off.

The dashboard shows live player count, uptime, last save, and instance health, with start, stop, and switch controls.

Profiles

A profile bundles a modpack, its settings, and its world. Packs can be pulled from Modrinth or CurseForge by name and version, or I can run plain Vanilla with a fixed seed. Each profile gets its own memory allocation and Java version, since a lightweight Vanilla world and a heavy pack like Prominence 2 want very different resources. Once a profile is created, its pack and version are locked, so a world can never be loaded by a mod set it wasn’t built with.

Each profile records its source, memory, Java version, and difficulty.

Switching Packs

Swapping is the whole point, so it’s a single dropdown and a button. The picker is searchable and shows each profile’s pack, resources, and when its world was last saved.

Picking Cobbleverse while Vanilla is running. Every profile shows when its world was last saved.

Players aren’t dropped without notice either. When I stop or switch, everyone in the world gets a five minute warning in chat and on screen, along with a reminder that their progress is already saved, then a final one-minute warning before they’re sent off. Behind the scenes the control service saves the world, waits for the backup to finish, and only then brings up the next profile. If the backup fails, the switch is cancelled and the old world is left untouched.

Players see a countdown before a switch...

...and a similar one before a shutdown.

Worlds That Stick Around

Each stop, switch, and daily backup saves the active world, and older saves are kept for seven days. Any profile’s backup list can be opened from the Profiles page, with each save marked as a daily backup or a final save from when the server last stopped. Restoring is one click, and the dashboard only allows it when that profile isn’t the one currently running. Even a restore can be undone within the retention window.

Mixing worlds up was the failure I cared about most, so the system is deliberately strict. A profile’s world is only ever loaded for that profile, a start refuses to run over a world it can’t confirm is safely backed up, and a backup never overwrites a good save with an empty one.

Backups for a profile, each with its size and a restore button.

Running It Day to Day

The rest of the dashboard covers what I used to do over SSH.

  • Live console. Server output streams in with filters for info, warnings, errors, and commands, plus a command box with tab completion for running things like weather or /op without leaving the page.
  • Shared whitelist. One player list applies to every profile, with a note on who each person is, who added them, and when. Names are checked against Mojang when they’re added, and the server starts locked down until the list is applied, so nobody slips in during a switch.
  • Audit log. Server starts and stops, console commands, and changes to profiles and the whitelist are all recorded with who did what and when. Commands that were refused, like running one while the server is stopped, show up in red.

Only a short list of approved admins can sign in, and the login page doubles as a public status board that shows whether the server is online and which pack it’s running, without exposing anything else.

The console streams startup logs and lets me send commands to the running server.

One whitelist shared across every profile, with a note on who each player is.

Every start, stop, command, and change is logged with who did it and when.

How It Works

The dashboard is only the front door. Behind it, everything runs as containers on one AWS machine, coordinated by ECS .

  • A control service that’s always on. A Go service handles the dashboard’s requests and decides what the server should be doing at any moment. It’s the only piece that starts or stops the game, and it keeps its state in a database, so it can recover cleanly if something restarts mid-operation.
  • The game, as its own task. The Minecraft server runs separately from the control service, so swapping packs never takes the dashboard down with it.
  • Helpers that look after the world. Before the server boots, one container restores the profile’s world from cloud storage. While it runs, a second one backs the world up on a schedule and once more at shutdown.
  • A watchdog. The control service keeps comparing what it thinks is running against what actually is, and cleans up if the two ever disagree.

World data lives in cloud storage and the machine’s disk is treated as scratch, which is why a pack can be thrown away and reinstalled on every start without losing anything that matters.