Skip to content

Configuration

Besides the commands and their flags and options, HeadlessMc creates a config.properties file in the HeadlessMC folder. This file can be used to configure HeadlessMc further. All properties that can be put in the config file can also be specified as system properties on the command line:

java -Dhmc.some.property=value -jar headlessmc-launcher.jar

hmc.account.refresh.on.game.launch

Type: boolean Default: true

Enable/disable if the launcher should refresh your account when launching the game.

hmc.account.refresh.on.launch

Type: boolean Default: false

Enable/disable if the launcher should refresh your account when it is started.

hmc.additional.classpath

Type: String Default: ""

Additional files to add to the classpath of Minecraft when it is launched.

hmc.always.download.assets.index

⚠ Type: boolean Default: false

Always download the asset index for a Minecraft version. Needed for CheerpJ as it corrupts in the browser and needs a redownload.

hmc.always.in.memory

Type: boolean Default: false

Always launches the game in-memory with -inmemory.

hmc.always.jndi.flag

Type: boolean Default: true

Always adds the -jndi flag when launching the game.

hmc.always.lookup.flag

Type: boolean Default: true

Always adds the -lookup flag when launching the game.

hmc.always.lwjgl.flag

Type: boolean Default: false

Always adds the -lwjgl flag when launching the game.

hmc.always.pauls.flag

Type: boolean Default: false

Always adds the -paulscode flag when launching the game.

hmc.always.quit.flag

Type: boolean Default: false

Always adds the -quit flag when launching the game.

hmc.arm.fix.libraries

Type: boolean Default: true

Minecraft does not provide the correct binary files for Linux on ARM64. This downloads the correct lwjgl binaries from maven central.

hmc.assets.backoff

Type: boolean Default: true

Increases wait time on assets that have failed to download if true.

hmc.assets.check.file.hash

Type: boolean Default: false

Checks the integrity of all assets before launching. Might clash with hmc.assets.dummy.

hmc.assets.check.hash

Type: boolean Default: true

Checks the integrity of assets when downloading them.

hmc.assets.check.size

Type: boolean Default: true

Checks the size of assets when downloading them.

hmc.assets.delay

Type: int Default: 0

Initial delay to wait for when an asset download failed in milliseconds.

hmc.assets.dummy

Type: boolean Default: false

Uses dummy assets (very small images and sound files), to reduce the memory footprint of Minecraft. Do not use when not running headlessly.

hmc.assets.parallel

Type: boolean Default: true

Downloads assets on multiple threads, speeding up the download process.

hmc.assets.retries

Type: int Default: 3 Min: 1

How many times we want to retry to download an asset that failed to download before failing.

hmc.assumed.java.version

Type: int Default: 8

If we cannot determine the current Java version HeadlessMc is running on, this one will be taken.

hmc.auto.download.java

Type: boolean Default: true

Automatically downloads missing Java versions.

hmc.auto.download.java.rethrow.exception

Type: boolean Default: true

Fails hard on failed Java downloads.

hmc.auto.download.specifics

Type: boolean Default: false

Automatically downloads the hmc-specifics when launching.

hmc.auto.download.versions

⚠ Type: boolean Default: true

Automatically downloads versions when specified in the <modloader>:<version> format.

hmc.auto.java.distribution

Type: String Default: "temurin"

Java distribution to use when automatically downloading Java.

hmc.check.xvfb

Type: boolean Default: false

Checks if xvfb is running for offline -lwjgl checks.

hmc.clientId

Type: String Default: ""

Client id to fill in for the Minecraft client. Is used for telemetry to Mojang.

hmc.crash.report.watcher

Type: boolean Default: false

Watches the game directory for crash-reports that are created, and kills the process if it finds one. This is for testing purposes. Sometimes the game crashes, but a modloader keeps a window open with the crash message, waiting for user input.

hmc.crash.report.watcher.exit

Type: boolean Default: true

Exits with status code -1 if the process has already ended after finding a crash report.

hmc.deencapsulate

Type: boolean Default: true

Enables the deencapsulator for Java 9+ versions. This is needed for some reflection hacks.

hmc.dont.ask.for.quit

⚠ Type: boolean Default: false

The runtime will ask for confirmation when using the quit command. With this set to true not anymore.

hmc.email

Type: String Default: null

Specify hmc.email and hmc.password, to log into an account automatically when the launcher starts.

hmc.enable.reflection

⚠ Type: String Default: false

