dify/api
2026-01-22 13:53:45 +08:00
..
.idea
.vscode
agent-notes/core feat: parallelize asset packing 2026-01-21 16:23:44 +08:00
bin feat(skill): skill support 2026-01-20 03:02:34 +08:00
configs Merge remote-tracking branch 'origin/main' into feat/support-agent-sandbox 2026-01-21 14:52:11 +08:00
constants
context feat: workflow support register context and read context (#31265) 2026-01-21 14:31:47 +08:00
contexts
controllers refactor: rename mention node to nested_node for generic sub-graph support 2026-01-22 13:15:13 +08:00
core feat(skill-builder): enhance skill loading and compilation with parallel processing 2026-01-22 13:41:21 +08:00
docker
enums
events
extensions feat(sandbox): draft storage 2026-01-20 18:45:13 +08:00
factories
fields
libs
migrations feat(sandbox_provider): add default sandbox provider for CE 2026-01-21 00:37:38 +08:00
models feat(sandbox): draft storage 2026-01-20 18:45:13 +08:00
repositories
schedule feat: add lock for retention jobs (#31320) 2026-01-21 14:06:35 +08:00
services fix: workflow publish 2026-01-22 13:53:45 +08:00
tasks refactor: use session factory instead of call db.session directly (#31198) 2026-01-21 13:43:06 +08:00
templates refactor: make url in email template more better (#31166) 2026-01-19 14:28:41 +08:00
tests feat(skill-compiler): skill compiler 2026-01-22 13:41:21 +08:00
.dockerignore
.env.example Merge remote-tracking branch 'origin/main' into feat/support-agent-sandbox 2026-01-21 14:52:11 +08:00
.importlinter
.ruff.toml
AGENTS.md
app_factory.py
app.py
celery_entrypoint.py
cnt_base.sh
commands.py refactor: consolidate sandbox management and initialization 2026-01-21 20:42:44 +08:00
dify_app.py
Dockerfile
gunicorn.conf.py
pyproject.toml
pyrefly.toml
pyrightconfig.json
pytest.ini
README.md
ty.toml
uv.lock

Dify Backend API

Usage

Important

In the v1.3.0 release, poetry has been replaced with uv as the package manager for Dify API backend service.

  1. Start the docker-compose stack

    The backend require some middleware, including PostgreSQL, Redis, and Weaviate, which can be started together using docker-compose.

    cd ../docker
    cp middleware.env.example middleware.env
    # change the profile to mysql if you are not using postgres,change the profile to other vector database if you are not using weaviate
    docker compose -f docker-compose.middleware.yaml --profile postgresql --profile weaviate -p dify up -d
    cd ../api
    
  2. Copy .env.example to .env

    cp .env.example .env
    

Important

When the frontend and backend run on different subdomains, set COOKIE_DOMAIN to the sites 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.

  1. Generate a SECRET_KEY in the .env file.

    bash for Linux

    sed -i "/^SECRET_KEY=/c\SECRET_KEY=$(openssl rand -base64 42)" .env
    

    bash for Mac

    secret_key=$(openssl rand -base64 42)
    sed -i '' "/^SECRET_KEY=/c\\
    SECRET_KEY=${secret_key}" .env
    
  2. Create environment.

    Dify API service uses UV to manage dependencies. First, you need to add the uv package manager, if you don't have it already.

    pip install uv
    # Or on macOS
    brew install uv
    
  3. Install dependencies

    uv sync --dev
    
  4. Run migrate

    Before the first launch, migrate the database to the latest version.

    uv run flask db upgrade
    
  5. Start backend

    uv run flask run --host 0.0.0.0 --port=5001 --debug
    
  6. Start Dify web service.

  7. Setup your application by visiting http://localhost:3000.

  8. If you need to handle and debug the async tasks (e.g. dataset importing and documents indexing), please start the worker service.

uv run celery -A app.celery worker -P threads -c 2 --loglevel INFO -Q 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

Additionally, if you want to debug the celery scheduled tasks, you can run the following command in another terminal to start the beat service:

uv run celery -A app.celery beat

Testing

  1. Install dependencies for both the backend and the test environment

    uv sync --dev
    
  2. Run the tests locally with mocked system environment variables in tool.pytest_env section in pyproject.toml, more can check Claude.md

    uv run pytest                           # Run all tests
    uv run pytest tests/unit_tests/         # Unit tests only
    uv run pytest tests/integration_tests/  # Integration tests
    
    # Code quality
    ../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