# Reusable workflow recipes

Reusable recipes package a known process for use in more than one workflow or app. They separate the shared definition from the local choices that make it useful in a particular context.

## Understand the layers

A recipe definition contains its name, semantic version, jobs, and exported outputs. The published definition is immutable. An instance uses that definition with its own **bindings** and supported member **overrides**.

Bindings supply values such as selected jobs, configuration, or app context. Overrides customize supported parts of an instance without editing the shared library definition. Two instances can use one recipe version while retaining different local settings.

Available library recipes can cover document ingestion, structured extraction, and review publication. The exact library depends on the workspace's active capabilities.

## Compose a process

1. Choose a recipe whose input and output contract matches the task.
2. Supply its required bindings.
3. Review any local overrides.
4. Preview the expanded workflow graph.
5. Validate dependencies, ports, and destination behavior.
6. Publish a controlled version and run a small example.

The expanded graph shows the concrete jobs that will execute while retaining their composition context. Use it to check that exported outputs match what the consuming app expects.

## Upgrade with a preview

Publish a new recipe version when the shared process changes. Preview an installed instance's upgrade before applying it. The preview compares the old and replacement definitions and preserves local customizations.

If the replacement removes a member you customized, the upgrade requires explicit resolution. The installed instance remains unchanged while you decide whether to remove, replace, or relocate the customization. An upgrade must not silently discard working overrides.

## Choose the right mechanism

A template creates a starting workflow. A duplicate creates an independent copy. A recipe creates a versioned shared process with local bindings. A subworkflow invokes a separately managed workflow at execution time.

Use recipes when controlled shared evolution matters. Use [subworkflows](/docs/workflows/subworkflows) for callable processes and [versions](/docs/workflows/versions) for historical definition changes. See [publishing workflows](/docs/workflows/publish-workflows) before connecting a recipe to a released app.
