A Pumpkin Minecraft Java server, compiled from Rust to WebAssembly and hosted in a Cloudflare Durable Object. Workers accepts the TCP connection; Pumpkin runs the game; a mounted SQLite filesystem stores the world.
Minecraft → Workers TCP ingress → MinecraftWorld → Pumpkin + SQLite
The supported build host is macOS with Homebrew. Install Git, rustup, Python 3.11+, and Node 24+ (26 recommended). From a checkout of this repository:
brew install emscripten
npm ci
bash scripts/setup.sh
npm run devSetup installs the pinned Rust toolchain, fetches dependency sources, and builds
the matching wasm-bindgen CLI. npm run dev compiles Pumpkin and starts Wrangler.
The first build takes several minutes; later builds use Cargo's cache.
Connect Minecraft Java 26.2 to localhost:25565. Status is available at
http://localhost:8787/.
The example uses offline mode, with encryption and compression disabled. Local
listeners bind to loopback. WORLD_NAME in wrangler.jsonc selects
the Durable Object; server settings are in src/config.rs.
World data lives under .data/workers/server/. After the last connection closes,
the server saves and stops. The next connection restores the same world. Wait for
status to report phase: "idle" and a checkpoint timestamp before stopping
Wrangler; changes held in memory can be lost if the process is terminated early.
npm run build # Compile the server without starting Wrangler
npm test # Two-player gameplay, a persistent block edit, and restart
npm run test:scheduler
npm run typecheckThe tests use separate data under .data/probes/. They verify that two clients
observe the same block edit and that the edit and player position survive restart.
See development, architecture, and dependency pins for build details and patch maintenance.
After setup, build the runtime and deploy the Worker:
npm run build
npx wrangler deployDeployment uses standard SQLite-backed Durable Objects with Workers TCP ingress.
See memory usage for the optimizations and measurements.
Provision the public TCP endpoint separately and route it to this Worker's
connect handler. The listener in wrangler.jsonc is for local development.
Built on Pumpkin, Guy Bedford's Rust/Emscripten work, workers-rs, Thomas Rubini's TCP ingress work, and worker-fs-mount.
Licensed under GPL-3.0-only, consistent with Pumpkin. The original MIT notice is retained for inherited code. Dependencies retain their own licenses. This is an unofficial project and is not affiliated with Mojang or Microsoft.
