Checking the Content Log First
Your first step after any broken edit should be checking the Content Log rather than staring at your code editor. In Minecraft Bedrock, open Settings, navigate to the Creator tab, and enable both Content Log File and Content Log GUI. When you load into a world or run the /reload command, the game parses your modified files and prints any syntax or schema errors directly to the screen and to a log file on your disk.
Pay close attention to the subsystem tags in brackets at the start of each log line, such as [Json], [Blocks], [Entities], or [Molang]. A single typo in one file can cause a cascade of errors across dependent files. For example, if a block definition fails to parse due to a missing comma, the game will also log errors for your terrain_texture.json references or loot tables that expect that block to exist. Always fix the very first error listed in the log after a reload, as later errors are often just side effects of the initial failure.
If the on-screen log disappears too quickly, press the Content Log History shortcut (or open the Creator settings menu while in your world) to review the full session output. On Windows, the raw text file is also written to your local com.mojang folder under the logs directory, which you can search using your code editor.
| Log Tag | Subsystem | Typical Cause of Failure |
|---|---|---|
| [Json] | JSON Parser | Syntax errors like trailing commas, unclosed brackets, or unescaped quotes. |
| [Blocks] | Block Definitions | Unknown component names, invalid format_version, or mismatched permutation conditions. |
| [Entities] | Entity Definitions | Broken component groups, invalid event targets, or missing runtime identifiers. |
| [Items] | Item Definitions | Using components that do not match the declared format_version. |
| [Molang] | Molang Compiler | Misspelled query names, missing parentheses, or unclosed single quotes in expressions. |
| [Scripting] | Script Engine | Uncaught JavaScript exceptions, missing module dependencies, or syntax errors in scripts. |
Spotting Silent Failures and Version Mismatches
Sometimes the Content Log shows zero errors, yet your entity, block, or item still does not behave as expected. This is called a silent failure, and it usually happens when your JSON is syntactically valid—meaning all brackets and commas are in the right place—but structurally wrong for the game engine. The parser reads the file without crashing, quietly discards the keys it does not recognize, and loads a half-working asset.
The most common cause of a silent failure after an edit is placing a component in the wrong scope or using a component that requires a newer format_version than the file declares. For instance, if you paste a modern block component like minecraft:destructible_by_mining into an older block file, or accidentally nest a component inside the description object instead of the components object, the engine may simply ignore it. Compare the structure below to your recently edited files to ensure every block sits in its proper parent object.
{
"format_version": "1.20.80",
"minecraft:block": {
"description": {
"identifier": "wiki:custom_stone",
"menu_category": {
"category": "construction"
}
},
"components": {
"minecraft:destructible_by_mining": {
"seconds_to_destroy": 2.5
},
"minecraft:destructible_by_explosion": {
"explosion_resistance": 6.0
},
"minecraft:geometry": "minecraft:geometry.full_block",
"minecraft:material_instances": {
"*": {
"texture": "custom_stone_tex",
"render_method": "opaque"
}
}
}
}
}Knowing What /reload Actually Updates
When testing edits while a world is already open, developers frequently rely on the /reload command to apply changes quickly. However, /reload only re-evaluates certain behavior pack files, such as functions, loot tables, trade tables, and scripts. It does not reliably reload everything.
If you edit block registries, item components, recipes, entity identifiers, or almost anything inside a resource pack (like models, textures, attachables, or render controllers), running /reload will make you think your edit broke the file because nothing changes in-game. Before assuming your latest edit introduced a bug, save and quit to the main menu, then reload the world from scratch. If you edited manifest.json or added new texture files, it is safest to restart the entire game client so the asset cache refreshes completely.
Isolating Broken Files by Sorting and Bisecting
If you edited a dozen files before testing and the Content Log does not point to a specific filename, let your operating system tell you what changed. Open your development_behavior_packs and development_resource_packs folders in your file manager, use the search bar to list all files (*.*), and sort the results by Date Modified in descending order. The files at the very top of that list are the only ones capable of having caused the new bug.
When a specific file is causing a problem—or when a complex entity or block stops working after a large edit—use the bisection method inside the file itself. Instead of rewriting the file from scratch, cut out half of the components or permutations you recently added, save them to a scratchpad file outside your pack folder, and reload the world. If the asset works again, the bug is in the half you removed. Paste half of that removed code back in and test again. Within three or four reloads, you will narrow the problem down to the exact component or event that is failing.
You can follow the same process at the folder level if your whole pack stops registering. Move half of your recently edited JSON files out of your BP/entities or BP/blocks folder into a temporary folder on your desktop. Because Bedrock loads most definitions independently, removing non-dependent files will quickly reveal which batch contains the bad file.
Catching Broken Edits in Script API Files
When your add-on uses the Script API, a single syntax error or bad import in one JavaScript file can halt execution for your entire script module. If your custom scripted mechanics suddenly vanish after an edit, look in the Content Log for the [Scripting] tag. If you use TypeScript, check your compiler terminal first, as a failed build might mean the game is still running an older compiled version of your script or an incomplete output file.
If the script loads without syntax errors, the failure usually happens inside an event callback at runtime. Wrap the code you recently edited in a try/catch block and print the error message and stack trace using console.error(). When Content Log GUI is enabled, console.error() prints in bright red text directly on your screen the exact moment the broken code runs, giving you the file name and line number that threw the exception.
import { world } from "@minecraft/server";
world.afterEvents.itemUse.subscribe((event) => {
try {
const player = event.source;
const item = event.itemStack;
if (item.typeId === "wiki:debug_wand") {
player.sendMessage("Wand activated successfully.");
}
} catch (err) {
console.error(`Script failed in itemUse: ${err} | Stack: ${err.stack}`);
}
});Using Version Control to Spot Accidental Edits
The most reliable way to find out what broke after an edit is to initialize a local Git repository in your add-on workspace. You do not need to upload your code anywhere; simply running git init in your project folder gives you an instant safety net. Whenever your add-on is in a working state, stage and commit your files.
The next time an edit breaks your pack and you cannot figure out why, run git status or check the Source Control panel in your code editor. It will list every single file modified since the pack last worked. Clicking any file shows a line-by-line diff, immediately exposing accidental keystrokes—like a stray character typed into manifest.json or a deleted bracket in a render controller—that you did not even realize you made. If a file is completely ruined, you can revert that single file back to its working state without losing your progress in other files.
Which versions this applies to
Applies to all modern Minecraft Bedrock versions (1.16.100 through 1.21+). The Content Log settings and /reload command are built into the base game and do not require any experimental toggles.
When it does not work
| What you see | Why | The fix |
|---|---|---|
| [Json][error]-BP/entities/goblin.json | Line 42, Column 5 - Missing '}' or object member name | You left a trailing comma after the last property in an object or array on line 41. Standard JSON parsers—and the stricter schemas in newer Bedrock format versions—treat a comma right before a closing brace as a syntax error. | Open the file specified in the error message, go to the line just above the reported line number, and delete the extra comma before the closing '}' or ']'. |
| [Blocks][error]-BP/blocks/ruby_ore.json | minecraft:block: custom_components is not a valid component | You added a newer component after an edit, or copied a snippet from a newer example, without updating the format_version string at the top of the JSON file to a version that supports that component. | Update the format_version at the top of the file to match the version where the component was introduced (for example, 1.21.0), and check that the component identifier is spelled with the 'minecraft:' prefix. |
| Your pack suddenly disappears from the Active Packs list or shows 'Missing Dependencies' after a quick edit. | You accidentally edited manifest.json, introduced a JSON syntax error inside it, or changed a UUID or version array so the Behavior Pack and Resource Pack no longer match. | Run your manifest.json through a JSON validator to check for missing commas or quotes, and verify that any UUIDs in the dependencies block still match the header UUID of the partner pack. |
| An entity turns completely invisible or renders as a black-and-magenta checkered cube after editing RP files. | A shortname defined in the client_entity file (RP/entity/) no longer matches the geometry identifier, texture path in textures/entity, or render controller name after you renamed something. | Check the Content Log for [Actor] or [RenderController] errors, then verify that every shortname referenced in your render_controllers array is defined identically in the textures and geometry objects of that same client_entity file. |
Reference, straight from the game files
Read out of the game itself, so the ids match the version you are building for.
