PrismLauncher Documentation

A custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once (Fork of MultiMC)

9,940 stars C++ C++ 1 file ยท ~3,693 tokens #cpp#cpp20#fabricmc#forge#linux#minecraft#minecraft-launcher#modrinth
RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy PrismLauncher on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name prismlauncher --restart always prismlauncher/prismlauncher:latest

File: README.md

Installation

  • All downloads and instructions for Prism Launcher can be found on our Website.
  • Last build status can be found in the GitHub Actions tab (this also includes the pull requests status).

Development Builds

Please understand that these builds are not intended for most users. There may be bugs, and other instabilities. You have been warned.

There are development builds available through:

  • GitHub Actions (includes builds from pull requests opened by contributors)
  • nightly.link (this will always point only to the latest version of develop)

These have debug information in the binaries, so their file sizes are relatively larger.

Prebuilt Development builds are provided for Linux, Windows and macOS.

On Linux, we also offer our own Flatpak nightly repository. Most software centers are able to install it by opening this link.

Community & Support

Feel free to create a GitHub issue if you find a bug or want to suggest a new feature. We have multiple community spaces where other community members can help you:

  • Our Discord server:

  • Our Matrix space:

  • Our Subreddit:

Translations

The translation effort for Prism Launcher is hosted on Weblate and information about translating Prism Launcher is available at https://github.com/PrismLauncher/Translations.

Building

If you want to build Prism Launcher yourself, check the build instructions.

Sponsors & Partners

We thank all the wonderful backers over at Open Collective! Support Prism Launcher by becoming a backer.

Thanks to JetBrains for providing us a few licenses for all their products, as part of their Open Source program.

Thanks to Weblate for hosting our translation efforts.

Thanks to Netlify for providing us their excellent web services, as part of their Open Source program.

Thanks to the awesome people over at MacStadium, for providing M1-Macs for development purposes!

Forking/Redistributing/Custom builds policy

