Skip to content

PrexorCloud vs SimpleCloud V2

PrexorCloud and SimpleCloud V2 target the same audience — operators who want a self-hosted Minecraft network orchestrator with templates, groups, and live management — but they make different architectural bets. SimpleCloud V2 leans into a microservices shape: a slim controller, droplets per concern, gRPC-typed APIs, MIT licence, Kotlin-first SDK. PrexorCloud collapses that into one Java controller plus one daemon per host, with mTLS, signed modules, and lease-scoped active-active HA as v1 features. If a microservices boundary between concerns matters to you and you prefer Kotlin, SimpleCloud V2 is a strong fit. If you want fewer moving parts, signed-bundle install, and active-active controllers without composing droplets, PrexorCloud is built for that.

Feature matrix

CapabilityPrexorCloudSimpleCloud V2Notes
LicenseApache 2.0MIT (source)Both permissive.
GovernanceSingle maintainer / small teamsimplecloudapp / theSimpleCloud orgs (source)Both small-team OSS.
Stable releasev1.0 (2026)V2 (current)Both actively developed.
Primary languageJava 25 (controller, daemon)Kotlin (controller, droplets) (source)Different SDK ergonomics.
Server platformsPaper, Spigot, FoliaPaper (source)PrexorCloud also covers Folia.
Proxy platformsVelocity, BungeeCordVelocity, Bungee (source)Equivalent.
Architecture styleMonolithic controller + per-host daemonMicroservices: controller + droplets (source)Fundamental shape difference.
gRPC API for operatorsgRPC is daemon-only; operator surface is RESTgRPC-first; “API is built on Protocol Buffers and gRPC” (source)Different SDK transport.
REST APIHand-curated OpenAPI 3.1, 151 endpointsAvailable (source)Both expose REST; PrexorCloud’s surface is larger.
CLIprexorctl (Go, single static binary) with cosign-verified releasesFirst-party CLI (source)Both first-party.
DashboardNuxt 4 SPA, SSE-drivenWeb dashboard (source)Both ship a first-party dashboard.
Static groupsYesYes (server groups)Equivalent concept.
Dynamic / auto-scaling groupsYes — weighted-scoring scheduler with per-group min, max, scaling rules, cooldownsYes — dynamic scaling supported (source)Different scheduling internals.
Layered templatesYes — chain (base → base-paper → group → user) with SHA-256 versioned snapshotsYes — templates supported (source)PrexorCloud emphasises versioned snapshots.
Crash classificationYes — exit-code analysis, console tail capture, auto-pause on crash loop”Cloud-independent crash handling” — running servers continue if controller fails (source)Different framing — SimpleCloud emphasises decoupled survival, PrexorCloud emphasises classification + auto-pause.
Real-time event streamServer-Sent Events, 22 typed events, replay via Last-Event-IDgRPC streaming for typed events (source)Different transport for similar use case.
Operator authJWT + bcrypt, optional email password reset, 28 RBAC permissionsAuthentication mechanisms documented (source)Both authenticate operators; PrexorCloud documents RBAC count + lockout policy.
Daemon/host authmTLS with controller-issued certs and per-node revocationmTLS for encrypted communication (source)Both use mTLS.
Plugin authPer-instance plugin tokens (ptk_*), short TTL, sequence-window replay protectionPlugin token system (source)Both isolate plugin credentials.
Module signingCosign sign-blob bundles + offline Rekor SET, fail-closed in productionNot documented as a first-party requirementPrexorCloud requires signed bundles in production by default.
Active-active HAYes — lease-scoped work + fencing tokens via Valkey”Only one controller can run simultaneously” (source)SimpleCloud V2 documents single-controller as a current limitation.
PersistenceMongoDB (durable) + Valkey (coordination)Database-backed, controller “synchronizes the database” on restart (source)Specific store choices differ.
Module / plugin modelPlatformModule SPI plus @CloudPlugin standalone jars; modules can ship in-server extensionsPlugins-as-droplets — “v2 modules have been converted into plugins” (source)Different extension boundaries.
Daemon-side modulesYes — DaemonModule with instance-lifecycle hooksDroplets serve a similar purpose at the architecture level (source)Different shape; both expose host-local extension.
Network composition / lobby fallbackFirst-class — proxy plugin walks lobby + fallback chain on connect and on kickProvided via proxy plugin ecosystem (Server Connection plugin) (source)Both support fallback chains.
Rolling deploymentsBuilt-in — maxUnavailable, plan-hash, pause/resume/rollbackNot documented as a first-class primitivePrexorCloud’s deployment is a top-level resource.
Backup / restoreFirst-class — prexorctl backup, manifest-based restore, dry-run validatorOperator-managedPrexorCloud ships a tested restore tool.
Disaster-recovery drillNightly automated DR drill in CIOperator-managedPrexorCloud encodes DR as a CI gate.
ObservabilityPrometheus /metrics, structured JSON logs, MongoDB-backed audit logLogs and metrics through droplets / pluginsBoth are operator-friendly.
Container per instanceNo — ProcessBuilder per JVM (see ADR 7)Docker support documented as in-progress (source)PrexorCloud will not adopt per-instance containers in v1.
Kubernetes / HelmOut of scope, Compose-firstNot first-class in coreBoth prioritise non-K8s deployment.
SDK languagesJava (modules), Java + multi-platform (plugins), Go (CLI), TypeScript (dashboard SDK)Java, Kotlin, Go (source)SimpleCloud’s SDK story leans on Kotlin idioms.
Bedrock supportNoNo (Paper / Velocity / Bungee documented)Out of scope for both.

