In this guide you will build an empty add-on that Minecraft recognizes. It will not add anything yet, but it is the base for every item, block and mob you make later. It takes about ten minutes.
The folder layout
Create a project folder anywhere you like, for example on your desktop. Inside it, make two folders: one for the behavior pack and one for the resource pack.
my_first_addon/
BP/
manifest.json
pack_icon.png
items/
RP/
manifest.json
pack_icon.png
textures/
texts/The names BP and RP are just a habit that most creators use. Minecraft does not care what the outer folders are called. It only cares about what is inside them, and the most important file is manifest.json.
What a manifest does
Every pack needs a manifest.json in its top folder. It tells Minecraft:
- the pack's name and description
- a unique ID (the UUID) so the game can tell packs apart
- the pack's version
- what kind of pack it is (behavior or resource)
- which other packs it needs
If the manifest is missing or broken, Minecraft will not show the pack at all.
UUIDs
A UUID is a long random ID that looks like this: 7da910dc-081d-41d2-84e6-fcd9e04cbffb. Each pack needs its own UUIDs, and no two packs in the world should ever share one.
You need four UUIDs for a BP + RP add-on:
- Behavior pack header
- Behavior pack module
- Resource pack header
- Resource pack module
To get them, search for "UUID generator" in your browser and copy four fresh ones. In VS Code, extensions for Bedrock can also generate them.
Never copy UUIDs from a tutorial
The UUIDs on this page are examples. If you copy them and someone else did too, your packs will clash and one of them will not load. Always generate your own.
The behavior pack manifest
Create BP/manifest.json and paste this, then replace the UUIDs with your own:
{
"format_version": 2,
"header": {
"name": "My First Add-on",
"description": "My very first behavior pack",
"uuid": "7da910dc-081d-41d2-84e6-fcd9e04cbffb",
"version": [1, 0, 0],
"min_engine_version": [1, 26, 50]
},
"modules": [
{
"type": "data",
"uuid": "92b4a8c1-cbc4-4b82-85bd-e36e922d0621",
"version": [1, 0, 0]
}
],
"dependencies": [
{
"uuid": "f67430fa-ef89-4f40-802d-9574599c764d",
"version": [1, 0, 0]
}
]
}The resource pack manifest
Create RP/manifest.json. Notice that the module type is different, and its header UUID matches the one in the behavior pack's dependencies:
{
"format_version": 2,
"header": {
"name": "My First Add-on",
"description": "My very first resource pack",
"uuid": "f67430fa-ef89-4f40-802d-9574599c764d",
"version": [1, 0, 0],
"min_engine_version": [1, 26, 50]
},
"modules": [
{
"type": "resources",
"uuid": "654e78d1-0b0d-4f13-9a3b-6336f0ceab13",
"version": [1, 0, 0]
}
]
}Every field explained
format_version
The version of the manifest format itself. Use 2, which is what Mojang's own vanilla packs use. It is a plain number, not text in quotes.
Note
There is also a newer manifest format_version 3, where versions are written as text like "1.0.0" instead of arrays. Version 2 is still fully supported and is what this wiki uses.
header
Information about the pack as a whole.
name: shown in the pack list in game.description: the small text under the name.uuid: the pack's unique ID.version: three numbers: major, minor, patch. Raise it when you release an update, for example from[1, 0, 0]to[1, 0, 1]. Minecraft uses this to know a pack is newer.min_engine_version: the oldest Minecraft version your pack is written for. This also decides how the game reads some of your files, so set it to the version you are testing on, like[1, 26, 50].
modules
What is inside the pack. A pack needs at least one module, and each module has its own UUID.
| Module type | Used in | Contains |
|---|---|---|
data | Behavior pack | Items, blocks, entities, recipes, loot tables, functions |
resources | Resource pack | Textures, models, sounds, texts |
script | Behavior pack | JavaScript files using the Script API |
dependencies
A list of other packs this one needs. Each entry has the uuid and version of the other pack's header.
Here, the behavior pack depends on the resource pack. That link has a nice effect: when you turn on the behavior pack in a world, Minecraft turns on the resource pack for you too. Without it, players could enable the BP alone and see items with no textures.
Tip
The dependency must point at the RP's header UUID, not its module UUID. This is one of the most common beginner mistakes.
Pack icons
Add a pack_icon.png to the top of each pack folder, next to the manifest. This is the picture shown in the pack list.
- Make it square. 128x128 or 256x256 pixels both look good.
- Save it as PNG.
- You can use the same picture for both packs.
If there is no icon, the pack still works, but it shows a blank placeholder picture.
Add a language file
Names shown in game come from language files in the resource pack. Create these two files now so they are ready for later guides:
["en_US"]pack.name=My First Add-on
pack.description=My very first add-onLater you will add lines like item.demo:ruby.name=Ruby here.
Test that it loads
- Copy the
BPfolder intocom.mojang/development_behavior_packs. - Copy the
RPfolder intocom.mojang/development_resource_packs. - Open Minecraft and create a new world.
- In world settings, open Behavior Packs and look under Available. Your pack should be there with its icon.
- Activate it. The resource pack should turn on by itself, thanks to the dependency.
If the pack does not show up, check When it breaks. The most likely cause is a typo in a manifest, so read JSON in 5 minutes next.
The easy way
Writing manifests and generating UUIDs by hand is a one-time chore per project, but it is also where small typos break everything. GodCraft does this part for you: every add-on you create in the Workshop gets its own fresh UUIDs, both manifests and the dependency link between the two packs. You only fill in the details you care about in the pack settings.
Next steps
Your empty add-on works. Now give it something to do:
- Your first custom item
- Custom block
- Export and play to share it with friends