hyperion is a free, open source gaming project written in Rust and released under Apache-2.0. It has 1,085 GitHub stars, 34 forks and 45 open issues, and was last pushed 25 hours ago. On this registry it ranks #37 of 38 tracked projects in Gaming, with 5 head-to-head comparisons available.

What is hyperion?

Hyperion is a Minecraft game engine written in Rust for running massive custom multiplayer events, aimed at server operators and game developers who need thousands of concurrent players in a single world.

What it is

Hyperion is a Minecraft game engine built in Rust whose architecture is driven by an entity-component-system model using flecs through Flecs-Rust. It combines a vertically scaled, multi-threaded game server running Bevy's multi-threaded ECS with a horizontally scaled proxy layer that handles player-specific work such as regional multicasting. A single game tick runs at 50ms, moving through an ingress system, core game engine systems, event logic systems, and an egress system, with Tokio providing asynchronous I/O on the boundary.

The concrete problem Hyperion addresses is scale: it targets worlds containing 10,000 or more players, and its pilot event aims to break the Guinness World Record for largest videogame PvP battle, currently 8,825 by EVE Online. Where an ordinary Minecraft server implementation would collapse under that load, Hyperion distributes the work — bulk player processing happens in the proxy layer, which can be added horizontally as player count grows — and it replaces hand-rolled server plugins and vanilla server modifications with a purpose-built engine offering its own block, combat, and inventory systems.

Key capabilities

  • Multi-threaded vertical scaling and a proxy layer for horizontal scaling, both listed as implemented in the feature status table.
  • Performance tracing built on the Tracy profiler, runnable with HYPERION_PROFILE=release-full.
  • Basic anti-cheat covering core anti-cheat functionality, alongside an implemented plugin API demonstrated by the events/bedwars event.
  • Core mechanics including block breaking and placing with physics simulation, entity-entity and block-entity collisions, a dynamic lighting engine, configurable world borders, and a WorldEdit-like Block Edit API.
  • Custom PvP combat mechanics, a full inventory and item management system, and raycasting required for ranged combat and arrows.
  • Player-facing systems: particle effects, global and proximity chat, a custom command framework, and proximity voice using Simple Voice Chat.
  • Benchmarks published for 1, 10, 100, 1,000, and 5,000 players, with tick time ranging from 0.24 ms at 1 player to 1.42 ms at 5,000 players on a 14-core 2023 MacBook Pro Max at chunk render distance 32.

Who uses it and how

  • Event organisers staging very large PvP encounters, per the project's stated goal of a pilot event surpassing the 8,825-player record.
  • Developers building custom game modes on the plugin API, as the events/bedwars tree in the repository illustrates.
  • Operators who load-test with the bundled bot launcher, for example nix run .#bots -- 127.0.0.1:25565 {number}, before running the real event.
  • Teams that scale out through the proxy layer for regional multicasting while running game servers vertically scaled alongside it.
  • Contributors and testers reproducing the published benchmark at commit faac9117 with a 32-chunk render distance across 4,225 chunks.

Getting started

The README's benchmark instructions run the engine through Nix: HYPERION_PROFILE=release-full nix run .#bedwars, with load generated separately by nix run .#bots -- 127.0.0.1:25565 {number}.

How it compares

No list of paid products is provided, and no comparable tools are named in the available facts, so Hyperion stands alone in this registry.

When to use it — and when not to

A self-hoster must operate both the vertically scaled game servers and the horizontally scaled proxy layer, and must be prepared to deploy bots to reach and validate the target player counts. Moderator tools are still work in progress under issue #425, alongside 45 open issues overall, so teams needing mature admin controls and monitoring should treat that area as incomplete. The project carries an Apache-2.0 licence, so licensing is not a barrier, but the feature status table's marked WIP entries are the honest signal of what is not yet finished.

project readme (upstream, from github) — read inline

Hyperion

Discord invite link Documentation Issues Last Commit

Hyperion is a Minecraft game engine that can have 10,000+ players in one world. Our pilot event hopes to break the PvP Guinness World Record of (8825 by EVE Online). The architecture is ECS-driven using flecs via Flecs-Rust.

