Manifest reference
plugin.toml — the four required fields and the capability grants
Every plugin directory must contain a plugin.toml. The manifest has four required fields and
one optional field:
Required fields
A manifest missing any required field fails at load with
manifest <path>: missing required field "<name>".
Capabilities
capabilities is the plugin’s least-privilege grant list. It defaults to empty — a plugin
with no capabilities can subscribe to events, log(), chat(), and register recipe matchers, but
it cannot read or mutate any entity, world, or navigation state.
The vocabulary is locked and closed. The seven valid strings:
Enforcement model
- Unknown capability strings are rejected at load. A typo like
"entitys.read"fails the plugin’s load withunknown capability "entitys.read" (valid: entities.read, entities.write, world.read, world.write, nav, skills.damage, skills.effects)— a capability can never silently grant nothing. - Handle operations check per-op at call time. A denied call returns a visible Starlark error
the plugin author sees —
capability denied: this plugin lacks "world.write"— never a silent no-op. See Handles & capabilities. - Skill mechanics check at load. Because skills are pure data known at load time, a
mechanic("damage")in a plugin whose manifest lacksskills.damageis a load error (fail-closed), not a runtime denial. See Skills.
Internally the grants are a bit-set (capSet) stamped onto every handle the plugin receives, so
each check is a single AND at the operation boundary.
Choosing capabilities: a real example
The bundled vanilla_pig plugin reads its own state and the nearest player, and writes its look
and navigation targets — nothing else:
An event-only plugin needs no capabilities at all:

