2023-05-15 00:51:32 +00:00
# Dify Backend API
2026-01-24 02:20:47 +00:00
## Setup and Run
2023-05-15 00:51:32 +00:00
2024-06-21 18:05:50 +00:00
> [!IMPORTANT]
2025-08-20 05:49:11 +00:00
>
2025-04-15 08:16:49 +00:00
> In the v1.3.0 release, `poetry` has been replaced with
> [`uv`](https://docs.astral.sh/uv/) as the package manager
> for Dify API backend service.
2024-06-21 18:05:50 +00:00
2026-01-24 02:20:47 +00:00
`uv` and `pnpm` are required to run the setup and development commands below.
2023-05-15 00:51:32 +00:00
2026-01-24 02:20:47 +00:00
### Using scripts (recommended)
The scripts resolve paths relative to their location, so you can run them from anywhere.
1. Run setup (copies env files and installs dependencies).
2024-03-11 06:16:31 +00:00
2023-05-15 00:51:32 +00:00
```bash
2026-01-24 02:20:47 +00:00
./dev/setup
2023-05-15 00:51:32 +00:00
```
2024-06-18 10:33:22 +00:00
2026-01-24 02:20:47 +00:00
1. Review `api/.env` , `web/.env.local` , and `docker/middleware.env` values (see the `SECRET_KEY` note below).
1. Start middleware (PostgreSQL/Redis/Weaviate).
2024-11-21 02:34:23 +00:00
2026-01-24 02:20:47 +00:00
```bash
./dev/start-docker-compose
2024-11-21 02:34:23 +00:00
```
2025-08-20 05:49:11 +00:00
2026-01-24 02:20:47 +00:00
1. Start backend (runs migrations first).
```bash
./dev/start-api
```
1. Start Dify [web ](../web ) service.
2025-11-18 09:29:54 +00:00
2026-01-24 02:20:47 +00:00
```bash
./dev/start-web
```
1. Set up your application by visiting `http://localhost:3000` .
1. Optional: start the worker service (async tasks, runs from `api` ).
```bash
./dev/start-worker
```
2023-05-15 00:51:32 +00:00
2026-01-24 02:20:47 +00:00
1. Optional: start Celery Beat (scheduled tasks).
2025-08-20 05:49:11 +00:00
2026-01-24 02:20:47 +00:00
```bash
./dev/start-beat
2023-05-15 00:51:32 +00:00
```
2025-08-20 05:49:11 +00:00
2026-01-24 02:20:47 +00:00
### Manual commands
< details >
< summary > Show manual setup and run steps< / summary >
These commands assume you start from the repository root.
1. Start the docker-compose stack.
The backend requires middleware, including PostgreSQL, Redis, and Weaviate, which can be started together using `docker-compose` .
2025-08-20 05:49:11 +00:00
2026-01-24 02:20:47 +00:00
```bash
cp docker/middleware.env.example docker/middleware.env
# Use mysql or another vector database profile if you are not using postgres/weaviate.
docker compose -f docker/docker-compose.middleware.yaml --profile postgresql --profile weaviate -p dify up -d
2024-06-18 10:33:22 +00:00
```
2026-01-24 02:20:47 +00:00
1. Copy env files.
```bash
cp api/.env.example api/.env
cp web/.env.example web/.env.local
```
2024-06-14 14:31:01 +00:00
2026-01-24 02:20:47 +00:00
1. Install UV if needed.
2025-02-08 12:36:33 +00:00
```bash
2025-04-15 08:16:49 +00:00
pip install uv
# Or on macOS
brew install uv
2025-02-08 12:36:33 +00:00
```
2024-06-14 14:31:01 +00:00
2026-01-24 02:20:47 +00:00
1. Install API dependencies.
2024-06-18 10:33:22 +00:00
2024-06-18 10:21:45 +00:00
```bash
2026-01-24 02:20:47 +00:00
cd api
uv sync --group dev
2024-06-11 05:11:28 +00:00
```
2024-06-18 10:33:22 +00:00
2026-01-24 02:20:47 +00:00
1. Install web dependencies.
```bash
cd web
pnpm install
cd ..
```
2023-05-15 00:51:32 +00:00
2026-01-24 02:20:47 +00:00
1. Start backend (runs migrations first, in a new terminal).
2024-06-18 10:33:22 +00:00
2024-06-14 14:31:01 +00:00
```bash
2026-01-24 02:20:47 +00:00
cd api
2025-04-15 08:16:49 +00:00
uv run flask db upgrade
2026-01-24 02:20:47 +00:00
uv run flask run --host 0.0.0.0 --port=5001 --debug
2024-06-14 14:31:01 +00:00
```
2023-05-15 00:51:32 +00:00
2026-01-24 02:20:47 +00:00
1. Start Dify [web ](../web ) service (in a new terminal).
2024-06-18 10:33:22 +00:00
2023-05-15 00:51:32 +00:00
```bash
2026-01-24 02:20:47 +00:00
cd web
pnpm dev:inspect
2023-05-15 00:51:32 +00:00
```
2023-08-13 09:32:23 +00:00
2026-01-24 02:20:47 +00:00
1. Set up your application by visiting `http://localhost:3000` .
1. Optional: start the worker service (async tasks, in a new terminal).
```bash
cd api
2026-02-06 08:25:27 +00:00
uv run celery -A app.celery worker -P threads -c 2 --loglevel INFO -Q api_token,dataset,priority_dataset,priority_pipeline,pipeline,mail,ops_trace,app_deletion,plugin,workflow_storage,conversation,workflow,schedule_poller,schedule_executor,triggered_workflow_dispatcher,trigger_refresh_executor,retention
2026-01-24 02:20:47 +00:00
```
1. Optional: start Celery Beat (scheduled tasks, in a new terminal).
```bash
cd api
uv run celery -A app.celery beat
```
< / details >
### Environment notes
> [!IMPORTANT]
>
> When the frontend and backend run on different subdomains, set COOKIE_DOMAIN to the site’ s top-level domain (e.g., `example.com`). The frontend and backend must be under the same top-level domain in order to share authentication cookies.
2023-08-13 09:32:23 +00:00
2026-01-24 02:20:47 +00:00
- Generate a `SECRET_KEY` in the `.env` file.
2025-07-23 07:33:39 +00:00
2026-01-24 02:20:47 +00:00
bash for Linux
2025-08-20 05:49:11 +00:00
2026-01-24 02:20:47 +00:00
```bash
sed -i "/^SECRET_KEY=/c\\SECRET_KEY=$(openssl rand -base64 42)" .env
```
2025-08-20 05:49:11 +00:00
2026-01-24 02:20:47 +00:00
bash for Mac
2025-08-20 05:49:11 +00:00
2026-01-24 02:20:47 +00:00
```bash
secret_key=$(openssl rand -base64 42)
sed -i '' "/^SECRET_KEY=/c\\
SECRET_KEY=${secret_key}" .env
```
2024-06-14 14:31:01 +00:00
## Testing
1. Install dependencies for both the backend and the test environment
2024-06-18 10:33:22 +00:00
2024-06-14 14:31:01 +00:00
```bash
2026-01-24 02:20:47 +00:00
cd api
uv sync --group dev
2024-06-18 10:33:22 +00:00
```
2025-08-25 03:14:04 +00:00
1. Run the tests locally with mocked system environment variables in `tool.pytest_env` section in `pyproject.toml` , more can check [Claude.md ](../CLAUDE.md )
2024-06-18 10:33:22 +00:00
2025-08-26 04:57:26 +00:00
```bash
2026-01-24 02:20:47 +00:00
cd api
2025-08-26 04:57:26 +00:00
uv run pytest # Run all tests
uv run pytest tests/unit_tests/ # Unit tests only
uv run pytest tests/integration_tests/ # Integration tests
2025-08-25 03:14:04 +00:00
# Code quality
2026-01-24 02:20:47 +00:00
./dev/reformat # Run all formatters and linters
uv run ruff check --fix ./ # Fix linting issues
uv run ruff format ./ # Format code
uv run basedpyright . # Type checking
2023-08-13 09:32:23 +00:00
```