> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cognite.com/llms.txt
> Use this file to discover all available pages before exploring further.

# About the Flows custom app lifecycle

> Understand how versions of a Flows custom app move through Draft and Published states, and how the active version determines what users see in Cognite Data Fusion.

This article explains how **Draft** and **Published** states apply to each deployed version of a Flows custom app, and how the **active version** determines what users see on the **Custom apps** page in Cognite Data Fusion (CDF).

Every version of a Flows custom app has a **lifecycle state** that controls whether it can be modified. Separately, an app has at most one **active version** — the build users run when they open the app from **Custom apps**.

## Version states

Each app version is always in one of two states — **Draft** or **Published**. The state controls whether you can change its files and how you promote that build for users.

### Draft

A version starts as **Draft** after you run `apps deploy`. Draft versions:

* Are **mutable** — you can redeploy to update files, change the entry point, or iterate freely.
* Can be **shared via a direct link**.
* Are **not the active version** until you explicitly activate them.

### Published

To transition a version from **Draft** to **Published**, run `apps publish`. Published versions:

* Are **immutable** — files and configuration are locked and cannot be changed.
* Can be **shared via a direct link**.
* Can be set as the **active version** for the app.

The transition from **Draft** to **Published** is irreversible. To make changes, deploy a new version.

## Active version

An app has **zero or one active version** at any time. If no version is active, the app does not appear on the **Custom apps** page in CDF. Once you activate a version:

* The app becomes visible on the **Custom apps** page, and the activated version is what users open.
* It is the version served when no specific version is requested in the URL.

Setting a version as active automatically replaces the previous active version. Rollback is instant — activating any previously published version takes effect immediately with no file operations.

## CLI commands

```bash theme={"languages":{"custom":["/_languages/kuiper.json","../_languages/kuiper.json"]}}
# Deploy (creates or updates a Draft version)
npx @cognite/cli@latest apps deploy --interactive

# Publish (Draft → Published, makes the version immutable)
npx @cognite/cli@latest apps publish --interactive

# Activate (publishes if needed, then sets as the active version)
npx @cognite/cli@latest apps activate --interactive

# Check current state
npx @cognite/cli@latest apps status --interactive
```

`apps activate` combines **publish** and **activate** in one step. Use it when you're ready to ship directly without a separate review.

## Typical workflow

```
deploy > (share draft link for review) > publish > activate
```

To ship directly without a review:

```
deploy > activate
```

## Further reading

* [Deploy your Flows custom app](/cdf/flows/guides/deploying) — Interactive and CI/CD deployment options.
* [Run your Flows custom app locally](/cdf/flows/guides/running-locally) — Dev server and local development.
