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

Overview

PolyMC logo PolyMC logo


PolyMC is a custom launcher for Minecraft that focuses on predictability, long term stability and simplicity.

This is a fork of the MultiMC Launcher and not endorsed by MultiMC. If you want to read about why this fork was created, check out our FAQ page.

Installation

Development Builds

There are per-commit development builds available here. These have debug information in the binaries, so their file sizes are relatively larger. Portable builds are provided for AppImage on Linux, Windows, and macOS.

For Debian and Arch, you can use these packages for the latest development versions:
polymc-git polymc-git
For flatpak, you can use flathub-beta

Help & Support

Feel free to create an issue if you need help. However, you might find it easier to ask in the Discord server.

PolyMC Discord

For people who don't want to use Discord, we have a Matrix Space which is bridged to the Discord server:

PolyMC Space

If there are any issues with the space or you are using a client that does not support the feature here are the individual rooms:

Development Discussion Github Maintainers News Offtopic Support Voice

we also have a subreddit you can post your issues and suggestions on:

r/PolyMCLauncher

Development

If you want to contribute to PolyMC you might find it useful to join our Discord Server or Matrix Space.

Building

If you want to build PolyMC yourself, check Build Instructions for build instructions.

Code formatting

Just follow the existing formatting.

In general, in order of importance:

  • Make sure your IDE is not messing up line endings or whitespace and avoid using linters.
  • Prefer readability over dogma.
  • Keep to the existing formatting.
  • Indent with 4 space unless it's in a submodule.
  • Keep lists (of arguments, parameters, initializers...) as lists, not paragraphs. It should either read from top to bottom, or left to right. Not both.

Translations

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

Download information

To modify download information or change packaging information send a pull request or issue to the website Here

Forking/Redistributing/Custom builds policy

Do whatever you want, we don't care. Just follow the license. If you have any questions about this feel free to ask in an issue.

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

Source for the website is hosted under the AGPL-3.0-or-later License.

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

