Minecraft Launcher

The Minecraft Launcher is the login and downloader front-end to the stand-alone Minecraft: Java Edition client. It is available for Windows, macOS and Linux. The Minecraft Launcher is written in TypeScript, ReactJS, and C++ programming languages.

The launcher is responsible for downloading the main Java packages, including client.jar, which holds the code and resources of the game such as textures and Lightweight Java Game Library (LWJGL). It also acts somewhat like a basic copy-restriction by forcing the user to login to an account when running for the first time.

It is possible for the launcher to run all release versions of Minecraft: Java Edition, as well as most Beta versions, and a small fraction of Classic, Indev, Infdev and Alpha versions. Not every version of the game is included (see Missing launcher versions).

The current launcher is the seventh launcher for Minecraft: Java Edition, and the third that was built to automatically update itself.

On February 24, 2020, in launcher version 2.1.1230x, a new section for the game Minecraft Dungeons was added where one could sign up for its beta. This is the first time the Minecraft launcher includes a game other than Minecraft: Java Edition.

Launch
Every time the launcher is executed, it checks a specific directory where Minecraft stores its files called " .minecraft ". It checks a file called " launcher_profiles.json " for login credentials. If the file does not exist, is corrupt, or no user is logged in, the user must login with a valid account, otherwise, the user is directed to register an account and purchase the game or play the demo mode.

When logging in, the launcher first tries to verify the login. If a valid launcher_profiles.json file exists but when there is no Internet connection, the launcher offers a "play offline" mode if a player was logged in when it was last closed. If the connection is successful, the launcher then, depending on profile options, compares the latest version in the latest "versions" directory to the latest version reported by the server. If the selected version does not exist or the latest installed version is outdated when "Use latest version" is selected in the profile, the launcher downloads all Minecraft components and Java binary files. It also synchronizes everything in the assets folder (see Resource pack).

