Actionable Executive Technical Summary
One-click copy of verified architecture takeaways, engineering rules, and reference implementations.

The manifest.json file is the root identity certificate for every Minecraft Bedrock add-on pack. A single invalid UUID, mismatched module type, or conflicting version definition causes Bedrock to reject the pack or silently ignore assets.

1. The Core Schema Breakdown

A valid manifest requires two distinct top-level sections: header and modules.

  • Header: Defines pack name, description, pack UUID, version tuple [1, 0, 0], and min_engine_version.
  • Modules: Defines what content the pack injects. Behavior Packs use "type": "data", Resource Packs use "type": "resources", and Script API packs use "type": "script".
Continue Reading — Sponsored

2. UUID v4 Collision and Pairing Rules

Bedrock requires that:

  1. The header UUID and module UUID inside the same manifest must never be identical.
  2. No two distinct packs in the game may share the same header UUID.
  3. When a Behavior Pack depends on a Resource Pack, the BP's dependencies array references the RP's header UUID.
// Example Behavior Pack Dependency:
"dependencies": [
  {
    "uuid": "a7b3c291-89e4-4a22-96b1-094857201938", // RP Header UUID
    "version": [1, 0, 0]
  }
]

Instant Minecraft UUID Generator

Generate cryptographically secure RFC-4122 v4 UUIDs for Minecraft Bedrock packs with 1-click clipboard copying.

⚠️ 5 Fatal Traps & Engineering Pitfalls

Critical implementation hazards and architecture failure modes discovered in production environments:

1. Identical Header and Module UUIDs

Copy-pasting the same UUID v4 into both the header and module sections causes the Bedrock engine to reject the pack upon world import with invalid manifest errors.

2. Dependency Module UUID Misrouting

When linking a BP to an RP, referencing the Resource Pack's module UUID instead of its header UUID breaks texture loading and triggers dependency missing warnings.

3. Min Engine Version Semantic Drift

Specifying an outdated min_engine_version (e.g. [1, 16, 0]) disables modern Script API beta modules and declarative block components.

4. String-Based Version Formatting

Writing "version": "1.0.0" as a string instead of an integer array [1, 0, 0] causes silent JSON schema parsing failure in Minecraft Bedrock.

5. Stale UUID Folders in Development Directory

Leaving duplicate development folders with matching UUIDs in com.mojang causes module version conflicts and prevents new script changes from loading.

Frequently Asked Questions

Why does Minecraft Bedrock require two separate UUIDs in every manifest.json file?
The header UUID uniquely identifies the overall add-on package, while the module UUID uniquely identifies the specific payload (e.g. behavior data, client resources, or JavaScript scripts) within that package.
What happens if two different addons share the exact same header UUID?
Minecraft Bedrock treats them as identical packages, overwriting files from the first pack or failing to import the second pack with a duplicate pack UUID error.
How do I link a Behavior Pack to a Resource Pack using the dependencies block?
In the Behavior Pack manifest.json, add an entry to the dependencies array containing the Resource Pack header UUID and matching version tuple.
What is the difference between module types data, resources, and script?
The data module defines server-side behavior (entities, blocks, loot tables), resources defines client-side visuals (textures, models, animations), and script activates the @minecraft/server JavaScript runtime.
How do version numbers in manifest.json affect player world migration and addon updates?
Incrementing version tuples (e.g. from [1, 0, 0] to [1, 0, 1]) signals to Minecraft that existing worlds should reload cached pack definitions and apply updated components.
Recommended Reading