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.

Issues
  • 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
  • Mod updater downloads mods for wrong MC version

    Mod updater downloads mods for wrong MC version

    Operating System

    No response

    Version of PolyMC

    1.4.1

    Version of Qt

    6.3.1

    Description of bug

    Did auto updater, it downloaded some 1.17 mods on a 1.16 instance: image

    Steps to reproduce

    Install some mods on a 1.16 instance (ExtraSounds and LibGui seem to have been an issue for me)

    Suspected cause

    PolyMC doesn't check mod manifest after downloading.

    This issue is unique

    • [X] I have searched the issue tracker and did not find an issue describing my bug.
    bug 
    opened by TheArcaneBrony 1
  • GUI Scale on UHD

    GUI Scale on UHD

    Operating System

    Windows 11

    Version of PolyMC

    PolyMC 1.4.1

    Version of Qt

    Qt 6.3.0

    Description of bug

    I have 2 screens: 3840x2160 with 200% scale, 1280x1024 with 100% scale. When i open launcher it scales properly until i move it between screens so it sets 100% scale on 200% scale screen. unknown (9)

    Steps to reproduce

    • Open launcher
    • Move it to 100% scale screen
    • Move it to 200% scale screen

    Suspected cause

    I guess thats app layout.

    This issue is unique

    • [X] I have searched the issue tracker and did not find an issue describing my bug.
    bug 
    opened by xRoBoTx 2
  • Trying to update multiple mods with no metadata occasionally crashes PolyMC

    Trying to update multiple mods with no metadata occasionally crashes PolyMC

    Operating System

    Windows

    Version of PolyMC

    PolyMC 1.4.1

    Version of Qt

    Qt 6.3.0

    Description of bug

    When attempting to check for updates for all the mods in my mod list, after the confirmation prompt about metadata, PolyMC crashes after checking several mods. This does not appear to happen for any specific mod as doing so individually does not result in a crash.

    PolyMC-1.log

    Steps to reproduce

    • Select an Instance (with a somewhat large amount of mods)
    • Click View Mods
    • Ctrl + A
    • Click "Check for Updates"

    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 
    opened by Essermark 5
  • add Account setting for each instance

    add Account setting for each instance

    Role

    I use PolyMC to launch multiple moddd MC instances for split screen play

    Suggestion

    Provide a dropdown in the instance configuration for choosing an Account. If chosen, the instance will always be launched using that user (ignoring the setting in the application dropdown)

    Benefit

    I can more easily maintain multiple instances for different users.

    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.

    I have multiple instances for different users. I have to remember to change the user before launching each one; forgetting to do so can result in player inventories getting lost.

    Thanks. I love PolyMC!

    enhancement 
    opened by pcal43 0
  • Feature request: Add ability to define

    Feature request: Add ability to define "baseline" mods to be added to all profiles (new or copied) of a specific version+mod loader

    Role

    Playing Modded Minecraft with multiple modpacks

    Suggestion

    I would like a setting which adds a mod/set of mods by default to all new profiles

    Benefit

    I do not trust 1.19.1+ chat reporting feature, and would like to ensure that noChatReports is automatically added to all profiles i create going forward

    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.

    effectively I would like to specify mods A and B should be in all profiles i create. if i download a modpack containing mods A,C,D,E then I want the modpack to contain A B C D E, after specifying b as a "baseline" mod.

    For my case, this can allow for ensuring I never face the risk of accidentally joining a server without no chat reports enabled,

    However it can also be used for performance based mods on machines that are incapable or running modded packs without extra help.

    enhancement 
    opened by erieflin 0
Releases(1.4.1)
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 76 Jul 28, 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 33 Jun 7, 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 34 Jul 22, 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 181 Aug 1, 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 27 Jul 26, 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 34 Jul 25, 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 56 Jul 26, 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 155 Jul 20, 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 77 Jul 20, 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 62 Jul 26, 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 88 Jul 30, 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 10 Jul 31, 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 2 Jan 25, 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 514 Aug 5, 2022