This is not the Paper API
A plugin written for Paper does not run on mcrs. This page is for developers who come from Paper or Bukkit. It tells you what you do in place of writing against a plugin API, what already works and what is still missing.
mcrs has no Bukkit-like API and no facade crate, and that is a decision of the project.1 It also has no plugin loader today, so the server cannot load a jar, a wasm module or a script, and JVM code in Java or Kotlin cannot run inside it. Nobody has opened an issue about a loader or made a decision on one, so this page does not say “never”.
What you do today is write a Bevy plugin in Rust, add it next to the server plugins in your own main, and build one binary. This is closer to Minestom, where the server is a library and you write the main, than to Paper, where you get a ready server and put jars into plugins/. The direction of the project is mcrs as a library, from a proxy to a full server.2
What works today
Section titled “What works today”The table lists what your code can already do, with the issue or the pull request behind each row.
| Need | State | Where |
|---|---|---|
| Remove or replace a part of the server | The server is a group of plugins, and you can disable its members | Works#279 |
| Add your code to every dimension or to one | add_dimension_plugin and add_dimension_plugin_to |
Works#280 |
| Vanilla gameplay as removable plugins | Done | Works#282 |
| Intercept and cancel a chat line | PlayerChatEvent, the only public cancellable event |
Works#636 |
| Register your own command | add_command with a typed command tree |
Works#579 |
The entry point is src/main.rs. It creates the app and adds MinecraftServerPlugins, the plugin group of the server.
What is not there yet
Section titled “What is not there yet”Each row below has an issue, except the plugin loader.
| Need | State |
|---|---|
| Public cancellable events for join, leave, block break, block place and movement | Partial#283 |
| Replace the chunk source (a flat or empty world, your own generator) | WIP#281 |
| Create and remove dimensions while the server runs | WIP#546 |
| Depend on published crates (today only a git dependency) | Undecided#321 |
| Plugin loader for jars, wasm or scripts | Undecided no issue, no decision |
| Save the world to disk | WIP#78 |
Paper habits that do not carry over
Section titled “Paper habits that do not carry over”| Paper habit | In mcrs |
|---|---|
plugin.yml, jar in plugins/ |
No. Your code is compiled into the server binary |
Static Bukkit.getServer() |
No, rejected in Not planned#437. A system receives its data as parameters |
| A stable API with versions | No. You build against the public crates and plugins, and their versions are not stable |
/reload and hot reload of code |
No. Data pack reload is planned in WIP#316 |
| Scripting (Lua, JS) | No issue, no decision |
Paper and Minestom in mcrs terms has the full lookup table, and Status shows the current state of every area.
Next: From objects to data explains the three habits to change before you write code, and Rust for Java developers follows it.
Footnotes
Section titled “Footnotes”Sources and verification
Verified: 26.4-snapshot-7, 51d45c26a, 2026-11-09