Getting Started

Set up a virtual environment and install Endstone, ready for plugin development.

This is the developer install: Endstone in a virtual environment you can activate, with the endstone command and the API on your path. It's the setup the plugin guides assume.

If you only want to run a server, you don't need any of this - the download page has one-command and standalone options that skip the environment entirely.

We use uv throughout. It's a fast Python package manager that also installs Python itself, so you don't have to have a suitable interpreter already. Every step shows the pip equivalent if you'd rather stick with the standard tooling.

Prerequisites

  • Windows 10 or newer, or Linux (Ubuntu 22.04+, Debian 12+)
  • x86-64 - an Intel or AMD 64-bit processor

Those are the platforms Mojang ships BDS for, and Endstone runs Mojang's binary, so they're a hard requirement rather than a recommendation.

On macOS, Apple Silicon, or ARM Linux, this install won't work - there's no native BDS to run. Endstone runs there through Docker emulation instead; the download page has the command.

Install uv

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
curl -LsSf https://astral.sh/uv/install.sh | sh

Open a new terminal afterwards so the updated PATH takes effect, then check it:

uv --version

Homebrew, Scoop, and WinGet also package uv, if you'd rather install it that way.

Skip this section entirely if you're going the pip route - you'll need Python 3.10 or newer installed yourself, from python.org or your package manager.

Create a virtual environment

A virtual environment keeps Endstone and your plugins in one isolated place, separate from system packages. Make a folder for your server and create the environment inside it:

mkdir my-server
cd my-server
uv venv --python 3.12
mkdir my-server
cd my-server
python -m venv .venv

Both create a .venv folder holding the environment. With uv, --python 3.12 picks the interpreter version and downloads it if it isn't on your machine; drop the flag to use whatever uv finds.

On Linux and macOS, python may be python3 instead.

Activate it

.venv\Scripts\Activate.ps1

In Command Prompt rather than PowerShell, run .venv\Scripts\activate.bat.

If PowerShell refuses to run the script, allow local scripts for your user once:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
source .venv/bin/activate

Your prompt gains a (.venv) prefix while the environment is active. That's how you tell - and it lasts only for that terminal session, so you'll re-run this in every new shell. deactivate leaves it.

With uv you can skip activation and prefix commands with uv run instead - uv run endstone finds the project's .venv on its own. Activating is still worth it for interactive work, and it's what makes VS Code and your shell agree on which Python is in play.

Install Endstone

uv pip install endstone
pip install endstone

To upgrade later, add -U. For a pre-release build, add --prerelease allow under uv, or --pre under pip.

Verify

endstone --version

A version string means you're set. endstone: command not found almost always means the environment isn't active - check for the (.venv) prefix and re-run the activation step.

Starting the server is the same command without arguments:

endstone

The first launch downloads the Bedrock Dedicated Server into a bedrock_server/ folder and starts it. Stop it with stop in the console.

Build from source

Build from source when you need an unreleased branch, are patching the C++ core, or are porting Endstone to a new platform.

You'll need Conan 2, CMake 3.20+, and a C++20 toolchain. The project's Dockerfile documents the exact LLVM 20 + libc++ setup used by the official Linux wheels.

git clone https://github.com/EndstoneMC/endstone.git
cd endstone
uv pip install . -U --verbose

The first build pulls C++ dependencies through Conan (using the project-local profile at .conan2/profiles/default) and produces a wheel that uv installs into the active environment. Subsequent rebuilds reuse the Conan cache.

Where to next?

Endstone is installed in an environment you control. Your plugin gets installed into that same environment - that's what lets the server load it.

On this page