https://github.com/user-attachments/assets/64a4a8c7-f375-4821-a1c7-0efc69c1ae0b

Feature Status

Feature Status Notes
Technical Infrastructure
🧵 Multi-threading ✅ Implemented Vertical scaling
🔄 Proxy Layer ✅ Implemented Horizontal scaling
📊 Performance Tracing ✅ Implemented Using Tracy profiler
🛡️ Basic Anti-Cheat ✅ Implemented Core anti-cheat functionality
🔧 Moderator Tools 🚧 WIP #425, @Kumpelinus Admin controls and monitoring
🔌 Plugin API ✅ Implemented Extensible plugin system; see events/bedwars
Core Game Mechanics
🧱 Block Breaking/Placing ✅ Implemented Including physics simulation
💫 Entity Collisions ✅ Implemented Both entity-entity and block-entity
💡 Lighting Engine ✅ Implemented Dynamic lighting updates
🌐 World Borders ✅ Implemented Configurable boundaries
🛠️ Block Edit API ✅ Implemented WorldEdit-like functionality
⚔️ PvP Combat ✅ Implemented Custom combat mechanics
🎒 Inventory System ✅ Implemented Full item management
🎯 Raycasting ✅ Implemented Required for ranged combat/arrows
Player Experience
✨ Particle Effects ✅ Implemented Full particle support
💬 Chat System ✅ Implemented Global and proximity chat
⌨️ Commands ✅ Implemented Custom command framework
🎤 Proximity Voice ✅ Implemented Using Simple Voice Chat

Benchmarks

Players Tick Time (ms) Core Usage (%) Total CPU Utilization (%)
1 0.24 4.3 0.31
10 0.30 10.3 0.74
100 0.46 10.7 0.76
1000 0.40 15.3 1.09
5000 1.42 35.6 2.54

performance

Test Environment:

  • Machine: 2023 MacBook Pro Max 16" (14-cores)
  • Chunk Render Distance: 32 (4225 total)
  • Commit hash faac9117 run with HYPERION_PROFILE=release-full nix run .#bedwars
  • Bot Launch Command: nix run .#bots -- 127.0.0.1:25565 {number}

The bulk of player-specific processing occurs in our proxy layer, which handles tasks like regional multicasting and can be horizontally scaled to maintain performance as player count grows.

image

Architecture

Overview

flowchart TB
    subgraph GameServer["Game Server (↕️ Scaled)"]
        direction TB
        subgraph BevyMT["Bevy Multi-threaded ECS"]
            direction LR
            IngressSys["Ingress System"] --> |"1 Game Tick (50ms)"| CoreSys["Core Systems (Game Engine)"] --> GameSys["Game Systems (Event Logic)"] --> EgressSys["Egress System"]
        end
        
        TokioIO["Tokio Async I/O"]
        TokioIO --> IngressSys
        EgressSys --> TokioIO
    end
    
    subgraph ProxyLayer["Proxy Layer (↔️ Scaled)"]
        direction TB
        Proxy1["Hyperion Proxy"]
        Proxy2["Hyperion Proxy"]
        ProxyN["Hyperion Proxy"]
        
        MulticastLogic["Regional Multicasting"]
    end
    
    subgraph AuthLayer["Authentication"]
        Velocity1["Velocity + ViaVersion"]
        Velocity2["Velocity + ViaVersion"]
        VelocityN["Velocity + ViaVersion"]
    end
    
    Player1_1((Player 1))
    Player1_2((Player 2))
    Player2_1((Player 3))
    Player2_2((Player 4))
    PlayerN_1((Player N-1))
    PlayerN_2((Player N))
    
    TokioIO <--> |"Rkyv-encoded"| Proxy1
    TokioIO <--> |"Rkyv-encoded"| Proxy2
    TokioIO <--> |"Rkyv-encoded"| ProxyN
    
    Proxy1 <--> Velocity1
    Proxy2 <--> Velocity2
    ProxyN <--> VelocityN
    
    Velocity1 --> Player1_1
    Velocity1 --> Player1_2
    Velocity2 --> Player2_1
    Velocity2 --> Player2_2
    VelocityN --> PlayerN_1
    VelocityN --> PlayerN_2
    
    classDef server fill:#f96,stroke:#333,stroke-width:4px
    classDef proxy fill:#9cf,stroke:#333,stroke-width:2px
    classDef auth fill:#fcf,stroke:#333,stroke-width:2px
    classDef ecs fill:#ff9,stroke:#333,stroke-width:3px
    classDef system fill:#ffd,stroke:#333,stroke-width:2px
    classDef async fill:#e7e7e7,stroke:#333,stroke-width:2px
    
    class GameServer server
    class BevyMT ecs
    class IngressSys,CoreSys,GameSys,EgressSys system
    class Proxy1,Proxy2,ProxyN proxy
    class Velocity1,Velocity2,VelocityN auth
    class TokioIO async

