# WorkflowDefinition

Source: /tuil/docs/reference/packages/workflow/api/workflow-definition
Locale: en

interface exported by @mwillbanks/tuil-workflow.



{/* Generated by tooling/docs/generate-reference.ts. */}

## interface [#interface]

Public interface exported by `@mwillbanks/tuil-workflow`.

```ts
export interface WorkflowDefinition<TState> {
  readonly id: string;
  readonly version: number;
  readonly initialState: TState | (() => TState);
  readonly steps: Readonly<Record<string, WorkflowStep<TState>>>;
  readonly transitions: readonly WorkflowTransition<TState>[];
  readonly persistence?: WorkflowPersistence<TState>;
  readonly migrate?: (
    persisted: PersistedWorkflow<unknown>,
    signal: AbortSignal,
  ) => PersistedWorkflow<TState> | Promise<PersistedWorkflow<TState>>;
  readonly exitGuard?: (
    context: WorkflowContext<TState>,
  ) => boolean | Promise<boolean>;
  readonly analytics?: (event: WorkflowEvent<TState>) => void;
  readonly onObserverError?: (error: unknown) => void;
}
```

## Members [#members]

| Member            | Type                                                                                                                                             | Required | Description                                                                                                                                                                              | Related types                                                                       |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| `id`              | `string`                                                                                                                                         | Yes      | The `id` member uses the `string` contract.                                                                                                                                              | —                                                                                   |
| `version`         | `number`                                                                                                                                         | Yes      | The `version` member uses the `number` contract.                                                                                                                                         | —                                                                                   |
| `initialState`    | `TState \| (() => TState)`                                                                                                                       | Yes      | The `initialState` member uses the `TState \| (() => TState)` contract.                                                                                                                  | —                                                                                   |
| `steps`           | `Readonly<Record<string, WorkflowStep<TState>>>`                                                                                                 | Yes      | The `steps` member uses the `Readonly<Record<string, WorkflowStep<TState>>>` contract.                                                                                                   | [`WorkflowStep`](/tuil/docs/reference/packages/workflow/api/workflow-step)               |
| `transitions`     | `readonly WorkflowTransition<TState>[]`                                                                                                          | Yes      | The `transitions` member uses the `readonly WorkflowTransition<TState>[]` contract.                                                                                                      | [`WorkflowTransition`](/tuil/docs/reference/packages/workflow/api/workflow-transition)   |
| `persistence`     | `WorkflowPersistence<TState> \| undefined`                                                                                                       | No       | The `persistence` member uses the `WorkflowPersistence<TState> \| undefined` contract.                                                                                                   | [`WorkflowPersistence`](/tuil/docs/reference/packages/workflow/api/workflow-persistence) |
| `migrate`         | `((persisted: PersistedWorkflow<unknown>, signal: AbortSignal) => PersistedWorkflow<TState> \| Promise<PersistedWorkflow<TState>>) \| undefined` | No       | The `migrate` member uses the `((persisted: PersistedWorkflow<unknown>, signal: AbortSignal) => PersistedWorkflow<TState> \| Promise<PersistedWorkflow<TState>>) \| undefined` contract. | [`PersistedWorkflow`](/tuil/docs/reference/packages/workflow/api/persisted-workflow)     |
| `exitGuard`       | `((context: WorkflowContext<TState>) => boolean \| Promise<boolean>) \| undefined`                                                               | No       | The `exitGuard` member uses the `((context: WorkflowContext<TState>) => boolean \| Promise<boolean>) \| undefined` contract.                                                             | [`WorkflowContext`](/tuil/docs/reference/packages/workflow/api/workflow-context)         |
| `analytics`       | `((event: WorkflowEvent<TState>) => void) \| undefined`                                                                                          | No       | The `analytics` member uses the `((event: WorkflowEvent<TState>) => void) \| undefined` contract.                                                                                        | [`WorkflowEvent`](/tuil/docs/reference/packages/workflow/api/workflow-event)             |
| `onObserverError` | `((error: unknown) => void) \| undefined`                                                                                                        | No       | The `onObserverError` member uses the `((error: unknown) => void) \| undefined` contract.                                                                                                | —                                                                                   |

## Parameters [#parameters]

This declaration has no public members.

## Returns [#returns]

This declaration does not return a value.

## Throws [#throws]

No thrown errors are documented for this declaration.

## Related types [#related-types]

* [`PersistedWorkflow`](/tuil/docs/reference/packages/workflow/api/persisted-workflow)
* [`WorkflowContext`](/tuil/docs/reference/packages/workflow/api/workflow-context)
* [`WorkflowEvent`](/tuil/docs/reference/packages/workflow/api/workflow-event)
* [`WorkflowPersistence`](/tuil/docs/reference/packages/workflow/api/workflow-persistence)
* [`WorkflowStep`](/tuil/docs/reference/packages/workflow/api/workflow-step)
* [`WorkflowTransition`](/tuil/docs/reference/packages/workflow/api/workflow-transition)

## Source [#source]

[View the secondary source reference](https://github.com/mwillbanks/tuil/blob/main/packages/workflow/src/index.ts)

## Package [#package]

[@mwillbanks/tuil-workflow](/tuil/docs/reference/packages/workflow)
