Migrating Overview & Architecture
Moving from Bukkit / Spigot / Paper plugin development to Pumpkin involves shifting from a Java-centric object-oriented model to a compiled, multi-language WebAssembly (WASM) component model.
The table below contrasts the legacy Bukkit/Paper paradigm with Pumpkin's modern WebAssembly architecture:
| Concept | Bukkit / Spigot / Paper | Pumpkin |
|---|---|---|
| Language Support | Java / Kotlin / Scala (JVM) | Rust, Python, Kotlin, C#, Go, C |
| Binary Output | .jar Java Archive | .wasm WebAssembly Component |
| Plugin Descriptor | plugin.yml file | Programmatic PluginMetadata struct |
| Lifecycle Hooks | onEnable() / onDisable() | on_load(context) / on_unload(context) |
| Security & Isolation | Unrestricted JVM Reflection | Sandboxed WASM capability model |
| Concurrency | Single-threaded tick loop (BukkitScheduler) | Multithreaded native execution with Async runtime |
Detailed Migration Topics
Explore dedicated guides on migrating each major plugin subsystem:
- Migrating Commands — Transitioning from
getCommand().setExecutor()andplugin.ymlto Brigadier command trees. - Migrating Events — Replacing
@EventHandlerandListenerinterfaces with Pumpkin's blocking vs. non-blocking event system. - Migrating Inventories & GUIs — Moving from
Bukkit.createInventory()to Pumpkin container and window handlers. - Migrating Configuration & Data — Replaces
getConfig()/config.ymlwith native TOML, JSON, or custom storage.