Skip to content

Releases: samuelloranger/redoxide

v0.3.0

Choose a tag to compare

@samuelloranger samuelloranger released this 12 Jul 13:13

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 Stopped while 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

  • anyhow bumped past RUSTSEC-2026-0190; unused thiserror dependency removed; tokio features 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

Choose a tag to compare

@samuelloranger samuelloranger released this 28 May 15:08

New features

  • Graceful shutdown via RCON — on idle timeout, redoxide sends /stop to the server via RCON before stopping the container. The server saves chunks and player data cleanly. Falls back to docker stop if RCON fails or the server doesn't exit within 30 seconds. Auto-configured from server.properties if enable-rcon=true is 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

Choose a tag to compare

@samuelloranger samuelloranger released this 28 May 13:43

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 read max-players and motd directly from your server, keeping config DRY.
  • Config cleanupprotocol_version and version_name are now last-resort fallbacks only, defaulting to 0 / "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

Choose a tag to compare

@samuelloranger samuelloranger released this 28 May 13:33

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.properties file and redoxide will read max-players and motd directly 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 start is 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.sock

See the README for full configuration reference.