universe docs source
README.md 42 lines

single-binary minecraft orchestrator

# One JAR.
# The whole cluster.

Master and wrapper live in the same fat JAR. Form a Hazelcast cluster, expose one REST + WebSocket API, and deploy instances across screen, tmux, docker and kubernetes. Same config, swap one field.

java 21+ apache-2.0 v0.0.1
loader.log · na-game-1
docker compose up -d && docker compose attach universe
Starting Universe in MASTER mode
Hazelcast advertising 100.64.0.8:6000
Registered built-in runtimes (tmux, screen, process)
Installing extensions...
S3 template storage loaded (bucket=templates)
Docker runtime loaded (image=azul-zulu:21-jdk)
Kubernetes runtime loaded (namespace=universe)
Tailscale loaded (ip=100.64.0.8)
Ktor REST API started on 0.0.0.0:7000
Auto-spawned instance 564574 · config 'game-server-na'
stack.txt 21 lines
# one jar, no external services to run

  runtime      jvm · single fat jar  # one process runs master + wrappers
  clustering   hazelcast             # peer-to-peer · unlimited nodes
  api          rest + websocket      # :7000 · bearer auth, rate limited
  templates    versioned file-trees  # %variable% replacement

# runtimes · same config, any target

  built-in     screen · tmux
  extensions   docker · kubernetes   # 5+ targets, laptop to fleet

# integrations · 14 official drop-in extensions

  storage      aws s3
  databases    postgresql · redis · mongodb
  metrics      prometheus
  networking   tailscale
  gitops       argocd
  proxies      velocity · paper
  chat-ops     discord
features.yaml 18 lines
features: # click a key to unfold (za)
  • # One master exposes the REST API; any number of wrapper nodes execute instances. Work is dispatched cluster-wide over Hazelcast, no extra message broker to run.

  • # Instances are built from versioned template file-trees with dynamic %VARIABLE% replacement. Compose templates per group, choose one-of, or install whole groups.

  • # Built-in screen and tmux. Docker and Kubernetes via extensions. The same configuration deploys to a laptop, a VM fleet, or a cluster without changes.

  • # Full lifecycle control over HTTP. Stream live logs and an interactive console over WebSockets. Bearer-token auth with ALL / PUBLIC permission scopes and rate limiting.

  • # Self-registering JARs add runtimes, storage backends, databases, metrics exporters, and integrations. Drop one in ./extensions and it wires itself up on load.

  • # Sync templates and configs straight from Git, and export Kubernetes manifests for ArgoCD to track. Your fleet topology lives in version control.

  • # The Tailscale extension exposes mesh IPs as template variables, so instances on different networks connect securely without manual port plumbing.

  • # Prometheus exposition endpoint out of the box, plus an InfluxDB exporter. Daily-rotated structured logs and a styled operational console.

  • # First-class plugins for Paper, Spigot, Velocity, BungeeCord and Folia. Proxies auto-register backends and route players with pluggable strategies.

templates/ 7 lines

Templates are versioned file trees per group/name. Built-in and custom %VARIABLES% are substituted when an instance deploys. Edit the values and watch the render.

templates/lobby/server.properties
# server.properties
server-port=%SERVER_PORT%
motd=%INSTANCE_NAME% - powered by Universe
# start.flags
--instance-id %INSTANCE_ID%
--max-memory %MAX_MEMORY%

# variables

a1b2c3 · rendered DEPLOYED
 
cluster.txt 22 lines

# one master exposes the api & holds state · N wrappers execute instances

node-1 MASTER
api :7000 · hz :6000
node-1 wrapper
a1b2c3
lobby ONLINE
:25565
node-2 wrapper
d4e5f6
survival ONLINE
:25566
node-3 wrapper
g7h8i9
build STARTING
:25567
preview/ 10 lines
universe@na-game-1 › instance list
564574 game-server-na ONLINE :25100 docker
27c625 game-lobby-na ONLINE :25000 docker
2bb48e proxy-na ONLINE :40188 docker
universe@na-game-1 › cluster status
universe-cluster · members: 1 · master: na-game-1
universe@na-game-1 › instance execute 27c625 'say Universe online'
dispatched → 27c625
editions.toml 30 lines
[open-source] free · self-host · apache-2.0
[open-source]
orchestrator = "full: master, wrappers, clustering"
node_caps = false
self_host = true
runtimes = "screen, tmux, docker, kubernetes"
api = "REST + WebSocket, console, templates"
extensions = "community ecosystem"
[licensed] hardened · sla · from LunarLabs
[licensed]
includes = "everything in open-source"
entitlements = "key-gated + licensed extensions"
release_channel = "hardened"
sla = true
deployment_help = "hands-on, from LunarLabs"
# feature comparison
capability open-source licensed
master / wrapper clustering
template-based deployment
built-in runtimes (screen, tmux)
docker & kubernetes runtimes
REST + WebSocket API
official extensions (s3, metrics, dbs)
minecraft plugins (paper, velocity)
self-host, unlimited nodes
community support priority
web management panel self-host hosted + sso
license-key entitlements -
hardened release channel & slas -
onboarding & deployment support -

get started

one command. spin up the whole cluster.

One line installs Docker, writes a compose.yml, and starts the cluster. Prefer standalone? The JAR runs on its own, it just wants more flags.

~/universe
curl -fsSL https://get.lunarlabs.dev/universe | sh
# installs docker · writes compose.yml · brings the cluster up