Finally, upon a successful update or installation, the launcher executes the Minecraft jar (via javaw.exe, Oracle's Java virtual machine executable.) It is possible however for there to be missing .jar files, in which case the launcher attempts to replace the missing files automatically but stops if there is no connection.

Launcher

 * Manage multiple profiles (stored in launcher_profiles.json ). Each profile can control:
 * Game version. Includes access to outdated development builds and previous releases. Older/custom versions can also be added manually.
 * Mojang account used to play the game
 * Command line arguments for Java (such as heap size)
 * Game directory (where the game files are saved on disk)
 * Edit profile pictures or custom made ones
 * The launcher doesn't store the password locally. Instead of this, it uses a 'refresh token'
 * The launcher supports multiple instances (as the game also does)
 * Automatic updates for launcher
 * Ability to update libraries, such as Lightweight Java Game Library (LWJGL)
 * Offline mode. (The first time launch requires an Internet connection to download required resources)
 * 39 languages available (December 2019)
 * Crashes can be reported to Mojang, through Hopper
 * Crashes are indexed through a database for information on how to fix the issue
 * Launcher Settings
 * Switching accounts or logging off
 * Changing skins
 * Downloads servers on versions
 * Help button
 * Shows the player the launcher version information when the player clicks the launcher version

Backward compatibility
The Minecraft launcher has the ability to play old versions of the game. All release versions are available to play, along with most snapshots, alpha, and beta versions. Additionally, four Pre-classic versions, four Classic versions, and one Infdev version are available under "old_alpha". No Indev versions are available in the launcher. Pre-1.0.0 versions are hidden unless "Historical Versions" are enabled.

To play old versions of the game, go to the Installations tab, enable Historical Versions if necessary, create a new profile, and set it to the specified version. Because these versions are outdated and unsupported, they may contain bugs and errors which are not present in newer versions, and these will never be fixed. It is recommended to run old versions of the game in a separate directory to avoid save corruption or other problems. To do this, enter the desired folder path into the "game directory" field in the profile settings. Mojang also recommends backing up worlds in case any corruption occurs.

While the launcher is able to run these versions in a playable state, they don't work perfectly. Changes to the game's code and Mojang's servers have resulted in some features of these versions no longer working as they did originally. Most of this functionality can be restored with the use of third-party tools, however. Some things which are broken include:
 * Sounds are wrong; bows, doors, and explosions use their sounds from RC1, even in versions released prior to it.
 * Skins are missing in versions prior to 1.7, as earlier versions used a different skin server which has since been shut down. Capes may still work, however.
 * In Alpha 1.0.15 and from Alpha 1.2.0 to Alpha 1.2.6, the launcher does not set the player's name properly, resulting in everyone using default names: "Player" followed by a random 3-digit number. This makes multiplayer very difficult to play, as a player's location and inventory will be reset every time they relaunch their client.
 * In Alpha 1.2.5 and Alpha 1.2.6 specifically, players will always be named "Player524". This makes multiplayer in these versions completely impossible, as joining a server will kick other players with the same name.


 * As a side effect of the above, and as a result of old Mojang servers being shut down, online mode no longer works in versions before Beta 1.8.

Skins


The player can change or add their custom skin within the Minecraft launcher. To change or add their skin, the player must click the "Skins" button, then click the "Browse" button to navigate through their file system for their skin file. The file must have a resolution of 64×64 in order for the launcher to accept it as a skin file. Additionally, the skin file must be in a .png format. After the player has found the skin file, they must click the "Save" button to confirm their in-game skin.


 * The player can reset their skin to the Steve or Alex defaults by clicking "Click to reset".
 * The player can choose between player models – either Classic (Steve) or Slim (Alex).

Installations
When the player opens the launcher for the first time, it creates a profile that selects the latest version of Minecraft: Java Edition. If snapshots are enabled, another profile will also be created that selects the latest snapshot. These profiles cannot have their versions manually changed, and cannot be removed.

However, the player may create a game profile of their own in the launcher. In order to do so, they must click on the "Installations" button, then click "New..." to create one. After this, the player can name their profile as they want it. If the player leaves it, it is named " ". Then, optionally, the player can select a profile picture from the launcher or a custom one. However, it must be a 128×128 .png picture. After, the player can select the version they wish to play, and click "Create" to confirm their profile. If the player wants to edit a profile, they can just click it. The same applies if the player wishes to delete a profile. Simply click the three dots button and press Delete. A popup appears; press Delete.
 * 2019LauncherProfileSettings.png The player can download server versions by clicking "Server".
 * If the player wants to resize the game, they can turn "Resolution" on to change the game window size.
 * The player can turn "More options" on to show more profile options.
 * If the player wants to change the location of the Minecraft directory, they can turn on the "Game directory" option. Navigate to the folder where the player wishes the game files to be placed. The player can also open the chosen directory by clicking the green arrow-shaped "Go to folder" button.
 * The player can manually set a logging configuration (see the Debugging article on wiki.vg for more info)
 * The player can also duplicate a profile by clicking the stacked 3 dots button while hovering a profile.

Command line usage
As of 2.1.1432, the launcher has 9 command-line options available:
 * – This option deletes the " game " and " runtime " folders, including their contents, from the working directory.
 * – This option, followed by a path (relative or absolute), changes the location (and/or name) of the .minecraft folder.
 * Can be used to create a portable installation of the game. For example,  (or  ) can be used to make the launcher use the current directory (no matter what the current folder is called).
 * – This option, followed by a path (relative or absolute), changes the location (and/or name) of the tmp folder.
 * – This option adds support for Windows 10. Since the launcher now supports Windows 10 fully, this option is unnecessary and seems to have no effect.
 * – This option, followed by a path (relative or absolute), changes the location (and/or name) of the tmp folder.
 * – This option adds support for Windows 10. Since the launcher now supports Windows 10 fully, this option is unnecessary and seems to have no effect.
 * – This option adds support for Windows 10. Since the launcher now supports Windows 10 fully, this option is unnecessary and seems to have no effect.

Version history
The new version 2.x launchers are no longer written in Java, and are a lot larger (~85MB). If you are short on space or need to run it cross-platform, you can try using the fifth launcher, version 1.6.93 here (~4.6MB).

Trivia

 * In the top left corner of the 2016–2019 launcher, a barely visible button could be found which randomly shows either a creeper face or a shrug kaomoji ¯\_(ツ)_/¯. It glowed white when clicked, but had no use at all. This was removed in the 2019 redesign of the launcher.
 * The creeper face, as well as a shrug, were used for the language selection menu during the beta phase of the launcher, but when a globe was added instead both were simply moved down to be kept as an Easter egg.
 * Hovering long enough over the "Play" button in the 2016–2019 launcher causes random mobs to appear on the right side of the window.