# Workflows

{% hint style="info" %}
This is the short-form technical core reference entry for workflows. If you are unfamiliar with how workflows work we recommend exploring the article series below to learn more:

User manual article series: [Workflows](/~/revisions/cityQ1wuAKUIdbGUZo4Q/help-guides/logic/workflows.md)
{% endhint %}

Bubble operates on a workflow-centric programming model. Workflows dictate the app's response to user interactions.

Each workflow consists of a triggering event and a subsequent sequence of actions. For instance, a workflow might be set up such that when the *Signup* button is clicked, it registers the user, dispatches an email, and then navigates to a different page.

Workflows are tied to individual pages within the app and can be managed under the *Workflow Tab*. If an action produces output, it can be referenced as 'Result of previous step.'

The following section details all the events and actions available within Bubble.

### Condition

There may be times when a workflow or action should only execute under certain conditions[^1]. This might be when a user is logged in, a checkbox is selected, or if the user's email belongs to a specific domain.

To cater to these scenarios, you can attach a condition to the event. Conditions consist of [dynamic expressions](#user-content-fn-2)[^2] that return a [*yes* or *no*](#user-content-fn-3)[^3]. For actions, if the condition is not satisfied, that specific action will be bypassed, but subsequent actions will continue, albeit without data from the skipped action.

{% hint style="warning" %}
**Note:** When creating a workflow involving Rich Text, be careful when also using the "Text/Button ... is pressed" conditional statement on the same Rich Text - the two can interfere. As a workaround, consider adding a transparent shape on top and making that the source of the on click workflows.
{% endhint %}

### Element

Choose the element that the event/action applies to.

### Workflow folder

Assign a workflow/event to a folder for clarity in the app. Create a new folder by selecting the 'Create a new folder…' entry at the bottom of this dropdown menu or from the Workflow folders section in the Palette.

{% hint style="success" %}
**Tip:** To display the workflow folders, from the Workflow Tab, click the arrow in the long vertical area to the right of the Tab section in the Palette.
{% endhint %}

### Event color

Select a color for the event. This organizes workflows when the app becomes more complex. This color only appears in Development mode.

### Add a breakpoint in debug mode

When using the debugger, instead of using the step-by-step mode for all workflows, specify specific events or actions that should pause. Checking this box allows this. This option has no effect on the app when the debugger isn't present. Similarly, when users are using the app, this will not be applied.

### Disable workflow

Occasionally, when debugging, you may want to disable a workflow without getting rid of it. This could allow you to test specific pieces of functionality without consequent workflows getting in the way, or to modify an existing workflow while keeping a copy of the version that is already working for future reference.

## Other ways to learn

<details>

<summary>User manual articles</summary>

#### Workflows

For a more in-depth look at how workflows work, check out the article series below. This covers how to combine events and actions to make your app respond to user interaction

Article series: [Workflows](/~/revisions/cityQ1wuAKUIdbGUZo4Q/help-guides/logic/workflows.md)

#### Conditions

Conditions are used to determine whether a workflow or action should run or not, by checking whether something is true. The article below covers how they work.

Article: [Conditions](/~/revisions/cityQ1wuAKUIdbGUZo4Q/help-guides/logic/conditions.md)

#### Dynamic expressions

Dynamic expressions are used both to set up conditions, and are highly useful in different actions that you may want to add to your workflows. If you are unfamiliar with this subject, we recommend reading through the guide below:

Article: [Dynamic expressions](/~/revisions/cityQ1wuAKUIdbGUZo4Q/help-guides/logic/dynamic-expressions.md)

#### Debugging

All apps have the occasional bug, and our debugging tools help you squish them efficiently. The debugger helps you go through workflows step by step to see how they perform and the values they return.

Article series: [Debugging your application](/~/revisions/cityQ1wuAKUIdbGUZo4Q/help-guides/maintaining-an-application/testing-and-debugging/using-the-debugger.md)

</details>

<details>

<summary>Video lessons</summary>

* [The Workflow Tab: Bubble Introduction Series \[4/10\]](https://www.youtube.com/watch?v=jbzl8EaAk_g)

</details>

[^1]: *Conditions*, or *conditional* [*expressions*](#user-content-fn-4)\[^4]*,* let you set up mechanisms that check whether a specific question returns a *yes* or a *no* answer and then take an action, stop an action or make a change in your app in response.\ <br>

    User manual article: [Conditions](/~/revisions/cityQ1wuAKUIdbGUZo4Q/help-guides/logic/conditions.md)

    User manual article: [Dynamic expressions](/~/revisions/cityQ1wuAKUIdbGUZo4Q/help-guides/logic/dynamic-expressions.md) &#x20;

[^2]: *Dynamic expressions* are like "live" formulas that update in real-time based on user input, database updates and other changes in your app.\ <br>

    User manual article: [Dynamic expressions](/~/revisions/cityQ1wuAKUIdbGUZo4Q/help-guides/logic/dynamic-expressions.md)

    &#x20;

[^3]: If you come from a programming background, this is Bubble's terminology for *true* or *false*.  &#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://manual.bubble.io/~/revisions/cityQ1wuAKUIdbGUZo4Q/core-resources/workflows.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