Enables hacky reflection commands in the runtime and in the hmc-specifics.

hmc.exit.on.failed.command

Type: boolean Default: false

For testing purposes. Exits with status code -1 if a command fails.

hmc.extracted.file.cache.uuid

Type: UUID Default: UUID.randomUUID()

For each game launch a directory for the extracted files is created. This command allows you to specify the name of that directory.

hmc.fabric.url

Type: URL Default: "https://maven.fabricmc.net/net/fabricmc/fabric-installer/1.0.3/fabric-installer-1.0.3.jar"

The URL to download the fabric installer from.

hmc.filehandler.enabled

Type: boolean Default: true

If HeadlessMc should log to a file in the HeadlessMc folder. For the runtime/hmc-specifics this is false.

hmc.game.dir.for.each.version

Type: boolean Default: false

Creates a seperate game directory for each version.

hmc.gameargs

Type: String[] Default: []

Similar to the --game-args option in the launch command. delimitted list of arguments to launch the game with.

hmc.gamedir

Type: String Default: ".minecraft"

The directory to run the game in. By default, this is the same as the .minecraft directory.

hmc.graal.java.version

Type: int Default: 21

The version to launch HeadlessMc with when running from a Graal Native image.

hmc.graal.distribution

Type: String Default: "temurin"

The Java distribution to use for launching HeadlessMc from a Graal Native image.

hmc.graal.force.download

Type: boolean Default: false

Always downloads a Java version when launching HeadlessMc from a Graal Native image.

hmc.graal.jdk

Type: boolean Default: false

Whether to use a JDK for launching HeadlessMc or, by default, a JRE.

hmc.http.user.agent

Type: String Default: "Mozilla/5.0"

The user agent to use for downloads.

hmc.http.user.agent.enabled

Type: boolean Default: true

If the user agent should be added to requests. Needed for web, as browser do not allow requests where the user agent has been set.

hmc.in.memory

Type: boolean Default: false

Set by the launcher when launching Minecraft in-memory. Can be checked by a running instance.

hmc.in.memory.require.correct.java

Type: boolean Default: true

Requires the correct Java version for in-memory, or fails hard.

hmc.install.mc.logging

Type: boolean Default: false

Installs the logging.xml files defined by Minecraft. However, these inhibit logging.

hmc.invert.jndi.flag

⚠ Type: boolean Default: false

Inverts the meaning of the -jndi flag.

hmc.invert.lookup.flag

⚠ Type: boolean Default: false

Inverts the meaning of the -lookup flag.

hmc.invert.lwjgl.flag

⚠ Type: boolean Default: false

Inverts the meaning of the -lwjgl flag.

hmc.invert.pauls.flag

⚠ Type: boolean Default: false

Inverts the meaning of the -paulscode flag.

hmc.invert.quit.flag

⚠ Type: boolean Default: false

Inverts the meaning of the -quit flag.

hmc.java.always.add.file.permissions

Type: boolean Default: false

jspawnhelper needs execution permissions on Linux, so that we can launch newly installed java versions.

hmc.java.require.exact

Type: boolean Default: false

Requires the exact requires version of Java to launch a Java process. If off, e.g. Java 21 can be launched even though Java 17 was requested.

hmc.java.use.current

Type: boolean Default: true

Makes HeadlessMc also consider the version of Java it is running with.

hmc.java.versions

Type: String[] Default: []

; delimited list of paths to bin/java of Java versions HeadlessMc can use. Not really needed anymore as HeadlessMc can download Java on its own now.

hmc.jline.bracketed.paste

Type: boolean Default: true

Disables JLine bracketed paste.

hmc.jline.dumb

Type: boolean Default: false

Starts JLine with a dumb terminal.

hmc.jline.dumb.when.no.console

Type: boolean Default: true

Makes JLine terminal dumb if System.console() == null.

hmc.jline.enable.progressbar

Type: boolean Default: true

Enables progress bar support for JLine.

hmc.jline.enabled

Type: boolean Default: true

Enables JLine.

hmc.jline.exec

Type: boolean Default: false

Enables JLine exec support.

hmc.jline.ffm

Type: boolean Default: false

Enables JLine ffm support.

hmc.jline.force.not.dumb

Type: boolean Default: false

Force JLine not to use a dumb terminal.

hmc.jline.in

Type: boolean Default: false

Makes JLine use System.in.

hmc.jline.jansi

Type: boolean Default: false

Enables JLine jansi support.

