Skip to content

Installation

This guide will show you how to install and run Steel.
There are multiple ways to do that:

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.

MethodLinux x64Linux arm64Linux armv7Linux armv6Windows x64Windows armMac armMac 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 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:

Terminal window
# Windows
./steel.exe
# MacOS / Linux
./steel

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.

Run the Steel container with the server port exposed and local folders mounted for configuration and saves:

Terminal window
docker run -d -p 25565:25565 -v ./config:/config -v ./saves:/saves -v ./logs:/logs ghcr.io/steel-foundation/steelmc:<version>

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:25565 makes the Minecraft server reachable on port 1111 on 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]

  • Rust nightly toolchain - Steel uses Rust 2024 edition features
  • 64-bit operating system - Linux, MacOS, or Windows
  • Git - To clone the repository

If you don’t have Rust installed, use rustup.

Terminal window
# For Unix systems only (e.g. MacOS, Linux)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Steel requires the nightly toolchain. The repository includes a rust-toolchain.toml that automatically selects the correct version.

Terminal window
# Clone the repository
git clone https://github.com/Steel-Foundation/SteelMC.git
cd SteelMC
# Build in release mode (recommended for running)
cargo build-native --release
CommandPurpose
cargo build-nativeDebug build (faster compile, slower runtime) (with architecture-specific optimizations)
cargo build-native --releaseRelease build (slower compile, optimized) (with architecture-specific optimizations)
cargo buildDebug build (faster compile, slower runtime)
cargo build --releaseRelease build (slower compile, optimized)
cargo checkFast syntax and type checking
cargo testRun the test suite
cargo clippyRun the linter

Steel supports optional build features that can be enabled with --features:

Terminal window
# Enable deadlock detection (debug only)
cargo build-native --features deadlock_detection
# Enable heap profiling with dhat
cargo build-native --features dhat-heap
# Disable the default mimalloc allocator
cargo build-native --no-default-features

Available features:

FeatureDescription
mimallocUse mimalloc allocator (enabled by default)
deadlock_detectionEnable parking_lot deadlock detection for debugging lock issues
dhat-heapEnable 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.

Terminal window
# Run directly with cargo (debug mode)
cargo run-native
# Run with release optimizations
cargo run-native --release
# Or run the built binary directly
./target/release/steel

Now that you have Steel running, proceed to Configuration to customize your server.

SteelMC logo by colonthreeing.