Settings and configuration.
Every non-secret setting lives in ~/.ct-client/settings.properties. Missing keys fall back to defaults, invalid numbers fall back per key, and access tokens are never written to disk — a Microsoft sign-in lasts for the current launcher session.
settings.properties.
A standard Java properties file created automatically when the launcher starts, holding every non-secret setting. Credentials and access tokens are never part of it.
| Key | Default | Meaning |
|---|---|---|
microsoft.loginMode | builtIn | Microsoft sign-in method. builtIn uses the built-in sign-in; custom uses the Azure client ID. |
microsoft.clientId | empty | Azure public client ID for the custom sign-in method. |
memory.minimumMb | 2048 | Minimum heap. |
memory.maximumMb | 4096 | Maximum heap. |
resolution.custom | false | Enables the custom window size. |
resolution.width | 854 | Window width. |
resolution.height | 480 | Window height. |
offline.playerName | empty | Last used offline name. |
java.executable | empty | Java executable override. Empty means the installed official runtime. |
jvm.recommendedFlags | true | Applies Mojang's default-user-jvm entries. |
game.directory | ~/.ct-client/game | Game directory. |
- Missing keys fall back to defaults. A key that is absent from the file behaves exactly as if it held its default value.
- Invalid numbers fall back per key. A non-numeric or out-of-range number invalidates only the key it belongs to — the rest of the file still applies, and the memory or resolution values fall back to
LaunchOptions.defaults(). - Reading and writing. The settings module's
SettingsStorecreates the application directory and the file when missing and throwsIOExceptionwhen the file cannot be read. Modules reach it through theSettingsAccessservice — see the API reference for the full member table.
The file lives alongside the game directory, which defaults to ~/.ct-client/game — the same layout described in architecture and used by the command line.
Microsoft sign-in.
Online play requires a Microsoft account that owns Minecraft Java Edition. Two sign-in methods are available, and the built-in one is the default.
- Microsoft account (built-in). The default. No Azure application and no setup — pressing Sign in with Microsoft requests a device code from the Live Connect endpoint at
login.live.com, then the user signs in with the Microsoft email and password atmicrosoft.com/link.MicrosoftAuthenticator.signInDirect(status)runs this method. - Custom Azure client ID. The classic method, for users who registered their own Azure application.
MicrosoftAuthenticator.signIn(clientId, status)runs it over the Microsoft consumers tenant, and the client ID is persisted asmicrosoft.clientId. - Public client, device code flow. A custom Azure application must be of type public client with the device code flow enabled, reporting the user code and verification address as it polls, and must be allowed to use the
XboxLive.signinandoffline_accessscopes. - Method selection. Choose the method in the launcher's Settings panel; it is persisted as
microsoft.loginModewith the valuesbuiltInandcustom. The client ID field is enabled only while the custom method is selected. - Environment override. The
CT_MICROSOFT_CLIENT_IDenvironment variable overrides the stored client ID when it is set and not blank. - Desktop only. Microsoft sign-in is only available in the desktop launcher — command line mode always uses an offline profile.
If the custom method is selected without a client ID, the launcher reports Enter an Azure application client ID, or switch to the built-in Microsoft sign-in. The full sign-in exchange, the XSTS error mapping, and the d= prefix rule are described in accounts; token handling in security.
LaunchOptions.
The LaunchOptions record carries every memory, resolution, and flag setting. Invalid arguments throw IllegalArgumentException from the record constructor.
LaunchOptions options = new LaunchOptions(2048, 4096, false, 854, 480, false, true, "release");
| Field | Meaning |
|---|---|
minimumMemoryMb, maximumMemoryMb | Heap bounds, between MINIMUM_MEMORY_MB (1024) and MAXIMUM_MEMORY_MB (65536). The maximum must be at least the minimum. |
customResolution, width, height | When enabled, the resolution must be at least 320 by 240, and the has_custom_resolution feature is reported to the game. |
demoMode | Reports is_demo_user to the game. |
recommendedJvmFlags | Applies Mojang's default-user-jvm entries before the version arguments. |
versionType | Value of version_type. "release" for a normal install. |
- Bounds.
MINIMUM_MEMORY_MBis 1024 andMAXIMUM_MEMORY_MBis 65536. A maximum below the minimum is rejected withIllegalArgumentException. - Resolution floor. A custom resolution below 320 by 240 is rejected with
IllegalArgumentException. - Defaults.
LaunchOptions.defaults()returns 2048/4096 MB, no custom resolution, 854 by 480, recommended flags on, and"release". - Fallback.
LaunchOptionsReaderfalls back toLaunchOptions.defaults()when the stored values are invalid.
The feature flags these options produce are matched by RuleEvaluator at launch — see launch command construction.
Java executable override.
The java.executable key points the game at a Java runtime of your choosing instead of the official one CT installs.
- Empty means official runtime. When
java.executableis empty (the default), the installed official Java runtime is used — the one underruntimes/<component>/<version>described in runtime. - Override mechanism. The
java.executablekey stores the path; empty means the installed official runtime is used.Installation.withRuntimeExecutable(Path)returns a copy of the installation that uses a different Java executable, which is how the override is applied at launch. - Runtime is still installed. The official runtime is downloaded and verified regardless; the override only changes which executable starts the game.
Set it in settings.properties or through the launcher's directories card. Because of the persistence behavior below, edits made in the window may not affect the next launch — see window behavior.
What the window persists.
The desktop launcher persists some settings through its window and re-reads others from the file. Knowing the split avoids lost edits.
- Persisted by the window. The window persists the Microsoft sign-in method (
microsoft.loginMode), the Microsoft client ID (microsoft.clientId), and the offline player name (offline.playerName). - Read from the file. The memory, resolution, game directory, and Java executable fields are read from
settings.propertieswhen the window opens, and the launch reads the settings file again.
settings.properties, or use the command line flags — this is the workaround for the current limitation.Command line mode additionally has no Microsoft sign-in and no offline name persistence. The complete current-limitations list is in features, and the window's v4.3.0 layout in interface.