dify/web
2026-03-04 14:28:06 +08:00
..
__mocks__ feat: Human Input Node (#32060) 2026-02-09 14:57:23 +08:00
__tests__ feat(web): add base AlertDialog with app-card migration example (#32933) 2026-03-04 13:56:27 +08:00
.husky chore: update TypeScript type-check command and add native-preview dependency for faster performance (#29179) 2025-12-05 14:42:37 +08:00
.storybook chore: update to story book nextjs-vite (#31536) 2026-01-26 17:07:20 +08:00
.vscode chore: init tsslint (#31209) 2026-01-20 11:08:50 +08:00
app feat(web): add base AlertDialog with app-card migration example (#32933) 2026-03-04 13:56:27 +08:00
assets feat: introduce trigger functionality (#27644) 2025-11-12 17:59:37 +08:00
bin refactor(web): migrate to Vitest and esm (#29974) 2025-12-22 16:35:22 +08:00
config chore: fix load env and treeshaking for vinext (#32928) 2026-03-04 10:07:29 +08:00
constants fix: check and update doc links (#30849) 2026-01-21 16:31:48 +08:00
context refactor(web): migrate document list query state to nuqs (#32339) 2026-03-03 18:29:23 +08:00
contract feat(web): add base AlertDialog with app-card migration example (#32933) 2026-03-04 13:56:27 +08:00
docker chore(web): remove PM2 process manager (#30252) 2026-03-01 19:31:45 +08:00
docs feat(web): add base AlertDialog with app-card migration example (#32933) 2026-03-04 13:56:27 +08:00
eslint-rules chore: introduce css icons (#32004) 2026-02-09 18:37:41 +08:00
hooks refactor(web): migrate document list query state to nuqs (#32339) 2026-03-03 18:29:23 +08:00
i18n fix(i18n): fix critical errors and overhaul Persian (fa-IR) translations in workflow.json (#32342) 2026-02-16 20:27:25 +08:00
i18n-config refactor: do not import i18n resource json to split chunk (#32947) 2026-03-04 14:28:06 +08:00
models feat: Human Input Node (#32060) 2026-02-09 14:57:23 +08:00
public feat(web): migrate PWA to Serwist (#30808) 2026-01-10 17:16:18 +09:00
scripts refactor(web): replace String.match() with RegExp.exec() for non-global regex (#32386) 2026-02-18 17:46:38 +09:00
service feat(web): add base AlertDialog with app-card migration example (#32933) 2026-03-04 13:56:27 +08:00
test refactor(web): migrate document list query state to nuqs (#32339) 2026-03-03 18:29:23 +08:00
themes style: update banner item styles and enhance dark/light theme variables (#32111) 2026-02-09 15:32:40 +08:00
types fix: remove explore context and migrate query to orpc contract (#32320) 2026-02-14 16:18:26 +08:00
utils refactor(web): replace String.match() with RegExp.exec() for non-global regex (#32386) 2026-02-18 17:46:38 +09:00
.dockerignore chore: update dockerignore (#30460) 2026-01-05 10:55:14 +08:00
.env.example fix: entrypoint.sh overrides NEXT_PUBLIC_TEXT_GENERATION_TIMEOUT_MS when TEXT_GENERATION_TIMEOUT_MS is unset (#30864) (#30865) 2026-01-13 10:12:51 +08:00
.gitignore chore: no custom lint cache location (#31195) 2026-01-19 10:37:49 +08:00
.npmrc chore(web): remove version prefixes from package.json (#31286) 2026-01-20 21:14:50 +08:00
.nvmrc fix: downgrade node version to 22 (#32897) 2026-03-03 16:00:56 +08:00
AGENTS.md docs: relocate frontend docs for agents and human (#31714) 2026-01-29 17:58:10 +08:00
CLAUDE.md test: add comprehensive tests for CustomizeModal component (#29709) 2025-12-16 14:21:05 +08:00
Dockerfile fix: downgrade node version to 22 (#32897) 2026-03-03 16:00:56 +08:00
env.ts chore: fix load env and treeshaking for vinext (#32928) 2026-03-04 10:07:29 +08:00
eslint-suppressions.json feat(web): add base AlertDialog with app-card migration example (#32933) 2026-03-04 13:56:27 +08:00
eslint.config.mjs feat(web): add base AlertDialog with app-card migration example (#32933) 2026-03-04 13:56:27 +08:00
eslint.constants.mjs feat(web): overlay migration guardrails + Base UI primitives (#32824) 2026-03-03 16:56:13 +08:00
global.d.ts feat: integrate Google Analytics event tracking and update CSP for script sources (#30365) 2025-12-30 18:06:47 +08:00
knip.config.ts feat(web): migrate PWA to Serwist (#30808) 2026-01-10 17:16:18 +09:00
next.config.ts chore: fix load env and treeshaking for vinext (#32928) 2026-03-04 10:07:29 +08:00
package.json chore: fix load env and treeshaking for vinext (#32928) 2026-03-04 10:07:29 +08:00
pnpm-lock.yaml chore: fix load env and treeshaking for vinext (#32928) 2026-03-04 10:07:29 +08:00
postcss.config.js refactor(web): migrate to Vitest and esm (#29974) 2025-12-22 16:35:22 +08:00
proxy.ts chore: fix load env and treeshaking for vinext (#32928) 2026-03-04 10:07:29 +08:00
README.md chore(web): remove PM2 process manager (#30252) 2026-03-01 19:31:45 +08:00
tailwind-common-config.ts chore: add vinext as dev server (#32559) 2026-03-01 09:54:39 +08:00
tailwind-css-plugin.ts refactor: import component css in globals.css (#32180) 2026-02-10 13:55:42 +08:00
tailwind.config.js build: bump NextJS from to 16 with turbopack enable for web production build boost (#27014) 2026-01-21 12:53:29 +08:00
tsconfig.json feat: frontend part of support try apps (#31287) 2026-01-22 18:16:37 +08:00
tsslint.config.ts fix: enforce no-leaked-conditional-rendering as error and fix violations (#31262) 2026-01-20 23:08:59 +08:00
typography.js refactor(web): migrate to Vitest and esm (#29974) 2025-12-22 16:35:22 +08:00
vite.config.ts chore: fix load env and treeshaking for vinext (#32928) 2026-03-04 10:07:29 +08:00
vitest.setup.ts test: add unit tests for base chat components (#32249) 2026-02-14 12:50:27 +08:00

Dify Frontend

This is a Next.js project bootstrapped with create-next-app.

Getting Started

Run by source code

Before starting the web frontend service, please make sure the following environment is ready.

Tip

It is recommended to install and enable Corepack to manage package manager versions automatically:

npm install -g corepack
corepack enable

Learn more: Corepack

First, install the dependencies:

pnpm install

Then, configure the environment variables. Create a file named .env.local in the current directory and copy the contents from .env.example. Modify the values of these environment variables according to your requirements:

cp .env.example .env.local
# For production release, change this to PRODUCTION
NEXT_PUBLIC_DEPLOY_ENV=DEVELOPMENT
# The deployment edition, SELF_HOSTED
NEXT_PUBLIC_EDITION=SELF_HOSTED
# The base URL of console application, refers to the Console base URL of WEB service if console domain is
# different from api or web app domain.
# example: http://cloud.dify.ai/console/api
NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api
NEXT_PUBLIC_COOKIE_DOMAIN=
# The URL for Web APP, refers to the Web App base URL of WEB service if web app domain is different from
# console or api domain.
# example: http://udify.app/api
NEXT_PUBLIC_PUBLIC_API_PREFIX=http://localhost:5001/api

# SENTRY
NEXT_PUBLIC_SENTRY_DSN=

Important

  1. When the frontend and backend run on different subdomains, set NEXT_PUBLIC_COOKIE_DOMAIN=1. The frontend and backend must be under the same top-level domain in order to share authentication cookies.
  2. It's necessary to set NEXT_PUBLIC_API_PREFIX and NEXT_PUBLIC_PUBLIC_API_PREFIX to the correct backend API URL.

Finally, run the development server:

pnpm run dev

Open http://localhost:3000 with your browser to see the result.

You can start editing the file under folder app. The page auto-updates as you edit the file.

Deploy

Deploy on server

First, build the app for production:

pnpm run build

Then, start the server:

pnpm run start

If you want to customize the host and port:

pnpm run start --port=3001 --host=0.0.0.0

Storybook

This project uses Storybook for UI component development.

To start the storybook server, run:

pnpm storybook

Open http://localhost:6006 with your browser to see the result.

Lint Code

If your IDE is VSCode, rename web/.vscode/settings.example.json to web/.vscode/settings.json for lint code setting.

Then follow the Lint Documentation to lint the code.

Test

We use Vitest and React Testing Library for Unit Testing.

📖 Complete Testing Guide: See web/testing/testing.md for detailed testing specifications, best practices, and examples.

Run test:

pnpm test

Example Code

If you are not familiar with writing tests, refer to:

Analyze Component Complexity

Before writing tests, use the script to analyze component complexity:

pnpm analyze-component app/components/your-component/index.tsx

This will help you determine the testing strategy. See web/testing/testing.md for details.

Documentation

Visit https://docs.dify.ai to view the full documentation.

Community

The Dify community can be found on Discord community, where you can ask questions, voice ideas, and share your projects.