Releases: samuelloranger/redoxide
Release list
v0.3.0
Security & correctness fixes
- Unbounded allocation from unauthenticated clients — packet, string, and RCON lengths are now bounds-checked (rejecting negative/oversized VarInts) before allocating, and handshake/status/login reads now time out (
handshake_timeout_secs, default 10s) instead of holding connections open indefinitely. - Lossy protocol re-encoding — the proxy now forwards the client's original handshake and Login Start packets byte-for-byte instead of reconstructing them, fixing broken support for protocol versions other than 1.20.2+ and no longer stripping modded (Forge/Fabric) handshake markers.
- Lifecycle races — a client that disconnects while the container is still booting no longer leaves it running forever with nothing scheduled to stop it. A failed idle-shutdown no longer reports the server as
Stoppedwhile it's actually still running. A login arriving while an idle shutdown is in progress now waits for it to resolve instead of being forwarded into a container that's mid-stop. A failed container start now notifies a waiting client immediately instead of after the full startup timeout.
Maintenance
anyhowbumped past RUSTSEC-2026-0190; unusedthiserrordependency removed;tokiofeatures narrowed to only what's used.- Declared and CI-enforced MSRV: Rust 1.88+.
Docker
ghcr.io/samuelloranger/redoxide:v0.3.0
ghcr.io/samuelloranger/redoxide:0.3
ghcr.io/samuelloranger/redoxide:latest
v0.2.0
New features
-
Graceful shutdown via RCON — on idle timeout, redoxide sends
/stopto the server via RCON before stopping the container. The server saves chunks and player data cleanly. Falls back todocker stopif RCON fails or the server doesn't exit within 30 seconds. Auto-configured fromserver.propertiesifenable-rcon=trueis set — no extra config needed. -
External state sync — redoxide polls the container every 15 seconds. If the container is stopped externally (
docker stop minecraft) it updates its state immediately so the server list reflects reality. If started externally, it detects that too and re-probes the version.
Docker
ghcr.io/samuelloranger/redoxide:v0.2.0
ghcr.io/samuelloranger/redoxide:0.2
ghcr.io/samuelloranger/redoxide:latest
v0.1.1
Improvements since v0.1.0
- Version auto-detection — redoxide pings the real server after it starts and caches the detected protocol version and version name. The correct version shows in the server list even when the server is stopped.
- Named Docker volume — cache is stored in
redoxide-cache:/var/cache/redoxide. No manual file creation required. - server.properties support — set
server_properties = "/server.properties"in config to readmax-playersandmotddirectly from your server, keeping config DRY. - Config cleanup —
protocol_versionandversion_nameare now last-resort fallbacks only, defaulting to0/"unknown". They are overwritten automatically on first server boot. - Build time — amd64 only. Builds complete in ~2 minutes.
Docker
ghcr.io/samuelloranger/redoxide:v0.1.1
ghcr.io/samuelloranger/redoxide:0.1
ghcr.io/samuelloranger/redoxide:latest
v0.1.0 — Initial Release
redoxide v0.1.0
On-demand Minecraft server proxy written in Rust. Starts your container when a player connects, shuts it down after everyone leaves.
Features
- Transparent boot wait — player connections are held open while the server starts. No manual retry needed — the client sits on "Logging in..." and joins seamlessly once the server is ready.
- Ping never wakes the server — only an actual login attempt triggers a container start. Server list refreshes are answered immediately with the MOTD, without spinning up the server.
- Login Plugin Request keepalives — sent every 10s during the boot wait to prevent the Minecraft client from timing out (standard protocol, works with all 1.13+ clients).
- Auto-detected protocol version — redoxide pings the real server after it starts and caches the detected protocol version and version name in
.redoxide-version-cache.json. The correct version is shown in the server list even when the server is stopped. - server.properties integration — optionally mount your
server.propertiesfile and redoxide will readmax-playersandmotddirectly from it, keeping your config DRY. - Idle shutdown — configurable timer stops the container automatically after the last player disconnects.
- Concurrent logins handled correctly — if multiple players connect while the server is starting, only one
docker startis issued. All waiting connections receive keepalives independently.
Docker
ghcr.io/samuelloranger/redoxide:v0.1.0
ghcr.io/samuelloranger/redoxide:latest
Multi-platform: linux/amd64, linux/arm64
Quick start
services:
minecraft:
restart: "no"
image: eclipse-temurin:25-jre-jammy
# ...
redoxide:
image: ghcr.io/samuelloranger/redoxide:v0.1.0
restart: unless-stopped
ports:
- "25565:25565"
volumes:
- ./config.toml:/config.toml:ro
- ./server.properties:/server.properties:ro
- ./.redoxide-version-cache.json:/.redoxide-version-cache.json
- /var/run/docker.sock:/var/run/docker.sockSee the README for full configuration reference.