hmc.jline.jna

Type: boolean Default: true

Enables JLine JNA support. JNA is packaged with HeadlessMc and Minecraft and is well supported.

hmc.jline.jni

Type: boolean Default: true

Enables JLine JNI support.

hmc.jline.no.deprecation.warning

Type: boolean Default: true

Prevents JLine deprecation warnings.

hmc.jline.out

Type: boolean Default: false

Makes JLine use System.out.

hmc.jline.progressbar.style

Type: String Default: COLORFUL_UNICODE_BLOCK

Which progressbar style to use.

hmc.jline.propagate.enabled

Type: boolean Default: true

Propagates hmc.jline.enabled to Minecraft, good for hmc-specifics.

hmc.jline.providers

Type: String Default: jni

JLine providers.

hmc.jline.read.prefix

Type: String Default: ""

Read the command line with a prefix, like >.

hmc.jline.system

Type: boolean Default: null

Whether to use JLine system providers.

hmc.jline.type

Type: String Default: null

Type of JLine to use.

hmc.joml.no.unsafe

Type: boolean Default: true

Adds -Djoml.nounsafe=true when launching with -lwjgl. Needed to not crash.

hmc.jvmargs

Type: String Default: ""

delimited list of JVM args to use when launching Minecraft.

hmc.keepfiles

Type: boolean Default: false

Keeps extracted native files after launching Minecraft.

hmc.launchername

Type: String Default: "HeadlessMc"

Minecraft takes the name of the Launcher as an argument, e.g. for telemetry?

hmc.launcherversion

Type: String Default: "$VERSION"

Minecraft takes the version of the Launcher as an argument, e.g. for telemetry?

hmc.libraries.check.file.hash

Type: boolean Default: false

Check the file hashes of all libraries before launching the game.

hmc.libraries.check.hash

Type: boolean Default: true

Check the file hashes when downloading libraries.

hmc.libraries.check.size

Type: boolean Default: true

Check the file size when downloading libraries.

hmc.loglevel

Type: String Default: "WARNING"

The loglevel at which HeadlessMc logs.

hmc.lwjgl.update_sleep

Type: int Default: 1

Delay in milliseconds to sleep in Minecrafts main loop on Display update.

hmc.lwjgl.gltextureinternalformat

Type: int Default: 32856

Internal texture format for lwjgl instrumentation.

hmc.lwjgl.texturesize

Type: int Default: 1024

Default texture size to return in lwjgl instrumentation.

hmc.lwjgl.fullscreen

Type: boolean Default: true

Fullscreen mode in lwjgl instrumentation.

hmc.lwjgl.screenwidth

Type: int Default: 1920

Screen width in lwjgl instrumentation.

hmc.lwjgl.screenheight

Type: int Default: 1080

Screen width in lwjgl instrumentation.

hmc.lwjgl.refreshrate

Type: int Default: 100

Refresh rate in lwjgl instrumentation.

hmc.lwjgl.bitsperpixel

Type: int Default: 32

Bits per pixel in lwjgl instrumentation.

hmc.lwjgl.nativejniversion

Type: int Default: 24

JNI version in lwjgl instrumentation.

hmc.lwjgl.no.awt

Type: boolean Default: false

If java.awt is not available, e.g. on Android, this is required.

hmc.main.class

Type: String Default: "net.minecraft.client.main.Main"

Allows you to specify another main class to use in the Minecraft jar to launch.

hmc.main_method

Type: String Default: "net.minecraft.client.main.Main"

The actual main class used. This is e.g. needed when wrapping the game with the hmc-runtime.

hmc.mcdir

Type: String Default: ".minecraft"

The .minecraft directory. This is where assets and libraries are stored.

hmc.no.auto.config

Type: boolean Default: false

Does not run the AutoConfiguration step to discover available Java versions when true.

hmc.offline

Type: boolean Default: false

Enables offline mode.

hmc.offline.token

Type: String Default: ""

Token to use for the offline account.

hmc.offline.type

Type: String Default: "msa"

Type to use for the offline account.

hmc.offline.username

Type: String Default: "Offline"

Username to use for the offline account.

hmc.offline.uuid

Type: UUID Default: "22689332a7fd41919600b0fe1135ee34"

UUID to use for the offline account.

hmc.osarch

Type: boolean Default: null

HeadlessMc will detect your operating system properties. With these properties you can override what HeadlessMc detects. true if your operating system is 64-bit. false if 32.

