# 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`:
```toml
[dependencies]
deepslate = "0.1"
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
```
Build your own proxy binary with a plugin:
```rust
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](https://man.sr.ht/~deepslate/deepslate/).
## License
Deepslate is licensed under either of
- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or <https://www.apache.org/licenses/LICENSE-2.0>)
- MIT license ([LICENSE-MIT](LICENSE-MIT) or <https://opensource.org/licenses/MIT>)
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.