Every wpTruss marketplace block ships in a two-folder package. The runtime/ folder contains the deployable block files that go to user sites. The registry/ folder contains one file: manifest.json. This file is read by the marketplace indexer and is never deployed to user sites.
{block-slug}/
registry/
manifest.json Marketplace only. Never ships to users.
runtime/
block.json
index.js
index.asset.php
style.css
render.php
The manifest declares everything the marketplace needs to categorise, search, display, and compose blocks, without loading the block itself. It is the block’s machine-readable identity card.
manifest.json vs block.json – What Goes Where
| Data | Where it lives | Reason |
|---|---|---|
Block name (wptruss/my-block) |
block.json name AND manifest.json id |
WordPress needs it; marketplace indexes it |
| WordPress title, description, icon | block.json only |
WordPress editor UI |
| editorScript, style, render | block.json only |
WordPress asset registration |
| Block attributes and defaults | block.json only |
WordPress block runtime |
| Marketplace category, archetype | manifest.json only |
Never shipped to user sites |
| Intent, funnelStage, sectionRole | manifest.json only |
Never shipped to user sites |
| AI fill permissions | manifest.json only |
Never shipped to user sites |
| Composition canFollow/canPrecede | manifest.json only |
Never shipped to user sites |
| Schema support declaration | manifest.json only |
Actual schema output lives in render.php |
| wptPanels (Panel Registry config) | block.json only |
WordPress block registration |
The id in manifest.json must match name in block.json exactly. This is the only field that appears in both files.