A reference for AI agents designing builds for BlockForge voxel worlds
BlockForge is an on-chain voxel world on Bitcoin. Each chunk is 32x64x32 blocks. Players can export their builds as JSON and inscribe them as child inscriptions. This spec describes the JSON format so that AI agents can generate valid build files.
The generated JSON can be pasted directly into the game via Chunk Options > Import Chunk JSON, or inscribed on-chain as a child of the chunk's parent inscription.
All coordinates in the a (additions) and r (removals) arrays are local to the chunk (0-31 for X/Z, 1-63 for Y).
{
"t": "edit",
"cx": 0,
"cz": 0,
"op": "erase_floor",
"floorY": 10,
"a": [
[5, 11, 5, "stone"],
[5, 12, 5, "glass"],
[6, 11, 5, "brick"]
],
"r": [
[10, 15, 10]
],
"signs": {
"5,12,5": { "text": "Hello World", "author": "Builder" }
},
"tx": [],
"author": "MyName"
}
{
"t": "multi-edit",
"chunks": [
{ "cx": 0, "cz": 0, "op": "erase_floor", "floorY": 10, "a": [...] },
{ "cx": 1, "cz": 0, "a": [...], "r": [...] }
],
"tx": [],
"author": "MyName"
}
| Field | Type | Required | Description |
|---|---|---|---|
t | string | Yes | "edit" for single chunk, "multi-edit" for multiple |
cx | int | Yes | Chunk X coordinate (-16 to 15) |
cz | int | Yes | Chunk Z coordinate (-16 to 15) |
op | string | No | Chunk operation: "reset", "erase", or "erase_floor" |
floorY | int | If op=erase_floor | Y level for the floor (1-60) |
a | array | Yes | Blocks to add: [[x, y, z, blockName], ...] |
r | array | No | Blocks to remove: [[x, y, z], ...] |
signs | object | No | Sign text: {"x,y,z": {"text": "...", "author": "..."}} |
tx | array | No | Custom textures: [{"iid": "inscription_id", "name": "BlockName"}] |
author | string | No | Builder display name |
Operations are applied BEFORE additions. This lets you clear a chunk and then place your build on a clean canvas.
If op is omitted, the build is applied as a diff on top of the existing procedural terrain. Use a to add blocks and r to remove them.
Clears all blocks above bedrock (Y=1 to Y=63). Only air remains. Then a additions are applied. Good for building in empty space.
{ "t": "edit", "cx": 0, "cz": 0, "op": "erase", "a": [...] }
Clears all blocks, then places a single floor layer at the specified Y level using biome-appropriate materials. This is the most common operation for builds.
{ "t": "edit", "cx": 0, "cz": 0, "op": "erase_floor", "floorY": 10, "a": [...] }
Regenerates the original procedural terrain, then applies additions on top. Useful for undoing all changes and starting fresh with terrain.
{ "t": "edit", "cx": 0, "cz": 0, "op": "reset", "a": [...] }
Blocks are referenced by lowercase name in the a array. Here are all 73 built-in blocks:
| ID | Name | Notes |
|---|---|---|
| 1 | grass | Green top, dirt sides |
| 2 | dirt | |
| 3 | stone | Most common structural block |
| 4 | sand | |
| 5 | gravel | |
| 12 | snow | White top, snow sides |
| 51 | pure snow | All white |
| 27 | ice | Transparent |
| 13 | water | Transparent, no collision |
| 72 | lava | Emissive, animated |
| ID | Name | Notes |
|---|---|---|
| 6 | wood | Log block |
| 7 | planks | Wooden planks |
| 8 | cobblestone | |
| 9 | brick | |
| 10 | glass | Transparent |
| 11 | leaves | Transparent |
| 43 | clay | |
| 44 | sandstone | |
| 19 | obsidian | Dark purple/black |
| 54 | dark wood | |
| 55 | thatch | Emissive |
| ID | Name |
|---|---|
| 65 | red glass |
| 66 | blue glass |
| 67 | green glass |
| 68 | yellow glass |
| 69 | purple glass |
| 70 | orange glass |
| ID | Name | Notes |
|---|---|---|
| 14 | neon panel | Cyan glow |
| 16 | crystal | Purple, transparent |
| 18 | energy core | Orange glow |
| 22 | neon road | Teal glow |
| 32 | magic leaves | Pink/purple glow |
| 35 | alien spire | Orange glow |
| 36 | alien flora | Purple glow |
| 47 | coral | Pink glow |
| 50 | lantern | Warm light, emits point light |
| 56 | portal block | Purple, transparent, no collision |
| 61 | firefly jar | Yellow-green glow |
| 62 | desert lamp | Warm glow |
| 63 | ice crystal | Blue glow |
| 64 | warning light | Orange glow |
| ID | Name | Notes |
|---|---|---|
| 57 | bitcoin | BTC logo, emissive |
| 58 | satoshi | Sat logo, emissive |
| 59 | chart | Green chart, emissive |
| 60 | ordinals | Ordinals logo, emissive |
| 73 | fee rate | Live fee rate display, emissive |
| ID | Name |
|---|---|
| 17 | dark metal |
| 21 | cyber ground |
| 23 | cyber rock |
| 24 | cyber sub |
| 52 | cyber window |
| 53 | cyber floor |
| ID | Name | Biome |
|---|---|---|
| 15 | circuit | Cyberpunk |
| 20 | cloud | Decorative, no collision |
| 25 | cactus | Desert |
| 26 | tundra leaves | Tundra |
| 28 | snow leaves | Tundra |
| 29 | ench. ground | Enchanted |
| 30 | ench. sub | Enchanted |
| 31 | magic log | Enchanted |
| 33 | alien ground | Alien |
| 34 | alien rock | Alien |
| 37 | ruin ground | Ruins |
| 38 | ruin stone | Ruins |
| 39 | ruin metal | Ruins |
| 40 | ruin brick | Ruins |
| 41 | flower | Plains, no collision |
| 42 | tall grass | Plains, no collision |
| 48 | kelp | Ocean, no collision |
| 49 | ocean floor | Ocean |
| ID | Name | Notes |
|---|---|---|
| 45 | bedrock | Cannot be broken |
| 46 | sign | Writable sign block |
| 71 | seed | Grows into a tree over time |
You can reference Bitcoin inscription images as block textures using the tx array:
{
"tx": [
{ "iid": "abc123...i0", "name": "my_texture" }
],
"a": [
[5, 11, 5, "my_texture"]
]
}
The inscription ID must point to a valid image inscription on Bitcoin. The game will fetch and render it as a block texture.
{
"t": "edit",
"cx": 0, "cz": 0,
"op": "erase_floor",
"floorY": 10,
"a": [
[15, 11, 15, "stone"], [16, 11, 15, "stone"], [15, 11, 16, "stone"], [16, 11, 16, "stone"],
[15, 12, 15, "stone"], [16, 12, 15, "stone"], [15, 12, 16, "stone"], [16, 12, 16, "stone"],
[15, 13, 15, "stone"], [16, 13, 15, "stone"], [15, 13, 16, "stone"], [16, 13, 16, "stone"],
[15, 14, 15, "stone"], [16, 14, 15, "stone"], [15, 14, 16, "stone"], [16, 14, 16, "stone"],
[15, 15, 15, "lantern"]
]
}
{
"t": "edit",
"cx": 2, "cz": -1,
"a": [
[10, 20, 10, "brick"], [11, 20, 10, "brick"], [12, 20, 10, "brick"],
[10, 21, 10, "glass"], [11, 21, 10, "glass"], [12, 21, 10, "glass"]
],
"r": [
[10, 19, 10], [11, 19, 10]
]
}
{
"t": "edit",
"cx": 0, "cz": 0,
"op": "erase_floor",
"floorY": 10,
"a": [
[14,11,14,"obsidian"],[15,11,14,"obsidian"],[16,11,14,"obsidian"],[17,11,14,"obsidian"],
[14,11,17,"obsidian"],[15,11,17,"obsidian"],[16,11,17,"obsidian"],[17,11,17,"obsidian"],
[14,11,15,"obsidian"],[14,11,16,"obsidian"],[17,11,15,"obsidian"],[17,11,16,"obsidian"],
[14,12,14,"obsidian"],[17,12,14,"obsidian"],[14,12,17,"obsidian"],[17,12,17,"obsidian"],
[14,13,14,"obsidian"],[17,13,14,"obsidian"],[14,13,17,"obsidian"],[17,13,17,"obsidian"],
[15,13,14,"obsidian"],[16,13,14,"obsidian"],[15,13,17,"obsidian"],[16,13,17,"obsidian"],
[14,13,15,"obsidian"],[14,13,16,"obsidian"],[17,13,15,"obsidian"],[17,13,16,"obsidian"],
[15,13,15,"obsidian"],[16,13,15,"obsidian"],[15,13,16,"obsidian"],[16,13,16,"obsidian"],
[15,14,15,"bitcoin"],[16,14,15,"bitcoin"],[15,14,16,"bitcoin"],[16,14,16,"bitcoin"],
[15,15,15,"energy core"],[16,15,16,"energy core"],
[14,11,13,"lantern"],[17,11,13,"lantern"],[14,11,18,"lantern"],[17,11,18,"lantern"]
]
}
"op": "erase_floor" with "floorY": 10 for a clean building surfacelantern blocks for lighting. They emit actual point lights in the game"x,y,z" using local chunk coordinatesBlockForge by MDV ยท blockforgebtc.com