Proxy

sequenceDiagram
    participant P as Player
    participant PH as Proxy Handler
    participant B as Broadcast System
    participant S as Game Server

    Note over P,S: Player → Server Flow
    P->>PH: Player Packet
    PH->>S: Forward Immediately

    Note over P,S: Server → Player Flow
    S->>B: Server Packets

    Note over B: Broadcasting Decision
    alt Local Broadcast
        B->>P: Send to nearby players (BVH)
    else Channel Broadcast
        B->>P: Send to subscribed players
    else Global Broadcast
        B->>P: Send to all players
    else Unicast
        B->>P: Send to specific player
    end

Running

Network topology

Hyperion uses one game server which runs all game-related code (e.g. physics, game events). One or more proxies can connect to the game server. Players connect to one of the proxies.

For development and testing purposes, it is okay to run one game server and one proxy on the same server. When generating keys, you will need to change the key and certificate file names used below to avoid file name conflicts.

On a production environment, the game server and each proxy should run on separate servers for performance.

Generating keys and certificates

The connection between the game server and the proxies are encrypted through mTLS to ensure that the connection is secure and authenticate the proxies.

[!WARNING] All private keys must be stored securely, and it is strongly recommended to generate the private keys on the server that will use them instead of transferring them over the Internet. Malicious proxies that have access to a private key can circumvent player authentication and can cause the game server to exhibit undefined behavior which can potentially lead to arbitrary code execution on the game server. If any private key has been compromised, redo this section to create new keys.

Create a private certificate authority (CA)

A server should be picked to store the certificate authority keys and will be referred to as the cetificate authority server. Since the game server and all proxies are considered to be trusted, any of these servers may be used for this purpose.

On the certificate authority server, generate a key and certificate by running:

openssl req -new -nodes -newkey rsa:4096 -keyout root_ca.pem -x509 -out root_ca.crt -days 365

OpenSSL will ask for information when running the command. All fields can be left empty.

The -days field specifies when the certificate will expire. It will expire in 365 days in the above command, but this can be modified as needed.

root_ca.crt is the root CA cert and should be copied to the game server and all proxy servers. When running the game server or the proxy, make sure to pass --root-ca-cert root_ca.crt as a command line flag.

Generate server keys and certificates

Follow these instructions for the game server and each proxy server. The server will be referred to as the target server.

On the target server, run:

openssl req -nodes -newkey rsa:4096 -keyout server_private_key.pem -out server.csr

OpenSSL will ask for information when running the command. All fields can be left empty.

Afterwards, transfer server.csr to the certificate authority server. On the certificate authority server, run:

openssl x509 -req -in server.csr -CA root_ca.crt -CAkey root_ca.pem -CAcreateserial -out server.crt -days 365 -sha256 -extfile <(printf "subjectAltName=DNS:example.com,IP:127.0.0.1")

Replace example.com with the target server's domain name and replace 127.0.0.1 with the IP address that will be used by other servers to connect to the target server. If the IP or domain provided is incorrect, connections will fail with the error "invalid peer certificate: certificate not valid for name ...".