hmc.osarchitecture

Type: String Default: null

HeadlessMc will detect your operating system properties. With these properties you can override what HeadlessMc detects. Allows you to override your OS architecture.

hmc.osname

Type: String Default: null

HeadlessMc will detect your operating system properties. With these properties you can override what HeadlessMc detects. Allows you to override your OS name.

hmc.ostype

Type: String Default: null

HeadlessMc will detect your operating system properties. With these properties you can override what HeadlessMc detects. Allows you to override your OS type (LINUX, WINDOWS, MACOS).

hmc.osversion

Type: String Default: null

HeadlessMc will detect your operating system properties. With these properties you can override what HeadlessMc detects. Allows you to override your OS version.

hmc.password

Type: String Default: null

Specify hmc.email and hmc.password, to log into an account automatically when the launcher starts.

hmc.profileproperties

Type: Map Default: "{}"

${profile_properties} game argument for minecraft.

hmc.rethrow.launch.exceptions

Type: boolean Default: false

Throws all exceptions from launching further. For testing.

hmc.server.accept.eula

Type: boolean Default: false

Automatically accepts Server EULAs.

hmc.server.args

Type: String Default: "nogui"

delimited list of arguments to start the Minecraft server with. Equivalent to --game-args in the server launch command.

hmc.server.launch.for.eula

Type: boolean Default: true

Automatically launches the Server to get the EULA file if it is not present.

hmc.server.test

Type: boolean Default: false

Runs the HeadlessMc server test when launching the server.

hmc.server.test.build

Type: String Default: ""

hmc.server.test.dir allows you to create a test server. However, HeadlessMc cannot not know which server type is in this directory. With these properties you can specify the information about the server type.

hmc.server.test.cache

Type: boolean Default: false

Enables the server cache command for caching downloaded servers.

hmc.server.test.cache.use.mc.dir

Type: boolean Default: false

Caches servers in .minecraft.

hmc.server.test.dir

Type: boolean Default: false

The directory to run the test server in.

hmc.server.test.dir

Type: boolean Default: false

The directory to run the test server in. Usually which directories servers are stored in is handled internally by HeadlessMc. This way you can specify the directory to store a server in.

hmc.server.test.name

Type: String Default: ""

hmc.server.test.dir allows you to create a test server. However, HeadlessMc cannot not know which server type is in this directory. With these properties you can specify the information about the server type.

hmc.server.test.type

Type: String Default: ""

hmc.server.test.dir allows you to create a test server. However, HeadlessMc cannot not know which server type is in this directory. With these properties you can specify the information about the server type.

hmc.server.test.version

Type: String Default: ""

hmc.server.test.dir allows you to create a test server. However, HeadlessMc cannot not know which server type is in this directory. With these properties you can specify the information about the server type.

hmc.set.library.dir

Type: boolean Default: true

Sets the system property libraryDirectory to .minecraft/libraries. This is needed for a fabric (or forge? TODO)

hmc.store.accounts

Type: boolean Default: true

Stores accounts in HeadlessMc/auth/.accounts.json.

hmc.test.filename

Type: String Default: null

Path to a file containing a command test. If specified the command test will run against server/client.

hmc.test.leave.after

Type: boolean Default: true

Quits HeadlessMc after running a command test.

hmc.test.no.timeout

Type: boolean Default: false

Disables the test timeout if true.

hmc.tweaker.main.class

Type: String Default: "net.minecraft.client.main.Main"

When using the headlessmc-lwjgl jar as a LaunchWrapper Tweaker.

hmc.userproperties

Type: Map Default: "{}"

${user_properties} game argument for minecraft.

hmc.vm_size

Type: int Default: 128

Size of the headlessmc-runtime VM memory.

hmc.wrapper.close.classloader

Type: boolean Default: true

Closes the Wrapper classloader after use. For debugging purposes.

hmc.wrapper.debug.classes

Type: boolean Default: false

Outputs classes loaded by the HeadlessMcWrapper.

hmc.wrapper.garbage.collect.hmc

Type: boolean Default: false

Enables a hack that quits and garbage collects the launcher once the game has started, but still listens to the running process.

hmc.wrapper.wrapped.main

Type: String Default: "io.github.headlesshq.headlessmc.launcher.Main"

The Main method to call from the wrapper.

hmc.xuid

Type: String Default: ""

${auth_xuid} game argument for minecraft. Probably used by Mojang for telemetry.