Skip to Content

Architecture

Crates, the JNI bridge and the Rust/JVM boundary.

Open on GitHubUpdated 2026-11-11

Top level

client 26.3  ←→  net (Rust, tokio)
                    │
                    ├── world, worldgen, redstone, mobs
                    │
                    └── JNI bridge  ←→  JVM (paper-api + api-impl)
                                              │
                                              └── plugins/*.jar

Networking, the world and worldgen live in Rust. The JVM does not own the tick: it receives events and requests through the bridge. If there are no listeners, the event stays in Rust.

Crates

CrateResponsibility
protocolPackets 26.3, VarInt, NBT, text components
netConnections, game, commands, mechanics, events
worldgenNoise, biomes, surfaces, carvers, structures
worldChunks, palettes, Anvil, light
dataEmbedded game data
bridgeJVM over JNI and the embedded API
serverBinary, CLI, setup wizard, console, backups
metricsMetrics and dashboard
labVanilla comparison and benchmarks
botsBot probes for packet parity

Parity with vanilla

  • Mechanics are implemented from server.jar and Paper bytecode, not from the wiki.
  • The command tree is checked against reports/commands.json, packets against reports/packets.json.
  • Terrain and world hashes are compared with vanilla.
  • chunkwake-lab runs scenarios on both servers and builds a diff report.

Plans

Not shipped yet, but described in ARCHITECTURE.md:

  • an STM tick: Paper semantics for plugins while executing in parallel;
  • dynamic islands instead of Folia's fixed regions;
  • the world as an event log with rollback and replay;
  • a Panama FFM bridge with shared memory instead of JNI.

Details: ARCHITECTURE.md.

On this page