Native Minecraft Servers with GraalVM Native Image
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
- Download GraalVM Community or Enterprise (GraalVM 22.2.0 or later is required).
Optional: make sure upx is on your$PATH
to enable compression. - Download or check out this repository and run the
build.sh
. - 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.