Use GraalVM Native Image to turn the Minecraft server into native executables that are small in footprint, fast, and cheap to deploy.
Go to file
2022-09-01 15:46:02 +02:00
.github/workflows Add project files 2022-09-01 15:46:02 +02:00
assets Add project files 2022-09-01 15:46:02 +02:00
configuration Add project files 2022-09-01 15:46:02 +02:00
.gitignore Add project files 2022-09-01 15:46:02 +02:00
build.sh Add project files 2022-09-01 15:46:02 +02:00
LICENSE Initial commit 2022-08-11 17:05:25 +02:00
README.md Add project files 2022-09-01 15:46:02 +02:00

Native Minecraft Servers with GraalVM Native Image

Build Native Minecraft Server

Banner

The Minecraft server is known to require a lot of CPU and memory resources and can be hard to deploy. This project makes it possible to compile the Minecraft server into a self-contained native executable using GraalVM Native Image. As such, it is supposed to require fewer CPU and memory resources, provide better startup times, and be easier and cheaper to deploy.

A native Minecraft server is less than 120MB in size, and with that significantly smaller than Minecraft's server.jar plus a JDK required to run it. With upx compression, the size of the native executable can be reduced even further to less than 40MB, which is smaller than just the server.jar. Initial experiments also suggest competitive run-time performance with a reduced memory footprint. For best results, build with GraalVM Enterprise Native Image, which provides better performance and lower memory usage than the Community Edition, and try out the G1 GC and Profile-Guided Optimizations. The Oracle Cloud Free Tier not only provides four Ampere A1 cores and 24 GB of RAM always free, which is plenty for hosting a Minecraft server, but also free access to GraalVM Enterprise.

Check out this blog post for more information.

Disclaimer: This project is meant for demonstration purposes only and intended to help the Minecraft community evaluate the use of GraalVM Native Image. Please use at your own risk.

Getting Started

  1. Download GraalVM Community or Enterprise (GraalVM 22.2.0 or later is required).
    Optional: make sure upx is on your $PATH to enable compression.
  2. Download or check out this repository and run the build.sh.
  3. Launch the native Minecraft server with ./native-minecraft-server.
    The first time you run the server, you will have to follow the regular procedure of accepting Minecraft's EULA.

How It Works

This project only contains the build.sh script and reachability metadata for building a native Minecraft server. The build.sh script first downloads Minecraft's server.jar and extracts jars and other resources from it. Afterward, it invokes GraalVM Native Image with an appropriate configuration to generate a native version of the Minecraft server. Finally, and only if upx is on the $PATH, the script will compress the native executable.

Limitations and Known Issues

  • The configuration currently only supports Minecraft 1.18.2.
  • The server GUI is not yet supported.
  • Mods are currently not supported.
  • There is no build script for Windows yet, but the WSL should work.
  • The native executable sometimes fails on startup. Restarting it a few times usually helps.
    Error: com.mojang.datafixers.types.templates.List$ListType cannot be cast to java.lang.Comparable.

Contributions

Please report any issues here on GitHub and open pull requests if you'd like to contribute to the project.

License

This project is released under the MIT license.