What is a manifest?
Any multi-UTXO protocol — whether it uses Bitcoin miniscript, Tapscript, or Liquid Simplicity — imposes a specific transaction layout. Covenants that do transaction introspection are especially strict: input 0 must be a specific asset, output 1 must go to a specific script hash, output 2 must carry exactly the right amount. The on-chain program enforces this, but someone still has to document what layout it expects.
Historically that documentation was a PDF, a Notion page, or a comment in the source. It was informal and only useful to the person who wrote it. Anyone else building a wallet integration had to reverse-engineer the expected transaction shapes and hope the docs were current.
A manifest formalises that document. The same information that used to go into prose — "the pre-lock UTXO must be at input index 0, the collateral goes to output 2, the borrower's NFT must be co-spent" — is expressed as structured JSON that tools can read.
Manifest, instance, state
A live contract is three things, not one:
| What it holds | Lifetime | |
|---|---|---|
| The manifest | The protocol definition: contract templates, actions, inputs, outputs, witnesses. | Static — one file, shared by every deployment of the protocol. |
| The instance | The compile-time field values for one deployment: this borrower's pubkey, this loan's amount. | Fixed when the contract is instantiated, then read by every later action. |
| The state | The live on-chain UTXO set for that instance. | Changes with every broadcast. |
The manifest is the cookbook recipe; the instance is the specific ingredients you bought; the state is what's currently in the pot.
Only the manifest is a document you write and share. The other two are data a wallet accumulates by running actions, and it must keep them: without the instance it cannot rebuild the contract's addresses, and without the state it cannot find the UTXOs to spend.
Where that data lives is the wallet's business. The format says what has to persist between actions, never how to store it. The CLI in this book writes JSON files next to the manifest; a browser extension would use its own storage, and a hosted wallet a database. Nothing in a manifest depends on the choice.
For the first several recipes we work only with the manifest — the other two are introduced in Instance, state & constructors.
What a manifest contains
Everything a wallet needs to build the protocol's transactions without reading the covenant source: the contract types and their compile-time fields, the on-chain states those contracts can create, and the valid transactions between them.
Anatomy of a manifest dissects each section in turn. But first, let's get the tooling ready.