A Minecraft Java 26.2 proxy in Rust, thread-per-core io_uring, share-nothing.
Right this way!
Rust, Maven, JDK 25.
cargo build --release
mvn -f minestom/pom.xml -DskipTests packageforwarding.secret is created on first run (or set $DOORWAY_FORWARDING_SECRET).
./run.sh # lobby :25566 + nether :25567 + proxy :25565
./run.sh --one # lobby only
./run.sh --two --compress=256 # compression, Paper's default threshold
./run.sh --two --online # Mojang hasJoined, then VelocityClient 26.2 → 127.0.0.1:25565 (or the machine's IP). Offline nick is fine unless --online.
Stop with Ctrl-C, or /shutdown in chat.
Config is doorway.toml (bind, motd, default, [[servers]]). One worker per CPU, or DOORWAY_WORKERS=1.
These are proxy commands, not Minestom.
/server nether//server lobby— same TCP, no reconnect/broadcast 123— everyone on the proxy;/broadcast <red>hi— MiniMessage/kick Steve//kick Steve <gold>bye/shutdown//shutdown <yellow>restart— kick everyone, exit
Tab-complete on /server and /kick. Colors: <red>, <gold>, <#ff55ff>, <bold>, <reset>. Literal < is \<.
- Join. Chunks load, Minestom chat says
doorway lobby. Server list MOTD is the toml string. - Same nick. A second login with that name (any case) gets
Already connected. The first player stays. After they quit, the name is free. - Compression.
./run.sh --two --compress=256. Commands still work. Fly around, chunks stay intact. - Broadcast.
/broadcast 123and/broadcast <gold><bold>ok</bold>. Kick/shutdown with a tag - colored reason. - Online.
./run.sh --two --online, licensed account. Offline nick is refused. - Stop.
/shutdownor Ctrl-C: everyone kicked, processes gone.
Without a client:
cargo testMIT. See LICENSE.