---
title: "Save & publish flows"
description: "Save flows as drafts and publish them to users"
---

The [Flow Builder](adapty-flow-builder) separates saving from publishing. Drafts preserve your work in the Adapty Dashboard, and publishing makes the current version available to users through the SDK. This article covers both actions and when to use each.

## Save a flow as a draft

:::warning
An invalid [Remote Config](customize-flow-with-remote-config) prevents you from saving the draft.
:::

The Flow Builder autosaves your progress once a minute.

To save a draft manually, click **Save draft** in the top right of the Flow Builder, or press **Cmd/Ctrl + S**.

Drafts are private to the Dashboard. They don't change what users see in your app, even if the flow is already assigned to a [placement](placements).

## Publish a flow

Publishing makes the current version of your flow available to users through the SDK. Once published, the new version replaces any previously published version of the same flow.

:::note
To add a flow to a [placement](placements), publish it first. A flow in Draft status can't be added.
:::

To publish your flow, click **Publish to Live** in the top right of the Flow Builder.

What happens next depends on whether the flow is already assigned to a placement:

- **Flow already in a placement**: Users start seeing the new version on their next request to that placement.
- **Flow not in a placement**: Add the flow to a [placement](create-placement) to start showing it to users.

:::tip
A flow is ready to publish once every action, screen, and product element is fully configured. See [Troubleshooting](#troubleshooting) for the common gaps.
:::

:::warning
[Custom fonts](using-custom-fonts-in-flow-builder) don't ship with the flow — you must add each font file to your app bundle. Without the file, users see the system fallback.

To change a font on a published flow without breaking older versions: duplicate the flow, change the font in the copy, and target the copy to an [audience](add-audience-paywall-ab-test) on app versions that include the font.
:::

## Flow status

Each flow shows a status in the Flows list. The status reflects where the flow is in the save and publish lifecycle.

| Status | Meaning |
| :----- | :------ |
| **Draft** | The flow has never been published. Only a draft exists, so users don't see it yet. You need to publish the draft first to add it to a [placement](placements). |
| **Dirty** | The flow was published, but it has saved edits that aren't published yet. Users still see the last published version until you publish again. |
| **Publishing** | A publish is in progress. |
| **Failed** | The last publish attempt failed. Users keep seeing the last published version, if there is one. |
| **Published** | The latest saved version is live. There are no unpublished edits. |
| **Archived** | The flow was deleted. |

## Troubleshooting

You can't publish or preview your flow if any of the following issues are present.

- An interaction with an incomplete configuration. Common cases:
    - An **Open URL** action without a target URL.
    - A **Navigate to screen** action without a destination — also occurs when the destination screen is deleted after the action is set up.
    - A **conditional action** without an operator or value.
    - A **Set Variable** action without a variable/value assignment.
    - A **Purchase** action with no product (in-app store) or no Web Paywall URL (web payment).
    - A **Custom** action without an Action ID.
    - A **Show alert** action with an empty Title or Message.
    - A **Show** or **Hide** action with no element selected.
- A **screen with no elements**.
- A product element **without a product attached** — may occur if you remove the referenced product.
- An invalid **remote config** JSON breaks the entire delivery process — you cannot even save the draft.

Preview your flow in the [Adapty app](paywall-device-compatibility-preview) to catch any issues before publishing. If the flow fails to load in the preview, see the error message for more details.