This plugin is completely free, please download it from Jetbrains Marketplace or the official GitHub page! Do not download this plugin from any untrusted third party pages!
Quickly publish your Minecraft mods to multiple mod hosting sites using Jetbrains IDEA.
It may not be as convenient as some Gradle plugins, but I want to do it.
- Fully GUI-based operation
- Automatically detect Mod information, no need to repeatedly manually select/input
- Quick saving of last operation records (dependencies, changelog)
- One-click publishing of mods to Modrinth, CurseForge, GitHub, and GitLab
These features will never be supported unless someone submits a pull request, or I suddenly want to implement them
- Publishing to custom Git servers
- Publishing resource packs/data packs
Priority order from top to bottom, smaller numbers indicate higher priority
- Update Forge/NeoForge update.json during publishing
- Publishing plugins
- Improve dependency manager
- Allow syncing README to
Modrinth andCurseForge (no API available) - Publishing to Hangar/SpigotMC
ModPublish can be found in the Jetbrains plugin marketplace. You can install it by searching for "Minecraft Mod Publish
Utils" in IDEA's Plugin module,
or download it through this link.
Before getting started, you need to apply for API Tokens from your publishing targets and configure ModIDs for your project. If you don't do this, the corresponding publishing targets will be automatically disabled.
Apply for an API key from Pats and set permissions as shown in the images
After clicking Create PAT, click to copy the API Token starting with mrp_, save it and fill it into the ModPublish
settings.
For Curseforge, you need to apply for two Tokens: API Token and Studio Token.
Apply for Studio Token from here
If the API Token is not displayed after registration, please leave and return to this page after a few minutes. It will be used for dependency validation.
Apply for API Token from here, they are similar to UUIDs. It will be used for file uploads and version creation.
Please apply from Fine-grained personal access tokens and configure permissions as shown in the image.
Token should start with github_pat_.
TODO
If you want to use the same API Token across multiple projects, you should fill them in at the following location in
IDEA: Settings | Tools | ModPublish: Global Settings
You also need to add ModIDs in Project | Tools | Configure ModPublish for Project. The API Token you fill in here
will override the global API Token.
I cannot completely guarantee its security. What you need to do is not share the following information with others:
- The
workspace.xmlfile in the project's.ideadirectory - IDEA's global configuration files
- Any of your API Tokens
Additionally, the API Token will generate an encryption key based on your environment and use this encryption key to process the API Token, encrypting and decrypting it when needed. If hardware information, system information, and JVM change, the old API Token will immediately become invalid and unreadable. Therefore, please open settings to back up or generate new API Tokens before making any changes to prevent operation interruption.
Do not run software from unknown sources, and do not actively calculate encryption keys and share them with others! If you believe your API Tokens have been leaked, please revoke them immediately and regenerate new ones.
If they support fine-grained permission configuration, please do so and do not add extra permissions.
| Platform | Status |
|---|---|
| Modrinth | Supported |
| CurseForge | Unsupported |
ModPublish currently supports updating mod description pages for Modrinth. This component is relatively new and does not yet support translation of some platform-specific Markdown syntax.
Due to lack of documentation from CurseForge, support is not provided at this time.
Move your mouse over the project's readme.md file, click Sync Description, and select the target you want to update.
If you haven't configured ModPublish for your project yet, please complete the configuration first, otherwise update targets will be disabled.
You may want a more formatted version name (not version number), such as MyMod 1.0.0 Fabric 1.21.8 instead of
something like
my-mod-1.0.0+fabric.jar.
Modrinth usually generates titles automatically, but CurseForge does not, and you don't want to manually copy it every time.
ModPublish provides this feature since version 0.0.2. You need to configure the final formatted name template in
Project | Tools | Configure ModPublish for Project.
Currently supported variables:
{version}- Mod version{name}- Mod name{loader}- First detected ModLoader that is compatible with the Mod{low-version}- Lowest Minecraft version that is compatible with the Mod; Not replaced if detection fails{max-version}- Highest Minecraft version that is compatible with the Mod; Not replaced if detection fails
If not configured, ModPublish will still use the default name generation rules
| UI | Status |
|---|---|
| Version | Supported |
| Version name | Supported |
| ModLoader | Supported |
| Minecraft version | Supported |
| Supported target | Supported |
| Dependencies | Unsupported |
ModPublish can detect the type of mod you want to publish and identify mod metadata based on file characteristics, and automatically check some options based on them.
Some ModLoaders may not strictly validate Mod metadata (such as Rift), so please fill in the Mod metadata as completely as possible.
| ModLoader | Modrinth | CurseForge | Github | GitLab |
|---|---|---|---|---|
| Forge | Yes | Yes | No | No |
| NeoForge | Yes | Yes | No | No |
| Fabric | Yes | Yes | No | No |
| Quilt | Yes | Yes | No | No |
| Rift | Yes | Yes | No | No |
| LiteLoader | Yes | No | No | No |
| Java Agent | Yes | No | No | No |
Data packs, resource packs, and plugin publishing are currently not supported; I will add these compatibilities in the future.
For some missing ModLoaders, I cannot confirm if they are still being actively used. If you need support for one, please open an Issue.
Building ModPublish requires the following tools
- JDK 17
- Gradle 9
- Python3
Build steps:
- Run
./version_processor.pyto download latest Minecraft versions from network - Copy generated json files to
./src/main/resources/META-INFdirectory (minecraft.version.json) - Run
./gradlew buildPlugin - Final output is located in
./build/distributionsdirectory
This is not mandatory, just a suggestion
- Do not introduce third party dependencies unless necessary
- Do not write duplicate code
- Ensure code has good readability
- Tests are optional, but functionality must be manually verified before submission
- Comments are not mandatory. But if there are any, please use English.
- Variable/method/parameter names should not be too long
- Do not use machine translation services like Google, DeepL, etc.
- If using AI translation, ensure it does not cause major ambiguity
- Do not use discriminatory language
- Do not use dialects
- Do not use unnatural or confusing language
- Gson - License Apache 2.0
- OKHttp - License Apache 2.0
- TProxy - License Apache 2.0
- Flexmark - License BSD 2-Clause "Simplified" License
All resource files have been adjusted to display at 24px.
- Modrinth Logo - License GPL-3.0, with proper coloring of the logo
- CurseForge Logo - License CC BY 4.0
- Github Icon
- Gitlab Logo (vscode-icons) - License
- FluentUI System Icons - License MIT
If you like my work, or if it has brought you great convenience, please consider supporting my work through Patreon.
If you don't want to do that, you can also support me by clicking the Star on the Repo. The more Stars, the happier I am, and the more motivated I am to continue working.
Thanks to everyone who uses and supports ModPublish.
The source code is licensed under the LGPL-3.0 license.