You are free to fork, redistribute and provide custom builds as long as you follow the terms of the license (this is a legal responsibility), and if you made code changes rather than just packaging a custom build, please do the following as a basic courtesy:

  • Make it clear that your fork is not Prism Launcher and is not endorsed by or affiliated with the Prism Launcher project (https://prismlauncher.org).
  • Go through CMakeLists.txt and change Prism Launcher's API keys to your own or set them to empty strings ("") to disable them (this way the program will still compile but the functionality requiring those keys will be disabled).

If you have any questions or want any clarification on the above conditions please make an issue and ask us.

If you are just building Prism Launcher for your distribution, please make sure to set the Launcher_BUILD_PLATFORM to a slug representing your distribution. Examples are archlinux, fedora and nixpkgs.

Note that if you build this software without removing the provided API keys in CMakeLists.txt you are accepting the following terms and conditions:

If you do not agree with these terms and conditions, then remove the associated API keys from the CMakeLists.txt file by setting them to an empty string ("").

License [](LICENSE)

All launcher code is available under the GPL-3.0-only license.

The logo and related assets are under the CC BY-SA 4.0 license.


File: cmake/vcpkg-ports/vcpkg-tool-meson/README.md

The only difference between this and the upstream vcpkg port is the addition of universal-osx.patch. It's very annoying we need to bundle this entire tree to do that.

-@getchoo


File: libraries/README.md

Third-party libraries

This folder has third-party or otherwise external libraries needed for other parts to work.

javacheck

Simple Java tool that prints the JVM details - version and platform bitness.

Do what you want with it. It is so trivial that noone cares.

launcher

Java launcher part for Minecraft.

It does the following:

  • Waits for a launch script on stdin.
  • Consumes the launch script you feed it.
  • Proceeds with launch when it gets the launcher command.

If "abort" is sent, the process will exit.

This means the process is essentially idle until the final command is sent. You can, for example, attach a profiler before you send it.

The standard and legacy launchers are available.

  • standard can handle launching any Minecraft version, at the cost of some extra features legacy enables (custom window icon and title).
  • legacy is intended for use with Minecraft versions < 1.6 and is deprecated.

Example (some parts have been censored):

text
mod legacyjavafixer-1.0
mainClass net.minecraft.launchwrapper.Launch
param --username
param CENSORED
param --version
param Prism Launcher
param --gameDir
param /home/peterix/minecraft/FTB/17ForgeTest/minecraft
param --assetsDir
param /home/peterix/minecraft/mmc5/assets
param --assetIndex
param 1.7.10
param --uuid
param CENSORED
param --accessToken
param CENSORED
param --userProperties
param {}
param --userType
param mojang
param --tweakClass
param cpw.mods.fml.common.launcher.FMLTweaker
windowTitle Prism Launcher: 172ForgeTest
windowParams 854x480
userName CENSORED
sessionId token:CENSORED:CENSORED
launcher standard

Available under GPL-3.0-only (with classpath exception), sublicensed from its original Apache-2.0 codebase

libnbtplusplus

libnbt++ is a free C++ library for Minecraft's file format Named Binary Tag (NBT). It can read and write compressed and uncompressed NBT files and provides a code interface for working with NBT data.

See github repo.

Available either under LGPL version 3 or later.

LocalPeer

Library for making only one instance of the application run at all times.

BSD licensed, derived from QtSingleApplication.

Changes are made to make the code more generic and useful in less usual conditions.

murmur2

Canonical implementation of the murmur2 hash, taken from SMHasher.

Public domain (the author disclaimed the copyright).

rainbow

Color functions extracted from KGuiAddons. Used for adaptive text coloring.

Available either under LGPL version 2.1 or later.

tomlplusplus

A TOML language parser. Used by Forge 1.14+ to store mod metadata.

See github repo.

Licenced under the MIT licence.

qdcss

A quick and dirty css parser, used by NilLoader to store mod metadata.

Translated (and heavily trimmed down) from the original Java code from NilLoader

Licensed under LGPL version 3.


File: nix/README.md

Prism Launcher Nix Packaging

Installing a stable release (nixpkgs)

Prism Launcher is packaged in nixpkgs since 22.11.

Check the NixOS Wiki for up-to-date instructions.

Installing a development release (flake)

We use cachix to cache our development and release builds.
If you want to avoid rebuilds you may add the Cachix bucket to your substitutors, or use --accept-flake-config
to temporarily enable it when using nix commands.

Example (NixOS):

nix
{
  nix.settings = {
    trusted-substituters = [ "https://prismlauncher.cachix.org" ];

    trusted-public-keys = [
      "prismlauncher.cachix.org-1:9/n/FGyABA2jLUVfY+DEp4hKds/rwO+SCOtbOkDzd+c="
    ];
  };
}

Installing the package directly

After adding github:PrismLauncher/PrismLauncher to your flake inputs, you can access the flake's packages output.

Example:

nix
{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";

    prismlauncher = {
      url = "github:PrismLauncher/PrismLauncher";

      # Optional: Override the nixpkgs input of prismlauncher to use the same revision as the rest of your flake
      # Note that this may break the reproducibility mentioned above, and you might not be able to access the binary cache
      #
      # inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs =
    { nixpkgs, prismlauncher, ... }:
    {
      nixosConfigurations.foo = nixpkgs.lib.nixosSystem {
        modules = [
          ./configuration.nix

          (
            { pkgs, ... }:
            {
              environment.systemPackages = [ prismlauncher.packages.${pkgs.system}.prismlauncher ];
            }
          )
        ];
      };
    };
}

Using the overlay

Alternatively, if you don't want to use our packages output, you can add our overlay to your nixpkgs instance.
This will ensure Prism is built with your system's packages.

[!WARNING]
Depending on what revision of nixpkgs your system uses, this may result in binaries that differ from the above packages output
If this is the case, you will not be able to use the binary cache

Example:

nix
{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";

    prismlauncher = {
      url = "github:PrismLauncher/PrismLauncher";

      # Optional: Override the nixpkgs input of prismlauncher to use the same revision as the rest of your flake
      # Note that this may break the reproducibility mentioned above, and you might not be able to access the binary cache
      #
      # inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs =
    { nixpkgs, prismlauncher, ... }:
    {
      nixosConfigurations.foo = nixpkgs.lib.nixosSystem {
        modules = [
          ./configuration.nix

          (
            { pkgs, ... }:
            {
              nixpkgs.overlays = [ prismlauncher.overlays.default ];

              environment.systemPackages = [ pkgs.prismlauncher ];
            }
          )
        ];
      };
    };
}

Installing the package ad-hoc (`nix shell`, `nix run`, etc.)

You can simply call the default package of this flake.

Example:

shell
nix run github:PrismLauncher/PrismLauncher

nix shell github:PrismLauncher/PrismLauncher

nix profile install github:PrismLauncher/PrismLauncher

Installing a development release (without flakes)

We use Cachix to cache our development and release builds.
If you want to avoid rebuilds you may add the Cachix bucket to your substitutors.

Example (NixOS):

nix
{
  nix.settings = {
    trusted-substituters = [ "https://prismlauncher.cachix.org" ];

    trusted-public-keys = [
      "prismlauncher.cachix.org-1:9/n/FGyABA2jLUVfY+DEp4hKds/rwO+SCOtbOkDzd+c="
    ];
  };
}

Installing the package directly (`fetchTarball`)

We use flake-compat to allow using this Flake on a system that doesn't use flakes.

Example:

nix
{ pkgs, ... }:
{
  environment.systemPackages = [
    (import (
      builtins.fetchTarball "https://github.com/PrismLauncher/PrismLauncher/archive/develop.tar.gz"
    )).packages.${pkgs.system}.prismlauncher
  ];
}

Using the overlay (`fetchTarball`)

Alternatively, if you don't want to use our packages output, you can add our overlay to your instance of nixpkgs.
This results in Prism using your system's libraries

Example:

nix
{ pkgs, ... }:
{
  nixpkgs.overlays = [
    (import (
      builtins.fetchTarball "https://github.com/PrismLauncher/PrismLauncher/archive/develop.tar.gz"
    )).overlays.default
  ];

  environment.systemPackages = [ pkgs.prismlauncher ];
}

Installing the package ad-hoc (`nix-env`)

You can add this repository as a channel and install its packages that way.

Example:

shell
nix-channel --add https://github.com/PrismLauncher/PrismLauncher/archive/develop.tar.gz prismlauncher

nix-channel --update prismlauncher

nix-env -iA prismlauncher.prismlauncher

Package variants

Both Nixpkgs and this repository offer the following packages:

  • prismlauncher - The preferred build, wrapped with everything necessary to run the launcher and Minecraft
  • prismlauncher-unwrapped - A minimal build that allows for advanced customization of the launcher's runtime environment

Customizing wrapped packages

The wrapped package (prismlauncher) offers some build parameters to further customize the launcher's environment.

The following parameters can be overridden:

  • additionalLibs (default: [ ]) Additional libraries that will be added to LD_LIBRARY_PATH
  • additionalPrograms (default: [ ]) Additional libraries that will be added to PATH
  • controllerSupport (default: isLinux) Turn on/off support for controllers on Linux (macOS will always have this)
  • gamemodeSupport (default: isLinux) Turn on/off support for Feral GameMode on Linux
  • jdks (default: [ jdk21 jdk17 jdk8 ]) Java runtimes added to PRISMLAUNCHER_JAVA_PATHS variable
  • msaClientID (default: null, requires full rebuild!) Client ID used for Microsoft Authentication
  • textToSpeechSupport (default: isLinux) Turn on/off support for text-to-speech on Linux (macOS will always have this)

File: program_info/README.md

Prism Launcher Program Info

This is Prism Launcher's program info which contains information about:

  • Application name and logo (and branding in general)
  • Various URLs and API endpoints
  • Desktop file