deepslate-protocol 0.3.0

Minecraft protocol primitives for the Deepslate proxy.
Documentation

Deepslate

A high-performance Minecraft server proxy written in Rust.

Deepslate sits between your players and your backend servers, handling authentication, packet forwarding, and server switching. It's built for server networks that need a proxy they can trust at scale. Plugins are compiled into the binary rather than loaded at runtime, giving you full type safety with zero dispatch overhead.

Features

  • Supports Minecraft Java Edition 1.21.x
  • Online mode with Mojang authentication
  • Compatible with Velocity's modern forwarding
  • gRPC control plane for managing backend servers at runtime
  • Compile-time plugin system with an events API
  • Environment variable and code-driven configuration

Quick Start

Add deepslate to your Cargo.toml:

[dependencies]
deepslate = "0.3"
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }

Build your own proxy binary with a plugin:

use deepslate::{Proxy, ServerId};
use deepslate::event::*;
use deepslate::event::events::*;

const LOBBY: ServerId = ServerId::new("lobby", "127.0.0.1:25566");

struct MyPlugin;

impl Plugin for MyPlugin {
    fn register(&self, events: &mut EventManager) {
        events.subscribe::<LoginEvent>(PostOrder::NORMAL, |event| {
            println!("{} logged in", event.player.profile.name);
        });
    }
}

#[tokio::main]
async fn main() {
    let proxy = Proxy::builder()
        .forwarding_secret("your-secret")
        .server(&LOBBY)
        .try_servers([&LOBBY])
        .plugin(MyPlugin)
        .build()
        .expect("failed to build proxy");

    proxy.run().await.expect("proxy error");
}

Documentation

For configuration, the plugin API, events, and more, see the wiki.

License

Deepslate is licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.