A Bedrock addon is a zip, and the manifest is why it fails
Most rejected .mcaddon imports are a valid zip with one wrong header line, and the error message never names the field that broke it.
An .mcaddon is a zip archive with a different extension, and the game rejects it for reasons that have nothing to do with the zip. The usual culprit is manifest.json — a small file with a header whose two UUIDs must be distinct and whose format_version is not the game version you are targeting.
Two UUIDs, never the same one
A manifest carries a header and a modules array. Each needs its own uuid, and reusing one across both is the single most common rejection:
{
"format_version": 2,
"header": {
"name": "My Pack",
"description": "Example",
"uuid": "aaaaaaaa-0000-0000-0000-000000000000",
"version": [1, 0, 0],
"min_engine_version": [1, 21, 0]
},
"modules": [
{
"type": "data",
"uuid": "bbbbbbbb-0000-0000-0000-000000000001",
"version": [1, 0, 0]
}
]
}
UUIDs are 128-bit values written as 32 hex digits in five hyphenated groups. Any generator is fine; a duplicate is not. version and min_engine_version are three-integer arrays, not strings — "1.0.0" fails silently on some builds.
Java has no manifest at all
This is the split that trips people moving between editions. A Java resource pack ships a pack.mcmeta with a pack_format integer. Bedrock ships manifest.json with UUIDs and a module list. Neither file is read by the other edition, and a pack cannot be ported by renaming the archive.
Check before you import
Unzip the archive and look at the top level. A pack nested one folder deep — MyPack/manifest.json instead of manifest.json — imports as nothing at all, with no error. The manifest must sit beside the textures/ or behavior_packs/ content it describes.
Block models are a separate format
A Java block-model JSON is not a Bedrock geometry file, and the two do not interchange:
| Java block model | Bedrock geometry | |
|---|---|---|
| Root key | elements | minecraft:geometry |
| Coordinates | 0–16 per block | 0–16 per block |
| Textures | textures map | materials map |
Both express a cube grid of 16 units per block, which is why a generated model looks right in one and imports as an empty shape in the other.
Registry names are not interchangeable
Bedrock and Java disagree on identifiers for the same content. A pack that references a Java name for an enchantment, effect or biome will load and then quietly do nothing, because the name resolves to no entry. The registries themselves differ in size between editions, so a pack authored against one edition's list cannot be assumed complete in the other.
Validate the manifest, check the archive layout and generate a block model in the Bedrock & Pack Tools.