Skip to main content

Create your first bundle

A script bundle separates static metadata from Lua behavior:

my-script/
├── bundle.json
└── main.lua

bundle.json

The manifest identifies the script, declares its capabilities, pins API and Minecraft compatibility, and hashes every file:

{
"schemaVersion": 2,
"id": "example:walk-home",
"version": "1.0.0",
"entrypoint": "main.lua",
"display": {
"name": "Walk Home",
"author": "Your Name",
"description": "Walk to one saved coordinate.",
"category": "Navigation"
},
"configSchemaVersion": 1,
"configSchema": {
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
},
"requestedCapabilities": ["navigation", "pathfinding"],
"runtimeCompatibility": {
"minimumApi": 4,
"maximumApi": 4,
"minecraftVersion": "26.2"
},
"files": [
{"path": "main.lua", "sha256": "<lowercase SHA-256 of main.lua>"}
],
"dependencies": [],
"packs": []
}

The hash is required. Replace the placeholder with the exact SHA-256 of the entrypoint bytes.

main.lua

Lua starts at hexis.main:

function hexis.main()
local result = hexis.await(hexis.navigate.to({
destination = {x = 12, y = 70, z = -8},
arrive_within = 2.0,
}), {timeout = 60})

if not result.ok then
return
end
end

Lua chooses the goal. Hexis owns pathfinding, movement, camera use, input, timeout cleanup, and the terminal result.

Next: run it

Continue with run and test your script.