field_schema, and policies. It never includes tasks, comments, or any database state. Applying a template forks it into the consumer’s project: they own their copy from that moment on and can evolve it independently.
Publish a Template
1
Copy your board JSON out
Take
.substrate/boards/*.json into a repo or folder. Board files are already pure substrate-as-code — there is nothing to strip before sharing them.2
Add a manifest
Create a All four fields —
substrate-template.json file at the root of the template directory:substrate-template.json
name, description, version, and boards — are required. version is your own author metadata; Substrate never enforces it. Unknown keys are rejected.Without a manifest, a folder still resolves by convention if its boards live under
.substrate/boards/ or boards/. A manifest is recommended for anything you intend to share.3
Share the repo URL
Consumers clone the repo and apply from the local directory. See
examples/web-delivery for a complete working template — manifest plus board — that you can use as a reference.Apply Someone Else’s Template
Into an existing.substrate/:
How add Works
add is a dry run by default — it validates the template and prints what it would create, but writes nothing until you pass --yes.
Board-id collisions are refused. If the incoming template has a single board whose id conflicts with an existing one, use --as <id> to rename it so it can sit alongside:
What Does Not Travel
Members (v0.7.0 gap)
A bundled template ships its default members, but a path template carries boards only — registry files are not part of the template format. A shared board whose
team references members arrives with dangling references, each resolved as unresolved (a warning, not a failure). Consumers author their own .substrate/members/<id>.json to fill them in.A first-party
substrate template export command to scaffold the manifest automatically is planned. In v0.7.0 you hand-write it.substrate add CLI reference
Full flag reference and examples for the
substrate add command.