Architecture comparison

PrexorCloud:

flowchart TB
  Dashboard["Dashboard (Nuxt SPA)"]
  CLI["prexorctl"]
  Controller["Controller<br/>(REST + gRPC + scheduler<br/>+ module manager + SSE bus)"]
  Daemon1["Daemon (host A)"]
  Daemon2["Daemon (host B)"]
  Mongo[("MongoDB<br/>durable state")]
  Valkey[("Valkey<br/>coordination + leases")]
  Dashboard --> Controller
  CLI --> Controller
  Controller -- mTLS gRPC --> Daemon1
  Controller -- mTLS gRPC --> Daemon2
  Controller --- Mongo
  Controller --- Valkey

SimpleCloud V2 (as documented in the controller concept page and the droplets index):

flowchart TB
  Dashboard["Web dashboard"]
  CLI["CLI"]
  Controller["Controller<br/>(server orchestration,<br/>task assignment)"]
  PlayerDroplet["Player Droplet"]
  ResourcepackDroplet["Resourcepack Droplet"]
  Plugins["Plugins<br/>(server / proxy)"]
  ServerHostA["Serverhost A"]
  ServerHostB["Serverhost B"]
  DB[("Database")]
  Dashboard --> Controller
  CLI --> Controller
  Controller -- gRPC --> PlayerDroplet
  Controller -- gRPC --> ResourcepackDroplet
  Controller -- gRPC --> ServerHostA
  Controller -- gRPC --> ServerHostB
  ServerHostA --- Plugins
  ServerHostB --- Plugins
  Controller --- DB

The shape is the visible difference. PrexorCloud puts the scheduler, event bus, REST API, and module manager in one JVM, with one daemon per host. SimpleCloud V2 splits responsibilities into droplets connected by gRPC. Both architectures are reasonable; they make different bets about operational surface area.

Where PrexorCloud is stronger

  • Active-active controller HA at v1. Multiple controllers run against the same MongoDB + Valkey and coordinate via lease + fencing tokens. SimpleCloud V2’s documentation states “there can be only one controller running at a time” (source), with multi-controller support listed as future work. See HA setup.
  • Cosign-signed module bundles, fail-closed in production. v1 defaults to modules.signing.required: true and supports offline Rekor SET so the controller does not need internet access to verify provenance.
  • Built-in rolling deployments. Pause / resume / rollback, plan-hash identity, crash-loop auto-pause are first-class primitives.
  • First-party backup, restore, and DR drill. prexorctl backup and prexorctl restore are part of v1, and a nightly CI job exercises the full backup → wipe → restore cycle.
  • One-host setup is one daemon, not several droplets. PrexorCloud collapses player tracking, resourcepack delivery (when shipped via a module), and event fan-out into the controller process. Operators who do not want to compose multiple service units find this simpler to reason about.
  • Java-first across the stack. If your team already maintains Paper plugins, PrexorCloud’s cloud-api, @CloudPlugin, and module SDK will feel familiar with no Kotlin context switch.

Where SimpleCloud V2 is stronger

  • Microservices boundaries. If you genuinely want player state, resourcepack delivery, and orchestration in separate processes — e.g. so they can be deployed, scaled, or replaced independently — SimpleCloud’s droplet model maps cleanly. PrexorCloud’s monolithic controller is a different choice (droplets).
  • Kotlin-first SDK ergonomics. SimpleCloud’s API is “primarily written in Kotlin,” and the cross-language Go / Java / Kotlin SDK story is well-documented (source). PrexorCloud’s SDK is Java-first; Kotlin works as a JVM consumer but is not a first-class authoring surface.
  • gRPC-first operator API. SimpleCloud’s “API is built on Protocol Buffers and gRPC” with strong typing across SDKs (source). PrexorCloud reserves gRPC for the controller-daemon channel and exposes a hand-curated OpenAPI 3.1 surface to operators.
  • Crash decoupling at the controller level. “If the controller fails, running servers continue operating in their containers or screens” (source). PrexorCloud daemons also keep instances alive across a controller outage, but SimpleCloud frames it as an explicit design property.
  • MIT licence for downstream packagers. SimpleCloud is MIT-licensed (source). PrexorCloud is Apache 2.0 — both are permissive, but MIT is shorter and stricter patent-grant aware operators sometimes prefer it.

Migration

If you operate SimpleCloud V2 today and want to evaluate PrexorCloud, follow the Migrate from SimpleCloud V2 recipe. It maps droplet-based concepts to PrexorCloud equivalents (controller + capability registry replaces the player droplet + plugins; templates replace per-host group config), and lists which SimpleCloud plugins have direct PrexorCloud first-party module equivalents and which need a custom port.

TL;DR

PrexorCloudSimpleCloud V2
Best fitOperators who want one controller + one daemon per host, mTLS, signed modules, and active-active HA at v1Operators who want a microservices shape with droplets per concern and a Kotlin / gRPC-first SDK
ArchitectureMonolithic controller + daemon per hostController + droplets + serverhosts
Default operator APIREST (OpenAPI 3.1)gRPC + REST
HA modelActive-active, lease-scopedSingle controller (multi-controller documented as future work)
Module signingCosign + Rekor SET, fail-closedNot documented as a default requirement
Primary SDK languageJavaKotlin