Comments
  • Potential new logo, and an svg version

    Potential new logo, and an svg version

    We have permanently settled with PolyMC as the name because I already registered the polymc.org domains. We have also temporarily settled with Ouroboros as our logo.

    We have a working logo (thank you to @ZekeSmith), but if anyone has any objections/suggested changes please feel free to voice them.

    polymc_BASED_EDITION

    help wanted 
    opened by binex-dsk 89
  • Adopt new Curseforge Core API

    Adopt new Curseforge Core API

    Adopt the new Curseforge Core API

    ✨ Features

    • [x] modpacks
    • [x] mods
    • [x] configurable base URL

    🚧 Issues

    • [x] mod sorting currently doesn't work
    • [x] mod downloading from search page
    • [x] CurseForge ToS...
    opened by ryanccn 69
  • Adhere to the GPLv3, do not make exceptions

    Adhere to the GPLv3, do not make exceptions

    Goal

    Cease all takedowns of PolyMC forks through the use of invalid GitHub takedown requests.

    Motivation

    I created a fork of PolyMC which removed 4 lines of code from a file. I didn't think this would a problem, but a PolyMC developer apparently could not bear the thought of 4 lines of code being commented out and demanded I take action to keep Microsoft happy. I thanked him for his suggestion but politely declined, only to see that a few days later he had filed a takedown on the grounds of "Private Information" (see here https://docs.github.com/en/site-policy/content-removal-policies/github-private-information-removal-policy) citing a PolyMC API key for Microsoft authentication which was published under GPLv3.

    Specification

    What I'm proposing may be a little difficult to properly implement, but the implementation I have in mind is the following: Find a way to avoid making false takedown requests for GPLv3 licensed programs citing the publication of GPLv3 code as an invasion of privacy. I'm not sure of a proper method for this myself yet, but it's definitely doable.

    Drawbacks

    You might have to bear with the existence of forks you personally do not agree with. This might be quite the challenge, and I'm open to possible solutions for this.

    Unresolved Questions

    How can this be implemented in such a way where the project is still able to continue regular functionality if there exists forks that comment out GPLv3 licensed code?

    Alternatives Considered

    Discontinue PolyMC and become amish, or continue violating the GPLv3 license.

    This suggestion is unique

    • [x] I have searched the issue tracker and did not find an issue describing my suggestion, especially not one that has been rejected.

    You may use the editor below to elaborate further.

    No response

    external 
    opened by catfromplan9 58
  • Offline Mode Support DRM

    Offline Mode Support DRM

    This adds back the offline mode support but with DRM: Offline accounts can only be added if at least one other account (Microsoft or Mojang) was already added.

    DRM is configurable at build time and defaults to enabled.

    opened by bexnoss 44
  • Offline Mode Support

    Offline Mode Support

    This is only the UI part of https://github.com/PolyMC/PolyMC/issues/43, to demonstrate the desired UX. Players will be able to add offline mode accounts that can be selected with the account switcher the same way that online mode accounts can already be used.

    The new OfflineLoginDialog is simply a slightly modified version of LoginDialog (basically just without the password field).

    I don't know when or even if I can fully implement this. Please feel free to copy any of this as a basis for a PR with a working implementation.

    Closes https://github.com/PolyMC/PolyMC/issues/43

    opened by bexnoss 44
  • Bump Qt requirement to 5.12

    Bump Qt requirement to 5.12

    This PR drops support for Qt versions below 5.12.

    Also: This bumps minimum CMake version to 3.15, as QuaZip requires this as well.

    This effectively means that the following platforms are supported:

    • Alpine 3.11 or later
    • Arch
    • Debian 11 (bullseye) or later
    • Fedora 30 or later
    • macOS 10.12 (Sierra) or later
    • NixOS 21.05 or later
    • openSUSE Leap 15.2
    • openSUSE Tumbleweed
    • Ubuntu 20.04 or later
    • Void
    • Windows 7 or later

    Notable unsupported platforms:

    • Debian 10 (doesn't support Qt 5.12)
    • Ubuntu 18.04 (doesn't support Qt 5.12 nor CMake 3.15)

    NOTE: This does not mean that it will be impossible to run PolyMC on those platforms. A packager could patch PolyMC to build on a slightly older Qt or just use the AppImage / Flatpak

    enhancement 
    opened by Scrumplex 40
  • PolyMC is not written in Rust

    PolyMC is not written in Rust

    Operating System

    Other

    Description of bug

    I expected to find a launcher written in chad Rust but was met with disappointment when I saw that it's written it lame old virgin C++. If you follow the reproduction steps, you can see that the first command lists an alarming amount of *.cpp files. These are source code written in C++, an obsolete and dangerous programming language. The second command produces no output at all, which suggests that PolyMC is, in fact, not written in Rust. Rust is a modern, safe programming language, featuring fearless abstractions and zero-cost concurrency. It's objectively superior to C++ and every other language in every way, therefore PolyMC should be rewritten in Rust as soon as possible.

    Steps to reproduce

    1. In the PolyMC source directory, run find -name '*.cpp', followed by find -name '*.rs'.

    Suspected cause

    An alarming hostility against Rust.

    This issue is unique

    • [X] I have searched the issue tracker and did not find an issue describing my bug.
    bug 
    opened by cozyGalvinism 39
  • Implement updater on macOS

    Implement updater on macOS

    Following my idea to use a third-party framework for updates in #466, this implements the Sparkle updater framework for macOS. Makes work towards #60, but does not entirely fix it as this only works on macOS.

    To release a new update, you add an entry to an RSS feed. Here is an example of such a feed, which I will temporarily use to test this PR:

    <?xml version="1.0" standalone="yes"?>
    <rss xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" version="2.0">
        <channel>
            <title>PolyMC</title>
            <item>
                <title>1.2.1</title>
                <pubDate>Wed, 20 Apr 2022 23:45:13 -0400</pubDate>
                <sparkle:fullReleaseNotesLink>
                    https://polymc.org/news/
                </sparkle:fullReleaseNotesLink>
                <sparkle:releaseNotesLink>
                    https://raw.githubusercontent.com/PolyMC/polymc.github.io/master/src/news/release-1.2.1.md
                </sparkle:releaseNotesLink>
                <sparkle:version>1.2.1</sparkle:version>
                <sparkle:shortVersionString>1.2.1</sparkle:shortVersionString>
                <sparkle:minimumSystemVersion>10.13</sparkle:minimumSystemVersion>
                <enclosure url="https://github.com/kthchew/PolyMC/releases/download/sparkle-1/PolyMC.tar.gz" length="22843287" type="application/octet-stream" sparkle:edSignature="VjHIfxB/vb5gwGbqYB58NFOrsXk9Sd43b7Y5UC5MLTHB62Igco7ae47dth6IhvcQj0nMu/o2g3bTomfY49BODA=="/>
            </item>
        </channel>
    </rss>
    

    If a user were on a hypothetical version older than 1.2.1 that has this implemented, they would see this: Screen Shot 2022-04-21 at 4 12 04 PM

    (Yes, the release notes are ugly; it can render HTML, so ideally something not plain text would be used, but you can just change the RSS entry to point to a different URL with some nicer HTML to get the release notes. Technically you could even just point it to https://polymc.org/news/release-1.2.1/ but then the header on that site takes up a lot of space)

    It both automatically checks for updates (at most, once every 24 hours, but we can change this if we want or give users an option to change it) and allows the user to manually check for updates. Before automatically checking for updates, it asks on second launch whether the user wants to automatically check or not.


    Stuff still in progress:

    • [x] Config options for the updater in PolyMC settings are not functional (auto update settings ~and channel selection~)
    • [x] Massive code cleanup needed; pretty much all of the old updater code is not necessary in macOS with this change, but I kind of just shoe horned it in. (kinda done?)
    • [x] A lot of cmake warnings during install/packaging (still seems to work properly though). I'm not very good with cmake so I may need some help with this one.

    macOS is not required for releasing updates

    I mentioned in #466 that macOS is needed to sign the update (to get the edSignature you see above). Actually, this isn't true. If you have a recent version of openssl (3.0 or higher, I think), you can just use the openssl command to create an ed25519 key:

    openssl genpkey -algorithm ed25519 > priv.pem
    openssl pkey -outform DER -pubout -in priv.pem | tail -c +13 | openssl base64 > pub.pem
    

    and then sign the PolyMC archive (make sure to remove the newline from the output before putting it in the RSS entry):

    openssl pkeyutl -sign -rawin -in /path/to/PolyMC.tar.gz -inkey priv.pem | openssl base64
    

    so macOS is not necessary at all during the release process. It does seem to be necessary, though, if you want to create delta files (to allow for partial downloads), but this isn't required.


    Testing this PR

    For testing purposes, the PR currently uses my public key and appcast URL, and places them in the Info.plist. If this is used, my key and URL must be removed before merging and changed to ones controlled by maintainers.

    It also points to a "release" file on my personal fork. Unfortunately I can't directly point the appcast at the artifact generated by GitHub Actions, because GitHub Actions embeds the .tar.gz in a .zip, and then Sparkle doesn't know what to do with that.

    Obviously, since there isn't a version above 1.2.1, if you download the artifact for this PR it will say there are no new updates available. You can trick it into thinking it's on an older version by changing the CFBundleVersion in the PolyMC.app/Contents/Info.plist to a lower version, then opening PolyMC again.


    Other operating systems

    This PR does nothing for Windows or Linux. If this is used, I recommend using WinSparkle for Windows because the format of the appcast.xml is practically the same (in fact, you can even have the Mac/Windows versions point to the same appcast). However, it does seem like WinSparkle requires an installer to run (usually in some kind of unattended mode), so #66 needs to be implemented first. I'm not a Windows developer, though, so I'm not sure I can help too much with these.

    From my understanding, Linux users can already use their package manager to update the launcher with the exception of AppImage users. I'm not too knowledgeable about that, but I don't think any update solutions there can pull from an appcast with a similar format.

    enhancement macOS 
    opened by kthchew 34
  • Icons on windows build are currently broken

    Icons on windows build are currently broken

    Operating System

    Windows

    Description of bug

    Icons on windows build are currently broken

    IMG_20220108_125203_188

    Steps to reproduce

    • Open PolyMC on windows
    • see

    Suspected cause

    No response

    This issue is unique

    • [X] I have searched the issue tracker and did not find an issue describing my bug.
    bug priority 
    opened by DioEgizio 34
  • Rework curseforge download

    Rework curseforge download

    Closes #593

    For some reason it returns some mods in double This changes in the pack manifest the list of files to a map file id -> File, avoiding duplicates file ids This also adds an actually "ok" implementation of Upload, to be used for POST requests

    This now also adds a check on modrinth, if the mod is blocked from third party download, to use it instead of curseforge For mods not found on modrinth, a dialog is shown prompting user to manually download

    bug enhancement 
    opened by timoreo22 33
  • CurseForge:

    CurseForge: "Some mod ID resolving tasks failed"

    Operating System

    Linux

    Version of PolyMC

    1.2.2-da25f3b8 (latest polymc-bin on Arch Linux)

    Description of bug

    Error dialogue pops up during modpack installation: "Unable to resolve mod IDs: Some mod ID resolving tasks failed." image

    Steps to reproduce

    1. Attempt to install curseforge modpack
    2. Whether or not a modpack triggers the bug is inconsistent, but I am currently able to trigger it 100% of the time with version "RLCraft 1.12.2 - Release v2.9.1c.zip" (i.e. the latest version) of RLCraft

    Suspected cause

    Maybe the recent Curse API changes? #585 claims that 1.2.2 doesn't use CurseMeta though, so it could just be a coincidence.

    It also could be some intermittent issue with Curse's website, but because they have no status page it's not easy for me to determine this. I skimmed their official communication methods such as twitter and saw no mention of an outage or similar.

    This issue is unique

    • [X] I have searched the issue tracker and did not find an issue describing my bug.
    bug 
    opened by ConnorJC3 33
  • Option to disable checksum verification

    Option to disable checksum verification

    This fixes a few issues that have been recently occurring, however this option shouldn't be used carelessly since it also indicates a corrupt/malware infected/tampered download. Fixes "java.lang.RuntimeException: Unable to detect the forge installer!" and "it was impossible to fetch the required libraries ... something to do with forge".

    opened by HeyaGlitz 0
  • UI/UX tweaks and quality of life - remastered

    UI/UX tweaks and quality of life - remastered

    Since Zeke is now gone, I think it's safe to say, work on PR #1103 has seized development. As such, I have decided to take this into my own hands. Drop your ideas in the comments on what you think I should change about the UI/UX in order to make it more friendly to beginners.

    opened by xslendix 2
  • Add

    Add "Create desktop shortcut" feature.

    This PR adds a way of adding a shortcut to directly start an instance as requested by issues #1088 and #541.

    It is important to note, however, that this feature has not been implemented for Mac.

    Right now, I need someone that is able to test whether they can get this to build and run under Windows.

    opened by xslendix 7
  • Platform support superissue

    Platform support superissue

    The current supported & tested operating systems: Windows 7+/amd64, MacOS 10.13+/amd64, and Linux/amd64.

    For the BSDs: The project "supports" FreeBSD 11+ and OpenBSD 7.0+, however it is not conclusive whether everything is supported, because both FreeBSD and OpenBSD are unable to launch Minecraft without a good amount of effort put towards seeking a functional port (or making one from scratch) of LWJGL 3.x+ for versions 1.13+, in addition to the effort in getting the native and available LWJGL 2.9.x versions to work in the first place.

    So, given the fact that support for these operating systems will naturally be lackluster without the proper plumbing to actually run Minecraft, this project should do one of two things:

    1. Never guarantee FreeBSD & OpenBSD support and sacrifice support for it if it means benefits for others, or:
    2. Fork & port LWJGL ourselves and provide instructions on how to run Minecraft on these platforms or just have PolyMC work out-of-the-box (TBD)

    As it stands for the BSDs, things appear to work up until launching Minecraft.

    For any operating system on Arm64: AFAICT, there are still steps to take in supporting any operating system running Arm64, and will not work out-of-the-box. Most notably is Apple Silicon as it is the most popular desktop format using ARM CPUs at the moment, by far more than Windows & Linux ARM boxes.

    Given these things, it would be easy to say that none of this is a project's responsibility and more tooling should be developed first. However, providing first class support for these configurations still largely thrown by the wayside in terms of software support would garner a solid new userbase and new developers, which is essential at the moment.

    I will update this issue as I gather more details and ideas get fleshed out.

    Edit 1 (11/25/2022) Apple Silicon appears to work for me using PolyMC on a M1 Mac Mini, with new build steps.

    opened by jdpatdiscord 12
  • Ability to select custom Kat image

    Ability to select custom Kat image

    Role

    i use polymc

    Suggestion

    i don't like the jinx cat, would be good to have a setting to change cat image

    Benefit

    so you can have for example The Kat Kommander instead

    This suggestion is unique

    • [X] I have searched the issue tracker and did not find an issue describing my suggestion, especially not one that has been rejected.

    You may use the editor below to elaborate further.

    No response

    enhancement 
    opened by glowiak 5
Releases(1.4.3)
Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve external game process read/write with minimum footprint.

Launcher Abuser Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve ex

Ricardo Nacif 79 Nov 23, 2022
A foobar2000 component which allows you to load and play ncm files directly.

Play NCM files directly with our favourite How to setup and build project Download foobar2000 SDK and extract into vendor/sdk Download WTL from source

null 37 Nov 25, 2022
SampPy is a plugin for SA:MP that allows you to create gamemodes from Python

SampPy is a plugin for SA:MP that allows you to create gamemodes from Python. A fork of PySAMP, which has been abandoned for quite some time.

Yahir Vlatko Kozel 16 Jul 31, 2021
Unreal Engine 4 vulnerability, that allows you to run shellcode directly into the target game process.

Unreal Engine 4 vulnerability, that allows you to run shellcode directly into the target game process, to load any DLL undetected from most game anti cheats, such as Easy Anti Cheat, BattleEye, Ricochet, Vanguard, ATG, and more.

Zebratic 46 Nov 17, 2022
Minecraft Classic 0.0.30a reimplemented in C.

MinecraftC - A 0.0.30a implementation in C Features True to the original version Implemented fully in C using SDL2 and OpenGL 1.1 Two different binari

John Payne 228 Nov 27, 2022
Replace Minecraft entity with MMD model.

KAIMyEntity Replace Minecraft entity with MMD model. KAIMyEntitySaba 将Github项目 benikabocha/saba (https://github.com/benikabocha/saba) 魔改成一个以JNI形式Expor

null 30 Oct 16, 2022
Minecraft 4k: decompiled, translated to C using SDL for graphics and input, and improved upon

M4KC Minecraft 4K - C Rewrite For those who don't know, Minecraft 4K was a stripped down version of Minecraft submitted by Notch to the Java 4K Game P

Sasha Koshka 38 Oct 9, 2022
A simplified version of the famous game Minecraft.

This program uses the concept of the famous game Minecraft but with better graphics. It procedurally generates an infinite world, the player has an animated character and can break blocks, there are also different biomes and mobs.

Angel Uriot 57 Nov 21, 2022
A voxel game/Minecraft clone for the iCE40 UP5K FPGA

FPGA craft A voxel game/Minecraft clone for the iCE40 UP5K FPGA (for the iCEBreaker board). Disclaimer Use this project at your own risk. This project

null 166 Nov 27, 2022
A Minecraft-clone written in C++/Vulkan

Minecraft A Minecraft-clone written in C++/Vulkan Current state It is currently very bare-bones. Planned features Textures Procedural generation Colli

null 4 Feb 27, 2022
A fully-featured Minecraft server startup script

A fully-featured Minecraft server startup script suite that offers a friendly user interface, blazing fast speeds, and wide compatibility.

null 81 Nov 21, 2022
Randomizes Minecraft's loot tables.

Minecraft Loot Randomizer Randomizes Minecraft's loot tables. Use Instructions To use this program, which you can either do via the provided exe file

bryceio 1 Oct 20, 2021
MotorMC is a blazing fast, multi threaded, asynchronous Minecraft server software

MotorMC is a blazing fast, multi threaded, asynchronous Minecraft server software that aims to handle many players (1000+) on a single world while still providing an experience as close to vanilla Minecraft as possible.

Garet Halliday 73 Nov 9, 2022
A Minecraft like game with basic rendering, movement, block placement.. All made from scratch

Voxel-Game-Demo A Minecraft like game with basic rendering, movement, block placement.. All made from scratch Downlod Pre-compiled binaries (executabl

null 1 Dec 30, 2021
A minecraft clone built in c++ opengl for the purpose of prefecting graphics programming skills.

LearnOpenGL - CLion This is a project template for OpenGL development with JetBrains CLion IDE. It was created mainly for LearnOpenGL tutorials. Inclu

Jeremy Dellock 1 Dec 28, 2021
StreamMinecraftClone - A Minecraft Clone developed live on stream at twitch.tv/gameswthgabe

Minecraft Clone This is a Minecraft clone that will be used for an education YouTube series. I will link the YouTube series here once I begin creating

null 91 Oct 24, 2022
A third party program to change Minecraft RTX's settings externally, directly in-memory.

RenderBender A third party program to change Minecraft RTX's settings externally, directly in-memory. Get the latest release here. About RenderBender

Jesse Daems 14 Oct 11, 2022
Minecraft Classic Clone in C

Minecraft Classic Clone in C This was my first large-scale OpenGL project. I've personally never used OpenGL, and so I apologize for any bizzare/slopp

null 3 Oct 9, 2022
DOSBox Pure is a new fork of DOSBox built for RetroArch/Libretro aiming for simplicity and ease of use.

DOSBox Pure is a fork of DOSBox, an emulator for DOS games, built for RetroArch/Libretro aiming for simplicity and ease of use.

Bernhard Schelling 549 Nov 28, 2022