Skip to main content

Dify App

Dify is made for agentic app building. In Studio, you can quickly build agentic workflows via a drag & drop interface and publish them as apps. You can access published apps via API, the web, or as an MCP server. Dify offers two main app types: Workflow and Chatflow. You will need to choose an app type when creating a new app.
We recommend choosing Workflow or Chatflow your app type. But in addition to these, Dify also offers 3 more basic app types: Chatbot, Agent, and Text Generator.
App Type Selector
These app types run on the same workflow engine underneath, but comes with simpler legacy interfaces:
Chatbot Interface

Workflow

Build Workflow apps to handle single-turn tasks. The webapp interface and API provides easy access to batch execute many tasks at once.
Underneath it all, workflow forms the basis for all other app types in Dify.
Every workflow begins with a start node: either User Input (on-demand, triggered by a user or API call) or a Trigger (automatic, on a schedule or in response to external events).

Chatflow

Chatflow is a special type of workflow app that gets triggered at every turn of a conversation. Other than workflow features, Chatflow comes with the ability to store and update custom conversation-specific variables, enable memory in LLM nodes, and stream formatted text, images, and files at different points throughout the Chatflow run. Chatflows always start with User Input.

Dify DSL

Dify DSL (Domain-Specific Language) is the YAML format Dify uses to describe an app. It covers how the app is built and configured, from its nodes and prompts to its variables and settings, but not data such as its logs or knowledge bases. Exporting an app writes its DSL, and importing it builds the app again. That’s how apps are shared, published as templates, and moved between workspaces or Dify instances. In Dify 1.18.0 and later, exporting an app gives you an app package (.ifpkg), which holds the DSL file together with the files the app needs, such as uploaded icons and the skills and files of Agents. Earlier versions export the DSL file (.yml) on its own.

Variables

A variable is a labeled container to store information, so you can find and use that information later by referencing its name. You’ll come across different types of variables when building a Dify app.

Inputs

You can specify any number of input variables at the User Input node for your app’s end users to fill in.
User Input Node Variables
Additionally, the User Input node comes with a set of input variables that you can reference later in the flow. Depending on the app type (Workflow or Chatflow), different variables are provided.
User inputs are set at the start of each workflow run and cannot be updated.

Outputs

Each node produces one or more outputs that can be referenced in subsequent nodes. For instance, the LLM node has outputs:
LLM Node Output Variables
Like inputs, node outputs cannot be updated either.

Environment Variables

The environment variables you add while building a Workflow or Chatflow hold values for the whole app. Use one for a value that several nodes share, or that should differ between copies of the app, such as the API endpoint of a test or production system. For secrets like API keys, use the Secret type: their values stay out of an export unless you choose to include them.

Conversation Variables

Conversation variables exist in Chatflow only. They keep their values across the turns of one conversation, so you can store information that changes as it goes, like a to-do list or token cost. You can update the value of a conversation variable via the Variable Assigner node:
Conversation Variables Panel

Variable Referencing

You can easily pass variables to any node when configuring its input field by selecting from a dropdown:
Variable Picker Dropdown
You can also insert variable values into complex text inputs by typing / slash, and selecting the desired variable from the dropdown.
Variable Slash Insert
Last modified on October 23, 2026