Installation
This guide will show you how to install and run Steel.
There are multiple ways to do that:
What to select
Section titled “What to select”You should choose the installation method that matches where Steel will run.
-
If you want to run Steel directly on the host system, use the pre-built binaries.
-
If you already use Kubernetes, Docker Swarm, or a standard Docker host, the Docker container is the recommended option.
-
If your target platform is Pelican, Pterodactyl, or another egg-based panel, use the provided Steel egg in JSON or YAML format.
-
If you want native processor speeds or your platform / architecture is not currently supported, build Steel from source for your target system.
| Method | Linux x64 | Linux arm64 | Linux armv7 | Linux armv6 | Windows x64 | Windows arm | Mac arm | Mac x64 |
|---|---|---|---|---|---|---|---|---|
| Binary | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ |
| Docker | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ |
| Egg | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Self-built | ✅ | ✅ | ⚠️ | ⚠️ | ✅ | ✅ | ✅ | ✅ |
✅: Supported. ❌: Not currently supported. ⚠️: Needs small adjustments.
The sections below describe each option in more detail.
Pre-built Binaries
Section titled “Pre-built Binaries”Pre-built binaries are available on our downloads page for the following platforms:
- Linux (x86_64)
- Windows (x86_64)
- MacOS (ARM)
Alternatively our GitHub releases page has the exact same files available.
Once downloaded, to run the server you just need to open your prefered terminal (e.g. PowerShell, Ghostty, Kitty, etc…) in your downloaded executable directory and run the following command:
# Windows./steel.exe
# MacOS / Linux./steelDocker
Section titled “Docker”Steel does not publish a latest Docker tag. Use a specific version tag instead, this way upgrades are always planned and no container updates unexpectedly.
The nightly tag is available for plugin testing and early testing of upcoming changes. It follows the latest commit on the master branch and may contain bugs that have not been fixed for a release yet. Do not use nightly in production.
Start the image
Section titled “Start the image”Run the Steel container with the server port exposed and local folders mounted for configuration and saves:
docker run -d -p 25565:25565 -v ./config:/config -v ./saves:/saves -v ./logs:/logs ghcr.io/steel-foundation/steelmc:<version>How to change ports and folders
Section titled “How to change ports and folders”For those without any idea of how to configure docker, here’s a small cheatsheet of the configurable parameters:
-p(--port,ports): The first number represents the host port, which can be changed. The second one is the port inside the Docker container and should only be changed to match the one in the Steel config. For example,-p 1111:25565makes the Minecraft server reachable on port1111on the Linux server.-v(--volume,volumes): The route before the colon is the path on your host system, which can be relative to the compose file. The path after the colon is inside the Docker container and should not be changed.
For Pelican and Pterodactyl, Steel provides an egg that can be imported directly from the panel’s egg store.
For other egg-based platforms, use the JSON or YAML egg files from our repository, or download the matching egg from one of the supported stores when available.
Pelican: [Coming Soon]
Pterodactyl: [Coming Soon]
Self Compilation
Section titled “Self Compilation”Requirements
Section titled “Requirements”- Rust nightly toolchain - Steel uses Rust 2024 edition features
- 64-bit operating system - Linux, MacOS, or Windows
- Git - To clone the repository
Installing Rust
Section titled “Installing Rust”If you don’t have Rust installed, use rustup.
# For Unix systems only (e.g. MacOS, Linux)curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shSteel requires the nightly toolchain. The repository includes a rust-toolchain.toml that automatically selects the correct version.
Building from Source
Section titled “Building from Source”# Clone the repositorygit clone https://github.com/Steel-Foundation/SteelMC.gitcd SteelMC
# Build in release mode (recommended for running)cargo build-native --releaseBuild Commands
Section titled “Build Commands”| Command | Purpose |
|---|---|
cargo build-native | Debug build (faster compile, slower runtime) (with architecture-specific optimizations) |
cargo build-native --release | Release build (slower compile, optimized) (with architecture-specific optimizations) |
cargo build | Debug build (faster compile, slower runtime) |
cargo build --release | Release build (slower compile, optimized) |
cargo check | Fast syntax and type checking |
cargo test | Run the test suite |
cargo clippy | Run the linter |
Build Features
Section titled “Build Features”Steel supports optional build features that can be enabled with --features:
# Enable deadlock detection (debug only)cargo build-native --features deadlock_detection
# Enable heap profiling with dhatcargo build-native --features dhat-heap
# Disable the default mimalloc allocatorcargo build-native --no-default-featuresAvailable features:
| Feature | Description |
|---|---|
mimalloc | Use mimalloc allocator (enabled by default) |
deadlock_detection | Enable parking_lot deadlock detection for debugging lock issues |
dhat-heap | Enable heap profiling with dhat |
Deadlock Detection is particularly useful during development if you’re experiencing hangs or suspect lock-related issues. When enabled, parking_lot will detect potential deadlocks and panic with diagnostic information.
Running the Server
Section titled “Running the Server”# Run directly with cargo (debug mode)cargo run-native
# Run with release optimizationscargo run-native --release
# Or run the built binary directly./target/release/steelNext Steps
Section titled “Next Steps”Now that you have Steel running, proceed to Configuration to customize your server.
SteelMC logo by colonthreeing.