launcher_profiles.json is a JSON file located in .minecraft, which contains all the Minecraft launcher settings, profiles, selected user/profile as well as the cached user information (email, access token, etc). This file allows flexible updating from older launcher versions to newer builds and vice versa, without having to worry about things like profiles and login session getting lost.
General file structure
launcher_profiles.json uses JSON structures to save and retrieve data. The main JSON keys are explained in the figure below.
|profiles||Map||All the launcher profiles and their configurations.|
|clientToken||String||The currently logged in client token.|
|authenticationDatabase||Map||All the logged in accounts. Every account in this key contains a UUID-hashed map (which is used to save the selected user) which in turn includes the access token, e-mail, and a profile (which contains the account display name)|
|launcherVersion||Map||Contains the current launcher build name, format and profiles format.|
|settings||Map||Contains all the launcher settings|
|analyticsToken||String||The latest token for tracking analysts. Those are used locally by the launcher for managing and tracking sessions|
|analyticsFailcount||Integer||The fail count for analytics (???)|
|selectedUser||Map||Contains the UUID-hashed account and the UUID of the currently selected user|
Every Map structure will be explained in its own section below.
Profiles are saved in a map in the profiles section. A profile structure is explained in the table below:
|name||String||The profile name. Can include characters, numbers, punctuation, and whitespace|
|type||String||The profile type. Types are custom (manually created by the user), latest-release (uses the latest stable release), and latest-snapshot (uses the latest build of Minecraft).|
|created||String||An ISO 8601 formatted date which represents the time the profile was created.|
|lastUsed||String||An ISO 8601 formatted date which represents the last time the profile was used.|
|icon||String||An Base64-encoded image which represents the icon of the profile in the profiles menu.|
|lastVersionId||String||The version ID that the profile targets. Version IDs are determined in the version.json in every directory in ~/versions|
|gameDir||String||The directory that this profile should use to save its content.|
|javaDir||String||The Java directory that the game will run on. This is by default the system's Java directory.|
|javaArgs||String||The start-up arguments for the profile. Those can have tangible experience in the game performance.|
|logConfig||String||The path to the logging configuration for the profile. This can be a XML file if the below setting is true|
|logConfigIsXML||Boolean||Whether the logging configuration is a XML file or not.|
Authentication database structure
Authentication database is saved in the authenticationDatabase section. Structure is explained below:
The authentication database consists of UUID-hashed keys for all the logged in users. Every logged in user has its own key which is then used in saving things like the currently selected user, etc.
Every authenticated key consists of a couple of values, which are explained in the figure below.
|accessToken||String||The token which saves the log-in sessions.|
|username||String||The e-mail of the account.|
|profiles||Map||The profile of the account. This map will contain the UUID of the account, and contain the display name of it.|
Launcher version structure
The launcher version is saved in its own section in the JSON file (launcherVersion). It has a couple of values which contain information about the currently used build of the launcher. Every time a specific version of a launcher is ran, those values are updated to fit the latest-used launcher. This section allows better compatibility between launcher versions as well as update checking.
Launcher version keys are explained below:
|name||String||The current name of the launcher build|
This is one of the most important sections in the file. It contains all the settings controlled from the launcher, and is saved in the settings section. Every option is explained in the table below.
|enableSnapshots||Boolean||Whether or not include version IDs of game snapshots when browsing profiles|
|enableAdvanced||Boolean||Whether or not enable changing advanced Java settings when adding new launch arguments|
|keepLauncherOpen||Boolean||Whether or not keep the launcher open while the game is running|
|showGameLog||Boolean||Whether or not create a separate window which contains all the game logs|
|locale||String||The selected language for the launcher. Default value is en-us.|
|showMenu||Boolean||Whether or not show the sliding menu under the Minecraft logo (which contains News, Skins, Settings and Launch options).|
|enableHistorical||Boolean||Whether or not enable the usage of historical versions|
|profileSorting||String||The way profiles are sorted in the profiles menu. There are 2 sorting types: byName and byLastPlayed. byName sorts them on the alphabetical order, and byLastPlayed sorts them based on the latest profiles you used.|
|crashAssistance||Boolean||Whether or not contact Mojang when a crash occurs|
|enableAnalytics||Boolean||Whether or not enable analyzing the user session or not. This is usually not maintainable/cannot be controlled from the launcher|
Selected user structure.
The selected user section stores information about the currently selected profile and the selected account. As mentioned above, accounts are stored as UUID-hashed keys. Then they are used for saving here
The keys are explained in the figure below.
|account||String (UUID)||The UUID-hashed key of the currently selected account|
|profile||String (UUID)||The UUID of the currently selected player|