To build the XYML launcher, you need to install JDK 17 (or higher). You can download it here: Download Liberica JDK.
After installing the JDK, make sure the JAVA_HOME environment variable points to the required JDK directory.
You can check the JDK version that JAVA_HOME points to like this:
Windows
PowerShell:
PS > & "$env:JAVA_HOME/bin/java.exe" -version
openjdk version "25" 2025-09-16 LTS
OpenJDK Runtime Environment (build 25+37-LTS)
OpenJDK 64-Bit Server VM (build 25+37-LTS, mixed mode, sharing)
Linux/FreeBSD
> $JAVA_HOME/bin/java -version
openjdk version "25" 2025-09-16 LTS
OpenJDK Runtime Environment (build 25+37-LTS)
OpenJDK 64-Bit Server VM (build 25+37-LTS, mixed mode, sharing)
macOS
> /usr/libexec/java_home --exec java -version
openjdk version "25" 2025-09-16 LTS
OpenJDK Runtime Environment (build 25+37-LTS)
OpenJDK 64-Bit Server VM (build 25+37-LTS, mixed mode, sharing)
- You can get the latest source code via Git:
git clone https://github.com/MinecraftSTL/XYML.git cd XYML - You can manually download a specific version of the source code from the GitHub Release page.
To build XYML, switch to the root directory of the XYML project and run the following command:
./gradlew clean makeExecutablesThe built XYML program files are located in the XYML/build/libs subdirectory under the project root.
Warning
This document describes XYML's internal features, which we do not guarantee to be stable and may be modified or removed at any time.
Please use these features with caution, as improper use may cause XYML to behave abnormally or even crash.
XYML provides a series of debug options to control the behavior of the launcher.
These options can be specified via environment variables or JVM parameters. If both are present, JVM parameters will override the environment variable settings.
| Environment Variable | JVM Parameter | Function | Default Value | Additional Notes |
|---|---|---|---|---|
XYML_JAVA_HOME |
Specifies the Java used to launch XYML | Only effective for exe/sh | ||
XYML_JAVA_OPTS |
Specifies the default JVM parameters when launching XYML | Only effective for exe/sh | ||
XYML_FORCE_GPU |
Specifies whether to force GPU-accelerated rendering | false |
||
XYML_ANIMATION_FRAME_RATE |
Specifies the animation frame rate of XYML | Matches display refresh rates of 90 Hz or higher; otherwise 60 |
Overridden by -Dxyml.swing.animationFrameDelayMillis |
|
XYML_LANGUAGE |
Specifies the default language of XYML | Uses the system default language | ||
XYML_UI_SCALE |
Specifies the UI scaling for XYML | Uses the system's current scaling | Supports scale factor (1.5), percentage (150%), or DPI (144dpi). | |
XYML_SKIP_OFFLINE_USERNAME_CHECK |
Disables illegal offline username checks | false |
Set to true; logs a warning and may prevent joining servers or crash the game. |
|
-Dxyml.dir=<path> |
Specifies the current data folder of XYML | ./.xyml |
||
-Dxyml.home=<path> |
Specifies the user data folder of XYML | Windows: %APPDATA%\.xymlLinux/BSD: $XDG_DATA_HOME/xymlmacOS: ~Library/Application Support/xyml |
||
-Dxyml.swing.animationFrameDelayMillis=<milliseconds> |
Specifies the Swing animation timer delay in milliseconds | Matches display refresh rates of 90 Hz or higher; otherwise 16 |
Must be a positive integer | |
-Dxyml.self_integrity_check.disable=true |
Disables self-integrity checks during updates | |||
-Dxyml.bmclapi.override=<url> |
Specifies the API Root for BMCLAPI | https://bmclapi2.bangbang93.com |
||
-Dxyml.discoapi.override=<url> |
Specifies the API Root for foojay Disco API | https://api.foojay.io/disco/v3.0 |
||
-Dxyml.update_source.override=<url> |
Specifies the channel update-source template for XYML | https://github.com/MinecraftSTL/XYML/releases/download/release-channels/xyml-update-{channel}.json |
{channel} is replaced before the request |
|
-Dxyml.authlibinjector.location=<path> |
Specifies the location of the authlib-injector JAR file | Uses the built-in authlib-injector | ||
-Dxyml.native.encoding=<encoding> |
Specifies the native encoding | Uses the system's native encoding | ||
-Dxyml.microsoft.auth.id=<App ID> |
Specifies the Microsoft OAuth App ID | Uses the built-in Microsoft OAuth App ID | ||
-Dxyml.curseforge.apikey=<Api Key> |
Specifies the CurseForge API key | Uses the built-in CurseForge API key | ||
-Dxyml.native.backend=<auto/jna/none> |
Specifies the native backend used by XYML | auto |
||
-Dxyml.hardware.fastfetch=<true/false> |
Specifies whether to use fastfetch for hardware detection | true |