Converting .mrpack to a normal modpack zip — and why extractors fail
A .mrpack is a manifest, not an archive of mods. Unzipping it gives you a JSON file and no jars. Here is what is actually inside and what a converter has to do.
Rename a .mrpack to .zip, open it, and you find almost nothing: an modrinth.index.json, maybe an overrides/ folder. The mods are missing. This is not corruption — it is the format working as designed.
What is inside
modrinth.index.json the manifest: name, version, loader, and a list of downloads
overrides/ config files, resource packs, anything not on Modrinth
Each entry in the manifest looks like:
{
"path": "mods/sodium.jar",
"hashes": { "sha1": "…", "sha512": "…" },
"downloads": ["https://cdn.modrinth.com/data/…/sodium.jar"],
"fileSize": 812345
}
The pack ships references, not files. That is why a 40-mod pack is a 200 KB download and why every generic extractor "fails" — there is nothing to extract.
What a conversion has to do
- Read
modrinth.index.json. - Fetch every entry from its CDN URL.
- Verify each file against the sha512 in the manifest. Skipping this is how a
corrupted or substituted jar gets into a pack.
- Place each at its
path. - Copy
overrides/over the top — overrides win, that is their purpose. - Zip the result.
Step 3 is the one converters quietly skip. A mismatched hash means the download was truncated or the file changed; installing it anyway produces a pack that crashes on load with an error pointing at the wrong mod.
Why do it at all
- Launchers that do not speak mrpack. ATLauncher, MultiMC and manual installs want a
folder of jars.
- Server side. Server hosts almost never accept a
.mrpack; they want the mods
folder.
- Offline install. Once converted, the pack no longer needs the CDN.
The env field decides client versus server
Each file carries:
"env": { "client": "required", "server": "unsupported" }
A server pack must skip everything marked unsupported on the server side — mostly shaders, minimaps and HUD mods. Copying the full client mods folder onto a server is the usual cause of a crash on startup that names a rendering class.
Going the other way
Building a .mrpack from a folder is the reverse and has one trap: any mod not on Modrinth cannot be a manifest entry. It must go in overrides/mods/, which makes the pack bigger but keeps it working. Silently dropping those mods produces a pack that installs cleanly and is missing content.
Convert in either direction, with hash verification and the env split handled, in the Resource Pack Zip Tools.