Tools for making garbage
- Any plugin jar files modified while loaded (maven compile or export or even drag/drop) are automatically reloaded. So now all you have to do is smack the run button and bam, its already in the game without reloading, dragging or really doing anything. Psst... Works best with multiple monitors.
- New Plugins are hot-dropped into the server when they are added to the plugins folder
- It's basically plugman also. You can unload load and reload plugins.
| Runtime | Support | Notes |
|---|---|---|
| Paper | Primary | Public PluginManager load path; hot-unload remains best-effort |
| Purpur | Primary | Paper-family (same load/unload paths) |
| Leaf | Primary | Paper-family fork; treated like Paper |
| Folia | Supported | folia-supported: true; GlobalRegionScheduler only; hot-reload is best-effort |
| Canvas | Supported | Folia fork; same regionized scheduling rules as Folia |
| Spigot | Best-effort | paper-plugin.yml-only jars are rejected; dual-descriptor jars load through plugin.yml; compiled against Paper 26.2 |
plugin.ymlapi-version:26.2- Compile target: Paper API
26.2(seegradle/libs.versions.toml) - Runtime JVM:
Java 25+ - Lifecycle mutations always run on the global/main thread (never on PluginOps / network threads)
- On Folia/Canvas, player sounds/messages that touch entities are routed through the entity scheduler
- Third-party plugins without
folia-supported: truemay still fail when hot-loaded - Plugin reload on regionized servers is inherently riskier than on single-threaded Paper/Spigot
- Classic
Bukkit.getScheduler()is never used on Folia/Canvas (it throwsUnsupportedOperationException) - Runtime hot-load preserves required/optional dependency discovery, but cannot recreate Paper's startup provider graph; missing
BEFORE,AFTER, andOMITdependencies are loaded first so the public PluginManager can validate the target plugin
watcher.ignore— plugin names that auto hot-drop/reload/unload will skip (defaults include LuckPerms, Vault, ProtocolLib, …)watcher.only— if non-empty, only these plugins are auto-managed (allowlist mode)- Manual
/bile load|unload|reloadalways bypasses ignore/only watcher.coalesce-window-ticks— batch nearby jar changes into one dependency-aware reload flushlifecycle.health-check— fail reload if plugin is not actually enabled/registered after enableobservability.log-timings— log unload/load/reload phase timings