Implementation:Langgenius Dify Frontend Config
| Knowledge Sources | |
|---|---|
| Domains | Frontend, Configuration |
| Last Updated | 2026-02-12 07:00 GMT |
Overview
Central frontend configuration module that exports API endpoints, edition flags, default model/agent/dataset settings, regex patterns, and environment-driven feature flags for the Dify web application.
Description
The web/config/index.ts module serves as the single source of truth for all frontend configuration values in the Dify Next.js application. It reads environment variables through a typed env object (powered by @t3-oss/env-nextjs) and provides sensible defaults via the getStringConfig helper function, ensuring the application can run in both development and production environments without mandatory environment variable setup.
The module organizes configuration into several categories: API endpoint prefixes (API_PREFIX, PUBLIC_API_PREFIX, MARKETPLACE_API_PREFIX), edition detection flags (IS_CE_EDITION, IS_CLOUD_EDITION), LLM parameter presets (TONE_LIST with Creative/Balanced/Precise/Custom profiles), prompt templates (DEFAULT_CHAT_PROMPT_CONFIG, DEFAULT_COMPLETION_PROMPT_CONFIG, DEFAULT_AGENT_PROMPT), security tokens (CSRF_COOKIE_NAME, CSRF_HEADER_NAME, ACCESS_TOKEN_LOCAL_STORAGE_NAME), validation patterns (VAR_REGEX, emailRegex, validPassword), and feature toggles for dataset defaults, agent settings, and various UI capabilities.
This configuration is imported throughout the frontend codebase by components, hooks, and service layers that need to determine API routing, validate user input, configure model parameters, or check edition-specific feature availability.
Usage
Import specific configuration values from @/config whenever a component or service needs to reference API endpoints, check the current edition, apply default model settings, validate input against regex patterns, or read environment-driven feature flags. The module is designed to be tree-shaken so only referenced exports are included in the production bundle.
Code Reference
Source Location
- Repository: Langgenius_Dify
- File: web/config/index.ts
- Lines: 1-376
Signature
export const API_PREFIX: string
export const PUBLIC_API_PREFIX: string
export const MARKETPLACE_API_PREFIX: string
export const MARKETPLACE_URL_PREFIX: string
export const IS_CE_EDITION: boolean
export const IS_CLOUD_EDITION: boolean
export const IS_DEV: boolean
export const IS_PROD: boolean
export const TONE_LIST: readonly [
{ id: 1; name: 'Creative'; config: { temperature: 0.8; top_p: 0.9; ... } },
{ id: 2; name: 'Balanced'; config: { temperature: 0.5; top_p: 0.85; ... } },
{ id: 3; name: 'Precise'; config: { temperature: 0.2; top_p: 0.75; ... } },
{ id: 4; name: 'Custom'; config: undefined },
]
export const DEFAULT_CHAT_PROMPT_CONFIG: { prompt: [{ role: PromptRole.system; text: string }] }
export const DEFAULT_COMPLETION_PROMPT_CONFIG: { prompt: { text: string }; conversation_histories_role: { ... } }
export const getMaxToken: (modelId: string) => number
export const LOCALE_COOKIE_NAME: string
export const CSRF_COOKIE_NAME: () => string
export const CSRF_HEADER_NAME: string
export const VAR_REGEX: RegExp
export const DEFAULT_AGENT_SETTING: { enabled: boolean; max_iteration: number; strategy: AgentStrategy; tools: [] }
export const DEFAULT_AGENT_PROMPT: { chat: string; completion: string }
export const DATASET_DEFAULT: { top_k: number; score_threshold: number }
export const STOP_PARAMETER_RULE: ModelParameterRule
Import
import {
API_PREFIX,
PUBLIC_API_PREFIX,
IS_CE_EDITION,
IS_CLOUD_EDITION,
TONE_LIST,
DEFAULT_AGENT_SETTING,
DATASET_DEFAULT,
VAR_REGEX,
CSRF_COOKIE_NAME,
} from '@/config'
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| env.NEXT_PUBLIC_API_PREFIX | string | No | API console prefix URL; defaults to http://localhost:5001/console/api
|
| env.NEXT_PUBLIC_PUBLIC_API_PREFIX | string | No | Public API prefix URL; defaults to http://localhost:5001/api
|
| env.NEXT_PUBLIC_MARKETPLACE_API_PREFIX | string | No | Marketplace API prefix URL; defaults to http://localhost:5002/api
|
| env.NEXT_PUBLIC_EDITION | string | No | Edition identifier: SELF_HOSTED or CLOUD
|
| env.NEXT_PUBLIC_CSP_WHITELIST | string | No | Content Security Policy whitelist domains |
| env.NEXT_PUBLIC_COOKIE_DOMAIN | string | No | Cookie domain for CSRF token naming strategy |
| env.NEXT_PUBLIC_MAX_TOOLS_NUM | number | No | Maximum number of tools allowed in agent configuration |
| env.NEXT_PUBLIC_MAX_PARALLEL_LIMIT | number | No | Maximum parallel execution limit for workflow nodes |
| modelId | string | Yes (for getMaxToken) | Model identifier string to determine max token count |
Outputs
| Name | Type | Description |
|---|---|---|
| API_PREFIX | string | Resolved console API endpoint URL |
| PUBLIC_API_PREFIX | string | Resolved public API endpoint URL |
| IS_CE_EDITION | boolean | True when running the Community (self-hosted) edition |
| IS_CLOUD_EDITION | boolean | True when running the Cloud edition |
| TONE_LIST | readonly array | Four preset tone configurations for LLM parameter tuning |
| CSRF_COOKIE_NAME() | string | Returns the appropriate CSRF cookie name based on protocol security |
| getMaxToken(modelId) | number | Returns 8000 for gpt-4/gpt-3.5-turbo-16k, 4000 otherwise |
| VAR_REGEX | RegExp | Regular expression for matching template variable references |
| DATASET_DEFAULT | object | Default retrieval settings: top_k=4, score_threshold=0.8 |
| DEFAULT_AGENT_SETTING | object | Default agent configuration with function_call strategy |
Usage Examples
Construct an API Request URL
import { API_PREFIX } from '@/config'
const url = `${API_PREFIX}/workspaces`
const response = await fetch(url, { headers: { 'Content-Type': 'application/json' } })
Check Edition for Feature Gating
import { IS_CE_EDITION, IS_CLOUD_EDITION } from '@/config'
if (IS_CLOUD_EDITION) {
// Show billing and subscription features
}
if (IS_CE_EDITION) {
// Show self-hosted configuration options
}
Apply a Tone Preset to Model Parameters
import { TONE_LIST } from '@/config'
const balancedTone = TONE_LIST.find(t => t.name === 'Balanced')
if (balancedTone?.config) {
setModelParams({
temperature: balancedTone.config.temperature,
top_p: balancedTone.config.top_p,
})
}
Validate a Template Variable Reference
import { VAR_REGEX, resetReg } from '@/config'
resetReg()
const matches = promptText.match(VAR_REGEX)
if (matches) {
console.log('Found variable references:', matches)
}