Use a public GitHub repository
RequiredPrivate repositories are not indexed. Keep the repository public and active.
A practical checklist for plugin developers who want their projects included on NukkitHub.
If your repository matches this checklist, it has a good chance of being included without any extra manual handling.
Private repositories are not indexed. Keep the repository public and active.
Use `src/main/resources/plugin.yml`, or `src/main/resources/powernukkitx.yml` for PowerNukkitX-first modules.
Topics help your plugin get discovered faster and more reliably than waiting on GitHub code indexing alone.
A clear `plugin.yml`, README, icon, and categories make the listing more complete after inclusion.
Do not archive the repository, do not mark it as a template, and do not add the `noindex` topic.
Your project can be indexed without a release, but only GitHub Releases with `.jar` files become version downloads.
Pick the card that matches your target runtime and follow that recipe. You do not need to understand the detection internals to get indexed.
If you want shared compatibility with Nukkit-MOT, `nukkit-plugin` plus `cn.nukkit:*` is enough.
If the manifest is not under `src/main/resources/`, the repository is very easy to miss.
A manifest alone is not always enough for runtime classification. Add the topic that matches your target core.
Any of these states will stop the project from being indexed or keep it out of the index.
MOTCI is not a discovery source. Developers still need a valid GitHub repository layout and GitHub topics.
The full document below keeps all of the practical details in one place, including manifest examples, versions, icons, and troubleshooting.
This guide is written for plugin developers. If you want your project to appear on NukkitHub, follow the checklist below.
To get your plugin included, make sure your repository satisfies all of the following:
noindex topicsrc/main/resources/plugin.ymlsrc/main/resources/nukkit.yml (supported by all Nukkit-family loaders)src/main/resources/powernukkitx.yml for PowerNukkitX-first modules@PluginMeta annotation on your main class (see PowerNukkitX below)If you only do one extra thing beyond the manifest, add the correct topic. That makes discovery much more reliable.
Use the topic that best matches your plugin:
| Target runtime | Recommended topic |
|---|---|
| NukkitX | nukkit-plugin |
| Nukkit-MOT | nukkit-mot-plugin |
| PowerNukkitX | powernukkitx-plugin or pnx-plugin |
| Lumi | lumi-plugin |
If your plugin supports both NukkitX and Nukkit-MOT, nukkit-plugin is acceptable.
How to add a topic: GitHub repository -> About -> gear icon -> Topics.
Fork note: If your plugin repository is a fork, adding the correct topic is especially important. Forks that publish no release of their own are treated as mirror copies and skipped.
nkx)Recommended setup:
src/main/resources/plugin.ymlnukkit-plugin topiccloudburstmcrepo.nukkitx.comIf your plugin uses generic cn.nukkit:* dependencies, it may be treated as shared compatibility for both NukkitX and Nukkit-MOT.
nkmot)Recommended setup:
src/main/resources/plugin.ymlnukkit-mot-plugin topicmemoriesoftimenukkit-motIf your plugin supports both NukkitX and Nukkit-MOT, generic cn.nukkit:* dependencies are acceptable.
Important: MOTCI is not a repository submission channel. Your plugin still needs to be discoverable from GitHub.
pnx)Recommended setup — two supported styles:
Style A — hand-written manifest:
src/main/resources/powernukkitx.ymlpowernukkitx-plugin or pnx-pluginorg.powernukkitx (current package)powernukkitxrepo.powernukkitx.orgStyle B — @PluginMeta annotation (official PNX template style):
PluginBase) with @PluginMetaname, version, and api on the annotation; authors, description, website, depend, softDepend are also indexedpowernukkitx.yml at build timepowernukkitx-plugin or pnx-plugin topic so the repository is discovered reliablyExample:
@PluginMeta(
name = "MyPlugin",
version = "1.0.0",
api = {"3.0.0"},
authors = {"myname"},
description = "A short description"
)
public class MyPlugin extends PluginBase {
}
Using powernukkitx.yml or @PluginMeta is the clearest way to make a PowerNukkitX module indexable.
lumi)Recommended setup:
src/main/resources/plugin.ymllumi-plugin topicrepo.lumi.surepo.luminiadev.com as an auxiliary repository hint alongside shared Nukkit markers (legacy domain)com.koshakmine:lumicom.koshakmine and lumiAt least one supported manifest must exist in the standard path:
src/main/resources/plugin.ymlsrc/main/resources/nukkit.ymlsrc/main/resources/powernukkitx.yml@PluginMeta-annotated main class under src/main/java (PowerNukkitX only)Example:
name: MyNukkitPlugin
version: 1.0.0
main: com.example.MyNukkitPlugin
api: ['1.0.0']
description: A short description of my plugin
website: https://example.com
depend: []
softdepend: []
| Field | Required | Description |
|---|---|---|
name |
Yes | Plugin name |
version |
Yes | Plugin version |
main |
Yes | Main class path |
api |
Yes | Supported API version(s) |
description |
No | Short summary |
website |
No | Homepage URL |
depend |
No | Required dependencies |
softdepend |
No | Optional dependencies |
Authors are indexed from GitHub contributors. If no contributors are available, the repository owner is used.
If your repository contains multiple plugin modules:
src/main/resources/owner/repo--module-suffixExamples:
cooldev/myplugin-repocooldev/myplugin-repo--modules-economyYour repository can be indexed without a GitHub Release, but a plugin with no
installable version at all (no GitHub Release .jar and no ci- CI snapshot)
is kept in a pending state: it stays tracked, yet does not appear in
search results or the public API until its first version shows up.
Forks are expected to provide their own releases: a fork without any release of its own is treated as a mirror copy and is not indexed. Forks that adapt a plugin to another runtime (for example a Nukkit plugin reworked for PowerNukkitX) usually publish their own releases and are indexed normally.
If you want users to see downloadable versions on NukkitHub, publish releases this way:
.jar filesGitHub Releases are the primary source of plugin versions.
Additionally, if the repository has a job on motci.cn
(the community Jenkins for Nukkit-MOT plugins), NukkitHub attaches the latest
successful build as one extra snapshot version, named ci-{build} and flagged
as a prerelease. The download links point to the Jenkins build artifacts.
In multi-module repositories, a CI artifact is only attached to the module whose plugin name matches the artifact filename.
Indexed plugins are also available as machine-readable JSON through the NukkitHub public API, shaped after the Modrinth API:
https://plugins.nukkit-mot.com/api/v2/search.json
(or the pre-filtered /api/v2/search/{loader}.json for a single runtime)/api/v2/project/{owner}/{name}/latest.jsonDownloads come from GitHub Release .jar assets (see above) and, when the
repository builds on motci.cn, the latest successful CI
build as a prerelease snapshot version.
See API.md for the full endpoint reference, response shapes, and
compatibility notes for Modrinth-based tooling.
Add category topics to help users find your plugin:
| Category | Topic |
|---|---|
| Adventure | nukkit-adventure |
| Cursed | nukkit-cursed |
| Decoration | nukkit-decoration |
| Economy | nukkit-economy |
| Equipment | nukkit-equipment |
| Food | nukkit-food |
| Game Mechanics | nukkit-game-mechanics |
| Library | nukkit-library |
| Magic | nukkit-magic |
| Management | nukkit-management |
| Minigame | nukkit-minigame |
| Mobs | nukkit-mobs |
| Optimization | nukkit-optimization |
| Social | nukkit-social |
| Storage | nukkit-storage |
| Technology | nukkit-technology |
| Transportation | nukkit-transportation |
| Utility | nukkit-utility |
| World Generation | nukkit-world-generation |
To make your listing look complete after inclusion:
Your README.md becomes the main long description.
Recommended:
To add a custom icon:
logo.png or icon.png in .github/img/ or the repository root256x256If no icon is found, the repository owner's avatar is used.
To add screenshots:
.github/img/logo.png or icon.png for screenshotsAdd a standard license file if possible.
NukkitHub will try to read license information from:
LICENSE file in the repository rootIf no open-source license is found, the project may appear as All Rights Reserved.
Your plugin may be skipped or removed if any of the following is true:
| Situation | Result |
|---|---|
| Repository is private | Not indexed |
| Repository is archived | Removed or skipped |
| Repository is a template | Skipped |
Repository has noindex topic |
Skipped or removed |
No supported manifest exists in src/main/resources/ |
Not discovered correctly |
| The runtime is unclear and there is no matching topic or dependency signal | Module may be skipped |
| Fork without any release of its own | Not indexed (mirror) |
No installable version (no Release .jar, no CI snapshot) |
Indexed as pending, hidden from search and API |
To remove your plugin manually, add the noindex topic.
src/main/resources/ from the startname, version, main, and apimy-nukkit-plugin/
├── .github/
│ └── img/
│ ├── logo.png
│ ├── gallery1.png
│ └── gallery2.png
├── src/
│ └── main/
│ ├── java/
│ │ └── com/example/
│ │ └── MyPlugin.java
│ └── resources/
│ └── plugin.yml
├── README.md
└── LICENSE
Check these items in order:
noindex topicsrc/main/resources/, or your PNX plugin uses @PluginMeta.jar,
or a ci- snapshot from motci) — otherwise it is indexed as pending and
stays hidden until the first version appearsMake sure you created a GitHub Release and attached a .jar file. Without
any installable version the project stays pending: tracked, but hidden from
search and the API.
Use the topic that matches your runtime and make your build files reference the matching core clearly.