An .mrpack contains almost none of its own mods
Rename any .mrpack to .zip, open it, and the surprise is how
little is there. A pack with two hundred mods is often under 100 KB. The mods are not
missing — they were never included.
What is actually inside
| Entry | Required | Contents |
|---|---|---|
modrinth.index.json | Yes | The manifest: every file, its path, size, hashes and download URLs |
overrides/ | No | Real files copied in as-is — configs, scripts, resource packs |
client-overrides/, server-overrides/ | No | Same idea, applied only on that side |
The manifest carries a formatVersion, a dependencies map
naming the loader and Minecraft version, and a files array. Each file entry
holds the destination path, a fileSize, a hashes
object with sha1 and sha512, an env block marking it
required or optional per side, and one or more downloads URLs.
Why it is built this way
Redistribution. A pack author almost never has permission to re-host every mod in the list, but they can always point at the author’s own file. Shipping URLs instead of jars keeps the pack legal to share and keeps it small enough to send over chat.
The hashes are the other half. A URL can start serving something different tomorrow; a SHA-512 cannot. A launcher that verifies the hash after download is checking that the file it received is byte-for-byte the file the pack author tested against.
The three ways it goes wrong
- No network, no pack. An
.mrpackis an installer, not an archive. Offline it produces a folder of configs and nothing else. - A dead URL is fatal, not skippable. If a mod is delisted, the entry still resolves to a 404 and the install stops at a file marked required.
- Server-only and client-only files. Copy an unpacked client instance
onto a server and you bring client-side mods that will refuse to load — the
envflags exist precisely to keep those apart.
Turning one into a plain folder
Converting means doing what a launcher does: read the manifest, fetch every file to its
declared path, verify each hash, then lay the overrides on top.
What comes out is an ordinary mods/ tree you can drop into any launcher or
upload to a host that has never heard of Modrinth.
Two details are worth keeping when you do it by hand. Respect the env flags
so a server build does not inherit client mods. And check the hash rather than the file
size — a truncated download and a redirected HTML error page can both land at a plausible
size, and only the hash catches them.