relauncher-1.1.0
26 Apr 2026
CurseForge · Hytale mod
JVM relaunch library for Java based applications.
Quick answer
relauncher-1.1.0 targets Hytale. Do not install it as a separate client mod. Enable it on the world host—the local server in singleplayer or the dedicated server in multiplayer. No required dependencies listed for this file.
Where it goes
Do not install it as a separate client mod. Enable it on the world host—the local server in singleplayer or the dedicated server in multiplayer.
Put Hytale mods on the world host or dedicated server. Singleplayer runs a local server too; Hytale does not use separate client mods.
relauncher-1.1.0. Change the file and its required mods may change too.
This file does not list any required mods. Do not add a library just because a different file uses it.
This file does not list any required or optional project dependencies. Check the creator notes before changing an existing world.
Before you install it
Built for relauncher-1.1.0. Pick another file and the loader, install side or required mods may change.
Use relauncher-1.1.0. It targets Hytale; another release may target a different game build or dependency set.
This file does not list any required mods. Do not add a library just because a different file uses it.
Do not install it as a separate client mod. Enable it on the world host—the local server in singleplayer or the dedicated server in multiplayer.
Use the “Get this file” button beside relauncher-1.1.0. It opens that exact file at the source.
About this project
JVM relaunch library for Java based applications. Drop a single JAR into your mods folder, and it should work from Minecraft 1.6.4 to the latest version, or on Hytale Server as an early plugin or regular plugin.
Relauncher restarts the JVM process with additional arguments transparently and before the game loads. This is useful for:
-XX:+AlwaysPreTouch, system properties, etc., without needing to touch launcher settingsThe relaunch happens very early during startup, before any significant game state is initialized. External launchers see a single continuous process with no extra windows, no orphaned processes.
| Loader | Minecraft Versions | Entry Point |
|---|---|---|
| Hytale Server (early) | - | ClassTransformer SPI |
| Hytale Server (plugin) | - | JavaPlugin via manifest.json |
Java versions: 8 through 25
Platforms: Linux, Windows, and macOS, on both x86_64 and aarch64.
relauncher-universal-<version>.jar)mods/ folderconfig/relauncher/config.cfgenabled = trueThe config file is at <game directory>/config/relauncher/config.cfg:
# Relauncher Configuration
# Extra JVM arguments to add when relaunching, one per line.
# Lines starting with # are comments, blank lines are ignored.
# Set to false to disable relaunching without removing your arguments.
enabled = true
# Add extra JVM arguments below, one per line:
-XX:+UseG1GC
-XX:+AlwaysPreTouch
-Dsome.java.property=true
The config enabled flag only controls the config file's own arguments. If another mod provides a CommandLineProvider SPI implementation, the relaunch will happen regardless of this flag.
The project produces two editions of each JAR:
-curseforge classifier) - identical to the full edition but without bundled native libraries. Only the pure-Java fallback strategy is available out of the box. CurseForge does not permit bundled native binaries, so this edition exists to comply with their distribution policy.Features not available in the CurseForge edition (without manually providing natives):
| Feature | Full | CurseForge |
|---|---|---|
| POSIX exec (in-place restart, same PID) | Yes | No |
| Windows DLL (clean restart after JVM exit) | Yes | No |
Windows GetCommandLineW() (accurate command-line extraction) |
Yes | No |
| Pure Java fallback (ProcessBuilder + waitFor) | Yes | Yes |
Windows users: Without the native library, the CurseForge edition cannot use GetCommandLineW() to read the original command line. It falls back to reconstructing it from system properties, which can be inaccurate when launchers or tools mutate java.class.path or other JVM state. This may cause the relaunch to fail or produce incorrect behavior on Windows. Linux and macOS are unaffected as they can read /proc/self/cmdline.
The CurseForge edition still contains all JNI declarations, so if you manually place the native libraries in the java's native library folder, the native strategies and accurate command-line extraction will activate automatically.
Relauncher tries three strategies to restart the JVM, in order of preference:
POSIX exec (Linux / macOS) - calls execvp() through a native Rust library to replace the current process in-place. Same PID, zero overhead, cleanest possible restart.
Windows DLL - hooks DllMain(DLL_PROCESS_DETACH) to spawn a child process after the JVM has fully shut down. stdin/stdout/stderr are duplicated beforehand so they survive the teardown. The parent waits for the child and forwards its exit code.
Fallback (pure Java) - starts a child process with inherited I/O, waits for it to finish, then halts. Works everywhere, but the original process sticks around for the duration of the game session.
relauncher-core is published on Maven Central. Add it as a compile-only dependency - the universal JAR will be present at runtime:
repositories {
mavenCentral()
}
dependencies {
compileOnly 'com.juanmuscaria:relauncher-core:<version>'
}
If your mod needs to restart the JVM (e.g., after installing a javaagent), call Relauncher.relaunch() directly:
import com.juanmuscaria.relauncher.Relauncher;
import com.juanmuscaria.relauncher.RelaunchResult;
List<String> extraArgs = Arrays.asList("-Dfoo=bar", "-XX:+AlwaysPreTouch");
RelaunchResult result = Relauncher.relaunch(extraArgs);
// If we get here, the relaunch didn't happen
if (result.isFailed()) {
logger.error("Relaunch failed: " + result.reason());
} else if (result.isSkipped()) {
logger.warn("Relaunch skipped: " + result.reason());
}
You can also inject JVM arguments without calling the API directly, just implement CommandLineProvider and register it via ServiceLoader. Relauncher scans the mods folder for service files on its own, so your mod doesn't even need to be on the classpath yet.
import com.juanmuscaria.relauncher.CommandLineProvider;
public class MyProvider implements CommandLineProvider {
@Override
public List<String> extraJvmArguments() {
return Collections.singletonList("-Dmy.mod.installed=true");
}
@Override
public int priority() {
return 0; // lower = runs first
}
}
Register it in META-INF/services/com.juanmuscaria.relauncher.CommandLineProvider:
com.example.mymod.MyProvider
Relauncher.isRelaunched() // true if we're inside a relaunched JVM
Relauncher.getDepth() // 0 = original, 1 = first relaunch, etc.
Add -Drelauncher.debug=true to your launcher's JVM arguments. This logs the full command-line extraction, argument assembly, and strategy selection process. Useful for figuring out why a relaunch isn't working the way you expect.
./gradlew build # Full build
./build-natives.sh # Cross-compile native libraries
You'll need Java 17+ (used as a toolchain; the output still targets Java 8) and Gradle 9. For cross-compiling the native Rust libraries you'll also need cross, cargo-xwin, and cargo-zigbuild, and Zig toolchain.
Project description from CurseForge.
Recent files
26 Apr 2026
13 Apr 2026
Looking for an older file? The official CurseForge project page is in Resources.