# Reusable workflow recipe

Install an immutable versioned recipe with independent bindings and overrides.

## When to use it

Install a reusable recipe as an independent instance. Bind its inputs and retain local overrides separately from the library definition. Preview a version upgrade and resolve removed or changed customised members before applying it.

## Add and configure

1. Add **Reusable workflow recipe** from the workflow step picker.
2. Give the step a recognisable name and connect its required inputs.
3. Set the options below. Nested names identify fields within an object or a list item.
4. Validate the recipe, inspect the test result, then run it on the intended data.

The step identifier used in the editor’s code view is `workflow_fragment`.

## Settings

| Setting | Accepted value | Required | Default | What it controls |
| --- | --- | --- | --- | --- |
| Bindings (`bindings`) | object | No | Not specified | Values supplied to the reusable workflow’s named binding points. |
| LibraryDefinition (`definition`) | object | Yes | Not specified | Versioned definition of the model call or reusable workflow member. Nested settings describe its content. |
| Jobs (`definition.jobs`) | list of object; minimum items 1; maximum items 1024 | Yes | Not specified | Member jobs in the reusable workflow definition. |
| Name (`definition.name`) | string; pattern `^[a-z][a-z0-9_-]{0,63}$` | Yes | Not specified | Stable name of the versioned definition. |
| Outputs (`definition.outputs`) | list of string; minimum items 1; maximum items 1024 | Yes | Not specified | Member identifiers designated as outputs of the reusable workflow. |
| Version (`definition.version`) | string; pattern `^(0\|[1-9]\d*)\.(0\|[1-9]\d*)\.(0\|[1-9]\d*)(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$` | Yes | Not specified | Semantic version identifying the immutable definition. |
| Overrides (`overrides`) | object of object | No | Not specified | Per-member setting changes layered onto the selected reusable definition. |
| Sha256 (`sha256`) | string; pattern `^[a-f0-9]{64}$` | Yes | Not specified | Exact content digest of the reusable definition. A mismatched definition is rejected. |

## Inputs and outputs

| Direction | Port | Content | Required | Multiple records |
| --- | --- | --- | --- | --- |
| Inputs | `in` | records | Yes | Yes |
| Outputs | `out` | records | Yes | Yes |

## Effects, testing, and recovery

Transforms or passes records without a declared external side effect.

The declared preview behaviour is to execute this step. Reads, processing, or model usage can therefore be real. Read [dry runs](/docs/workflows/dry-runs) before using a preview with live connections.

No duplicate-prevention key is declared for this step. The step declares safe replay for its supported recovery path.

## Example: Independent pass-through instance

Step settings:

```json
{
  "bindings": {},
  "definition": {
    "jobs": [
      {
        "config": {},
        "handler": "read_input",
        "id": "input"
      }
    ],
    "name": "pass_through",
    "outputs": [
      "input"
    ],
    "version": "1.0.0"
  },
  "overrides": {},
  "sha256": "eee43d593536c32245016e776ae2c96a7ceae7574fd096e98fd7d91a130aa9c7"
}
```

## Check the result

Inspect the selected run’s status, counts, errors, and output records. An empty collection can be a valid result, and a completed step can contain per-record failures where the step defines that behaviour. Check the next step’s expected record shape before publishing or delivering the result.
