English | Русский
Browse, install, update and manage Minecraft mods and plugins from Modrinth directly from the GameAP. The plugin adds a Modrinth tab to the game server page for Minecraft servers.
The backend is a single wasm32-wasip1 module written in AssemblyScript; the frontend
is a Vue 3 bundle embedded inside that module. The whole plugin ships as one signed
.wasm file.
- Catalogue search across Modrinth, filtered to the server's mod loader and Minecraft version, with an optional content-category filter, pagination and sort (relevance / downloads / followers / updated).
- Project details — a project page with description, categories, license, author, download and follower counts, and an image gallery, linking out to Modrinth.
- Install the latest or a specific version, with the version list showing changelog and declared dependencies.
- Dependencies — required dependencies are resolved and, after a confirmation that shows the full set and total download size, installed automatically.
- Update an installed mod to a newer compatible version (state-preserving replace).
- Enable / disable a mod without deleting it (
name.jar↔name.jar.disabled). - Uninstall, with orphaned-dependency reporting.
- Reconciliation — the installed list is cross-checked against the real files on the server, flagging missing files and listing unmanaged jars. Unmanaged jars are identified against Modrinth by content hash and, when recognised, adopted into the managed list — so mods installed out-of-band still show up as managed.
The tab is shown only for Minecraft servers (via the slot's checkGame) and requires the
plugin:dshdabjp2l73a:manage server ability.
The plugin does not guess the server platform. It reads the server's mod and version
variables (the ones set on the Minecraft game mod) and maps mod to a Modrinth loader and
target folder:
mod variable |
Modrinth loaders | Folder |
|---|---|---|
fabric |
fabric | mods/ |
quilt |
quilt, fabric | mods/ |
forge, cauldron |
forge | mods/ |
neoforge |
neoforge | mods/ |
paper |
paper, spigot, bukkit | plugins/ |
purpur |
purpur, paper, spigot, … | plugins/ |
spigot |
spigot, bukkit | plugins/ |
craftbukkit |
bukkit | plugins/ |
folia / bungeecord / velocity / waterfall |
(respective) | plugins/ |
vanilla |
— (unsupported) | — |
Vanilla servers show a notice instead of the catalogue. The install folder is always chosen by the backend from this table, never taken from the request.
Mod files larger than 64 MB are rejected with a clear message (upload them via the file manager instead). Every download is verified against the size and sha1 Modrinth publishes; because the host caps each fetch at 10 MB, files larger than 8 MB are pulled in 8 MB chunks with HTTP Range requests and reassembled.
Build the .wasm (see below) or download it from a release, then either:
- upload it in the panel under Admin → Plugins → Upload, or
- drop it into the panel's
plugins/directory and list its filename inPLUGINS_AUTOLOAD.
The repository is laid out as two halves:
assembly/— the AssemblyScript backend (ABI, host wrappers, router, handlers, Modrinth client, JSON, storage).frontend/— the Vue 3 + Naive UI frontend, built tofrontend/dist/plugin.jsand embedded into the wasm at build time.
It expects two sibling checkouts, matching the file: dependencies:
workspace/
├── plugin-minecraft-modrinth/ (this repo)
├── gameap-api/ (gameap/gameap — provides web/plugin-sdk)
└── gameap-proto/ (gameap/gameap-proto — provides the proto packages)
Build everything:
make build # builds the frontend, then embeds it and compiles the wasmOr step by step:
cd frontend && npm ci && npm run build # -> frontend/dist/plugin.js
cd .. && npm ci && npm run build # -> minecraft-modrinth.wasmTest and lint:
make test # backend wasm harness tests + frontend unit tests
make check # asc type-checkThe backend tests instantiate the built wasm with mocked gameap-* host modules and drive
it through the real protobuf ABI (see tests/harness/).
Publishing is handled by .github/workflows/release.yml on a published GitHub release: it
bakes the tag into the version, builds and GPG-signs the wasm, and uploads it to
plugins.gameap.dev and the release. It needs the GPG_SIGNING_KEY and
GAMEAP_DEPLOY_TOKEN secrets and the GAMEAP_PLUGIN_ID repository variable.
MIT