enderpearl
Async reverse proxy for Minecraft Java and HTTP traffic with automated server lifecycle.
Enderpearl shuts down the backend when idle and wakes it on ping or join.
Install
Or download a prebuilt binary from GitHub Releases — .deb, .rpm, .msi included.
Docker:
Quick start
Configuration
[]
= "0.0.0.0"
= 25565
[]
= "127.0.0.1:25566"
= "docker start mc-server"
# Optional:
= "docker stop mc-server"
= "ping" # join | ping | always
= "{...}" # fake MOTD JSON
= "{...}" # fake disconnect JSON
= "https://..." # POST on wake
= "https://..." # POST on shutdown
[]
= "127.0.0.1:8080"
When a client connects, enderpearl checks if the backend is reachable. If online, traffic is proxied straight through. If offline, JavaProxy intercepts the Minecraft handshake, responds with a fake MOTD (or disconnect), and runs wake_command to start the server. An inactivity monitor polls the backend and runs shutdown_cmd after the configured idle timeout.
CLI
| Command | What |
|---|---|
run (default) |
Start the proxy |
init |
Interactive config wizard |
| Flag | What |
|---|---|
-c, --config |
Config path (default: enderpearl.toml) |
Library usage
Embed enderpearl's proxy engine in your own Rust application:
let config = EnderConfig ;
let router = new?;
router.serve.await?;
Custom lifecycle handler — implement LifecycleHandler for your own startup/shutdown logic:
Custom protocols — define new protocol handlers with ServerProxy:
Then add it to the config:
let mut route = new;
route.proxy = Some;
The route is redirected to the proxy's local port — refractium handles traffic detection and forwarding.
Feature flags
| Feature | What |
|---|---|
cli |
CLI parsing (enderpearl init, --config) + TOML parsing |
java |
Minecraft Java protocol detection and JavaProxy |
web |
HTTP protocol detection |
pretty-cli |
Colored output, banners, spinners |
logging |
Structured tracing to stderr |
# Headless server, no colors needed:
[!NOTE] Maintenance mode. Bug fixes and dep updates only.
License
MIT