Copy as Markdown[View as Markdown](/docs/sdk/functions/writeFlow.md)

***

# Function: writeFlow()

> **writeFlow**(`directory`): (`flow`, `options`) => `Promise`<`void`>

Defined in: flows.ts:131

Write a flow to EventCatalog.

You can optionally override the path of the flow.

## Parameters[​](#parameters "Direct link to Parameters")

| Parameter   | Type     |
| ----------- | -------- |
| `directory` | `string` |

## Returns[​](#returns "Direct link to Returns")

`Function`

### Parameters[​](#parameters-1 "Direct link to Parameters")

| Parameter                         | Type                                                                                                           |
| --------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `flow`                            | `Flow`                                                                                                         |
| `options`                         | { `format`: `"md"` \| `"mdx"`; `override`: `boolean`; `path`: `string`; `versionExistingContent`: `boolean`; } |
| `options.format`?                 | `"md"` \| `"mdx"`                                                                                              |
| `options.override`?               | `boolean`                                                                                                      |
| `options.path`?                   | `string`                                                                                                       |
| `options.versionExistingContent`? | `boolean`                                                                                                      |

### Returns[​](#returns-1 "Direct link to Returns")

`Promise`<`void`>

## Example[​](#example "Direct link to Example")

```
import utils, { FlowBuilder } from '@eventcatalog/utils';

const { writeFlow } = utils('/path/to/eventcatalog');

// Build a flow using the fluent builder API
const flow = FlowBuilder.create({
  id: 'PaymentFlow',
  name: 'Payment Flow',
  version: '0.0.1',
  summary: 'Business flow for processing payments',
  markdown: '# Payment Flow',
})
  .addMessageStep({
    id: 'PlaceOrder',
    title: 'Place order',
    message: { id: 'PlaceOrder', version: '0.0.1' },
    nextSteps: [{ id: 'PaymentProcessed', label: 'Payment processed' }],
  })
  .addMessageStep({
    id: 'PaymentProcessed',
    title: 'Payment processed',
    message: { id: 'PaymentProcessed', version: '0.0.1' },
  })
  .build();

// Flow would be written to flows/PaymentFlow
await writeFlow(flow);

// You can also write a raw Flow object
await writeFlow({
  id: 'RewardFlow',
  name: 'Reward Flow',
  version: '0.0.1',
  markdown: '# Reward Flow',
  steps: [],
});

// Write a flow to the catalog but override the path
// Flow would be written to flows/Payments/RewardFlow
await writeFlow({
  id: 'RewardFlow',
  name: 'Reward Flow',
  version: '0.0.1',
  markdown: '# Reward Flow',
  steps: [],
}, { path: '/Payments/RewardFlow' });

// Write a flow to the catalog and override the existing content
await writeFlow({
  id: 'RewardFlow',
  name: 'Reward Flow',
  version: '0.0.1',
  markdown: '# Reward Flow',
  steps: [],
}, { override: true });
```
