
Endstone: Paper Server Power Now for Bedrock
endstone (EndstoneMC/endstone)
High-performance Minecraft Bedrock server software with native C++ and Python plugin API
Ever wanted to run a Bedrock server with the customization power of Java Edition's Paper? Endstone fills that gap, giving you plugin support and deep server control while keeping vanilla compatibility intact.
What Endstone Does
Let's be honest: vanilla Bedrock servers are limited. You can't cancel events, control packets, or modify core gameplay the way you can with Paper or Spigot. Endstone changes that by sitting between you and Bedrock itself, intercept events, and offering a full plugin API. It's not an addon system or a script engine. It's a proper server wrapper with the architectural power Java players have had for years.
The cool part? It's genuinely a drop-in replacement. Your world files, your configs, your existing Bedrock setup - they all work. You don't need to migrate anything. Just install Endstone, point it at your world, and start loading plugins. The underlying Bedrock server runs unchanged underneath, so vanilla features stay intact and reliable.
Under the hood, this is C++ doing the heavy lifting. The project's got 623 GitHub stars and active development (latest version supports Bedrock 1.26.12). That plugin API itself leans on design patterns familiar to Bukkit developers - if you've written Paper plugins before, the mental model will click immediately.
Why You'd Use This
The obvious case: you're running a Bedrock server and want to add custom commands, permissions systems, or gameplay mechanics without coding your own addon from scratch. Endstone handles the infrastructure - events, scoreboards, forms, inventory access, player data - so you can focus on logic.
Concrete examples. Say you want a leveling system where players gain XP and unlock commands. In vanilla Bedrock, you're fighting against addon limitations. In Endstone, you write an event handler that listens for player damage, calculates XP, updates a scoreboard, and grants permissions dynamically. A few dozen lines of Python and you're done. You could implement a full economy system, custom combat mechanics, dungeon events, or ranked PvP matchmaking.
Another angle: cross-server connectivity. You're running Bedrock but you want players to join from Java Edition servers via proxy tools. Endstone's packet control lets you intercept and modify join sequences, cosmetics, and other cross-version friction. It's not smooth out of the box, but it's possible in ways pure vanilla Bedrock isn't.
Windows or Linux. Docker support exists. Python 3.10+ on Windows 10+ or Ubuntu 22.04+ / Debian 12+. That's flexible enough for most hosting setups. And if you need C++ performance for a critical plugin, the API supports that too.
Getting Started
Installation is three commands:
pip install endstone
endstone
That's it. Python package manager pulls the release binary (Windows or Linux depending on your platform), and running `endstone` starts the server in your current directory. It'll generate a server config and a `plugins` folder.
For your first plugin, create a Python file in that folder. Here's the bare minimum:
from endstone.plugin import Plugin
from endstone.event import event_handler, PlayerJoinEvent
class MyPlugin(Plugin):
api_version = "0.10"
def on_enable(self):
self.logger.info("MyPlugin enabled!")
self.register_events(self)
@event_handler
def on_player_join(self, event: PlayerJoinEvent):
event.player.send_message(f"Welcome, {event.player.name}!")
Drop it in `plugins/`, restart the server, and you'll see "MyPlugin enabled!" in the logs. Players joining get a welcome message. That's the entire feedback loop.
The project provides templates for both Python and C++ if you want a scaffolded structure. But honestly, the bare plugin example above is small enough that you can copy it and start experimenting.
What Makes It Powerful
The API surface is substantial. We're talking 60+ events covering players joining, breaking blocks, taking damage, opening inventories, chatting, and more. Commands work with Bedrock's built-in command parsing (no custom string parsing required). You get scoreboards, forms (the interactive UI system), permissions, inventories, and access to player metadata and world data.
Packet control is where Endstone breaks away from other solutions. You can listen to low-level network packets before the server processes them. That opens doors to anti-cheat, cross-version compatibility hacks, and fine-grained event cancellation. Modify a packet mid-flight and the change propagates through normally.
Stay compatible with the latest Bedrock automatically? Design philosophy favors keeping up with Minecraft's monthly releases instead of playing catch-up. The v0.11.3 release added BlockType registry support and fixed several packet serialization bugs that were causing disconnects. That's the pace you're looking at - quick iterations keeping the API current.
Things That Catch People
Python plugins are convenient but slower than C++. If you're building something that runs on every tick for thousands of players, C++ is your answer. But for events that fire occasionally (player join, chat, custom commands), Python is fast enough.
Worlds created in pure Bedrock will work, but if you have existing realm backups or world-specific data outside the level folder (like realm backup metadata), you may need to migrate manually. Endstone handles the world format natively - it's just the surrounding infrastructure that sometimes needs adjustment.
Also, know that you're running a Bedrock server, not Java. That matters for plugin availability. Many popular Java plugins (Essentials, Vault, fancy chat formatting libraries) have no Bedrock equivalents. You'll write more from scratch. The community is smaller but growing, and the official template repos give you starting points.
How It Stacks Against Alternatives
PocketMine and Nukkit are older Bedrock server implementations. They don't run vanilla Bedrock underneath - they reimplement the server from scratch. That's more control but more maintenance, slower updates, and sometimes subtle differences in behavior. Endstone wraps real Bedrock, so vanilla features are guaranteed.
Addon scripting is official and limited on purpose. It's great for cosmetics and simple logic, but can't hook into server-level events or permissions. Endstone is the play if you need control.
If you're on Java Edition, Paper (or Spigot/Bukkit) is still the gold standard and always will be. Endstone is specifically for Bedrock communities that need plugin infrastructure.
Real-World Setup Notes
Run it in Docker for cleaner isolation and easier updates. Run it behind a reverse proxy if you're exposing it publicly (Bedrock uses UDP, so your firewall config matters). And before deploying anything to production, test your plugins locally. Endstone's development setup is straightforward enough that you can iterate on a laptop.
For hosting a public server, consider using the Free DNS tools we offer at Minecraft.How's free DNS service to manage your server domain reliably and cheaply. And if you're maintaining a whitelist, the Minecraft Whitelist Creator streamlines generating and managing your player list.
Check the Discord community (linked on the GitHub repo) before you get stuck. The maintainers respond quickly, and you'll find plugin examples and deployment advice from people running live servers.