The -days field specifies when the certificate will expire. It will expire in 365 days in the above command, but this can be modified as needed.

Then, transfer server.crt to the target server.

server.csr and server.crt on the certificate authority server and server.csr on the target server are no longer needed and may be deleted.

server.crt is the target server's certificate and server_private_key.pem is the target server's private key. When running the game server or the proxy, make sure to pass --cert server.crt --private-key server_private_key.pem as a command line flag.

Without cloning

nix run github:hyperion-mc/hyperion#bedwars
nix run github:hyperion-mc/hyperion#hyperion-proxy

From a clone

The game server and the proxy are two processes that authenticate to each other with mTLS, so generate throwaway development certificates once:

nix run .#certs

Then run the event you want. Each event under events/ is its own run app that supervises the whole stack with process-compose: the proxy starts after the game server, each restarts on failure, and one Ctrl-C stops everything. Connect a Minecraft 1.20.1 client to localhost:25565.

nix run .#bedwars   # or: nix run .#smash

nix run with no target runs .#bedwars. Build optimised instead with HYPERION_PROFILE=release-full nix run .#bedwars.

Two checkouts on one machine both want 25565, 35565 and process-compose's own 8080. HYPERION_PLAYER_PORT and HYPERION_SERVER_PORT move the second one out of the way, and the process-compose port follows the player port:

HYPERION_PLAYER_PORT=25567 HYPERION_SERVER_PORT=35567 nix run .#bedwars

Point bots at it with nix run .#bots -- 127.0.0.1:25565 100.

Development

Every command is a flake app, so nix is the only thing you need installed.

Command Does
nix run .#certs Throwaway dev certificates for the mTLS link
nix run .#bedwars Bedwars game server and proxy under process-compose
nix run .#smash Smash game server and proxy under process-compose
nix run .#proxy Proxy alone, release-full
nix run .#bots -- Connect bots to a running server
nix run .#ci The cargo half of CI: format, lint, test, doc, deny, machete
nix run .#flake-gate The nix half: builds every flake check CI enforces
nix run .#fmt cargo fmt; add -- --check to verify only
nix run .#lint Clippy, warnings denied
nix run .#lint-fix Clippy with --fix
nix run .#test cargo nextest run
nix run .#miri Miri, over tests whose name contains miri
nix run .#deny cargo deny check
nix run .#unused-deps cargo machete
nix run .#doc Workspace documentation
nix run .#e2e Boots the stack and drives a scripted 26.2 client through it
nix run .#smash-e2e The same on smash: four clients, a whole match
nix run .#real-client -- Joins with the actual game and says whether a player reached the world

nix build .#bedwars builds a release binary. nix run .#flake-gate is the whole nix gate: it builds every check the flake exposes, which is every app (proving each passes shellcheck and its tools resolve) plus the sandboxed end-to-end gates and the generated-source comparisons. Which of those CI enforces, and the named exceptions with the evidence behind each, is nix/ci/flake-gate.nix. If you would rather use cargo directly, nix develop gives you a shell with the pinned toolchain and the cargo subcommands the apps use.

Features

Language: Rust
Goal: Game engine for massive events
Structure: Bevy ECS

Platform Details:

  • Version: Minecraft 1.20.1
  • Proxy Support: Velocity
  • Proximity Voice: Simple Voice Chat
  • Max estimated player count: ~176,056

Note: This feature list represents core functionality. Hyperion is designed to be modular meaning you can implement your own mechanics and replace the core mechanics with your own.

Star History

Star History Chart

Thank you for your hard work[^1] @CuzImClicks, @Indra-db, @james-j-obrien, @Ruben2424, @SanderMertens, @Tebarem, and @TestingPlant.

[^1]: alphabetically ordered

Frequently asked questions

Is hyperion free to use?

hyperion is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does hyperion do?

Minecraft game engine for massive custom events

What is hyperion written in?

hyperion is primarily written in Rust. Its source is publicly available at https://github.com/hyperion-mc/hyperion, and it has 1,085 GitHub stars.