{
  "manifest_version": "1.0.0",
  "template": {
    "id": "73a4f886-f4f4-4995-aeeb-f792710f7221",
    "slug": "dify-ai",
    "name": "Dify",
    "description": "Visual builder for AI apps, chatbots and document workflows",
    "url": "https://railway.com/deploy/dify-ai",
    "upstream": {
      "repo_url": "https://github.com/gridalpha/dify-railway"
    }
  },
  "services": [
    {
      "name": "api",
      "source": {
        "image": "langgenius/dify-api:1.16.1"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "Redis",
      "source": {
        "image": "redis:8.2"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    },
    {
      "name": "sandbox",
      "source": {
        "image": "langgenius/dify-sandbox:0.2.15"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "worker",
      "source": {
        "image": "langgenius/dify-api:1.16.1"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "proxy",
      "source": {
        "repo": "https://github.com/gridalpha/dify-railway"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "worker-beat",
      "source": {
        "image": "langgenius/dify-api:1.16.1"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "Postgres",
      "source": {
        "image": "ghcr.io/railwayapp-templates/postgres-ssl:18"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/postgresql/data",
      "http": false
    },
    {
      "name": "web",
      "source": {
        "image": "langgenius/dify-web:1.16.1"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "api-websocket",
      "source": {
        "image": "langgenius/dify-api:1.16.1"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "ssrf-proxy",
      "source": {
        "repo": "https://github.com/gridalpha/dify-railway"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "plugin-daemon",
      "source": {
        "image": "langgenius/dify-plugin-daemon:0.6.3-local"
      },
      "needs_volume": true,
      "volume_mount_path": "/app/storage",
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "LANG",
      "service": "api",
      "description": "Locale",
      "secret": false,
      "strategy": "default",
      "default": "C.UTF-8"
    },
    {
      "key": "MODE",
      "service": "api",
      "description": "Run as the API server",
      "secret": false,
      "strategy": "default",
      "default": "api"
    },
    {
      "key": "PORT",
      "service": "api",
      "description": "Health check port",
      "secret": false,
      "strategy": "default",
      "default": "5001"
    },
    {
      "key": "DEBUG",
      "service": "api",
      "description": "Debug mode off",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "LC_ALL",
      "service": "api",
      "description": "Locale",
      "secret": false,
      "strategy": "default",
      "default": "C.UTF-8"
    },
    {
      "key": "LOG_TZ",
      "service": "api",
      "description": "Log timestamp timezone",
      "secret": false,
      "strategy": "default",
      "default": "UTC"
    },
    {
      "key": "DB_HOST",
      "service": "api",
      "description": "Postgres host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_PORT",
      "service": "api",
      "description": "Postgres port",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_TYPE",
      "service": "api",
      "description": "Database engine",
      "secret": false,
      "strategy": "default",
      "default": "postgresql"
    },
    {
      "key": "EDITION",
      "service": "api",
      "description": "Community edition feature set",
      "secret": false,
      "strategy": "default",
      "default": "SELF_HOSTED"
    },
    {
      "key": "REDIS_DB",
      "service": "api",
      "description": "Redis database index",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "DIFY_PORT",
      "service": "api",
      "description": "Application listening port",
      "secret": false,
      "strategy": "default",
      "default": "5001"
    },
    {
      "key": "FILES_URL",
      "service": "api",
      "description": "Public file endpoint base",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "LOG_LEVEL",
      "service": "api",
      "description": "Application log level",
      "secret": false,
      "strategy": "default",
      "default": "INFO"
    },
    {
      "key": "S3_REGION",
      "service": "api",
      "description": "Bucket region",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DEPLOY_ENV",
      "service": "api",
      "description": "Production behaviour",
      "secret": false,
      "strategy": "default",
      "default": "PRODUCTION"
    },
    {
      "key": "REDIS_HOST",
      "service": "api",
      "description": "Redis host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_PORT",
      "service": "api",
      "description": "Redis port",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SECRET_KEY",
      "service": "api",
      "description": "Signs sessions, encrypts provider keys",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "APP_API_URL",
      "service": "api",
      "description": "Web app API base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "APP_WEB_URL",
      "service": "api",
      "description": "Web app base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "DB_DATABASE",
      "service": "api",
      "description": "Application database",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_PASSWORD",
      "service": "api",
      "description": "Postgres password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_USERNAME",
      "service": "api",
      "description": "Postgres user",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "FLASK_DEBUG",
      "service": "api",
      "description": "Flask debug off",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "S3_ENDPOINT",
      "service": "api",
      "description": "Bucket endpoint",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "TRIGGER_URL",
      "service": "api",
      "description": "Workflow trigger base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "STORAGE_TYPE",
      "service": "api",
      "description": "Object storage for uploads",
      "secret": false,
      "strategy": "default",
      "default": "s3"
    },
    {
      "key": "UV_CACHE_DIR",
      "service": "api",
      "description": "Writable dependency cache",
      "secret": false,
      "strategy": "default",
      "default": "/tmp/.uv-cache"
    },
    {
      "key": "VECTOR_STORE",
      "service": "api",
      "description": "Vectors stored in Postgres",
      "secret": false,
      "strategy": "default",
      "default": "pgvector"
    },
    {
      "key": "INIT_PASSWORD",
      "service": "api",
      "description": "Gates the first-run setup screen",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PGVECTOR_HOST",
      "service": "api",
      "description": "pgvector host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGVECTOR_PORT",
      "service": "api",
      "description": "pgvector port",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGVECTOR_USER",
      "service": "api",
      "description": "pgvector user",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_ACCESS_KEY",
      "service": "api",
      "description": "Bucket access key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_SECRET_KEY",
      "service": "api",
      "description": "Bucket secret key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ALLOW_REGISTER",
      "service": "api",
      "description": "Public sign-up disabled",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "CELERY_BACKEND",
      "service": "api",
      "description": "Celery result backend",
      "secret": false,
      "strategy": "default",
      "default": "redis"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "api",
      "description": "Redis password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_USERNAME",
      "service": "api",
      "description": "Redis user",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_BUCKET_NAME",
      "service": "api",
      "description": "Bucket name",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CONSOLE_API_URL",
      "service": "api",
      "description": "Console API base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "CONSOLE_WEB_URL",
      "service": "api",
      "description": "Console base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "ENABLE_AGENT_V2",
      "service": "api",
      "description": "Agent v2 backend not deployed",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "MARKETPLACE_URL",
      "service": "api",
      "description": "Marketplace site",
      "secret": false,
      "strategy": "default",
      "default": "https://marketplace.dify.ai"
    },
    {
      "key": "SERVICE_API_URL",
      "service": "api",
      "description": "Published app API base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "CHECK_UPDATE_URL",
      "service": "api",
      "description": "Update check endpoint",
      "secret": false,
      "strategy": "default",
      "default": "https://updates.dify.ai"
    },
    {
      "key": "GUNICORN_TIMEOUT",
      "service": "api",
      "description": "Request timeout for long generations",
      "secret": false,
      "strategy": "default",
      "default": "360"
    },
    {
      "key": "PYTHONIOENCODING",
      "service": "api",
      "description": "Python IO encoding",
      "secret": false,
      "strategy": "default",
      "default": "utf-8"
    },
    {
      "key": "S3_ADDRESS_STYLE",
      "service": "api",
      "description": "Bucket addressing style",
      "secret": false,
      "strategy": "default",
      "default": "auto"
    },
    {
      "key": "CELERY_BROKER_URL",
      "service": "api",
      "description": "Task queue",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DIFY_BIND_ADDRESS",
      "service": "api",
      "description": "Listen on all interfaces",
      "secret": false,
      "strategy": "default",
      "default": "0.0.0.0"
    },
    {
      "key": "MIGRATION_ENABLED",
      "service": "api",
      "description": "Run schema migrations at boot",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PGVECTOR_DATABASE",
      "service": "api",
      "description": "pgvector database",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGVECTOR_PASSWORD",
      "service": "api",
      "description": "pgvector password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PLUGIN_DAEMON_KEY",
      "service": "api",
      "description": "Plugin daemon auth",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PLUGIN_DAEMON_URL",
      "service": "api",
      "description": "Plugin daemon URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "INTERNAL_FILES_URL",
      "service": "api",
      "description": "Private file endpoint base",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SCARF_NO_ANALYTICS",
      "service": "api",
      "description": "Disable package analytics",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "EVENT_BUS_REDIS_URL",
      "service": "api",
      "description": "Pub/sub channel",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MARKETPLACE_API_URL",
      "service": "api",
      "description": "Marketplace API",
      "secret": false,
      "strategy": "default",
      "default": "https://marketplace.dify.ai"
    },
    {
      "key": "MARKETPLACE_ENABLED",
      "service": "api",
      "description": "Plugin marketplace enabled",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "SERVER_WORKER_CLASS",
      "service": "api",
      "description": "Gunicorn worker class",
      "secret": false,
      "strategy": "default",
      "default": "gevent"
    },
    {
      "key": "SSRF_PROXY_HTTP_URL",
      "service": "api",
      "description": "Outbound HTTP proxy",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_SOCKET_TIMEOUT",
      "service": "api",
      "description": "High, or the collaboration socket drops events",
      "secret": false,
      "strategy": "default",
      "default": "300"
    },
    {
      "key": "SERVER_WORKER_AMOUNT",
      "service": "api",
      "description": "Gunicorn worker processes",
      "secret": false,
      "strategy": "default",
      "default": "2"
    },
    {
      "key": "SQLALCHEMY_POOL_SIZE",
      "service": "api",
      "description": "Connection pool size",
      "secret": false,
      "strategy": "default",
      "default": "20"
    },
    {
      "key": "SSRF_PROXY_HTTPS_URL",
      "service": "api",
      "description": "Outbound HTTPS proxy",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ENDPOINT_URL_TEMPLATE",
      "service": "api",
      "description": "Plugin webhook URL shape",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "ALLOW_CREATE_WORKSPACE",
      "service": "api",
      "description": "Workspace self-creation disabled",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "CODE_EXECUTION_API_KEY",
      "service": "api",
      "description": "Code sandbox auth",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CODE_EXECUTION_ENDPOINT",
      "service": "api",
      "description": "Code sandbox URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ENABLE_EMAIL_CODE_LOGIN",
      "service": "api",
      "description": "Emailed code sign-in off",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "PGVECTOR_MAX_CONNECTION",
      "service": "api",
      "description": "Max vector pool connections",
      "secret": false,
      "strategy": "default",
      "default": "5"
    },
    {
      "key": "PGVECTOR_MIN_CONNECTION",
      "service": "api",
      "description": "Min vector pool connections",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "PLUGIN_MAX_PACKAGE_SIZE",
      "service": "api",
      "description": "Max plugin package bytes",
      "secret": false,
      "strategy": "default",
      "default": "52428800"
    },
    {
      "key": "SQLALCHEMY_MAX_OVERFLOW",
      "service": "api",
      "description": "Pool overflow allowance",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "SQLALCHEMY_POOL_RECYCLE",
      "service": "api",
      "description": "Recycle connections after an hour",
      "secret": false,
      "strategy": "default",
      "default": "3600"
    },
    {
      "key": "INNER_API_KEY_FOR_PLUGIN",
      "service": "api",
      "description": "Auth for plugin daemon callbacks",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "SQLALCHEMY_POOL_PRE_PING",
      "service": "api",
      "description": "Validate connections before use",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "ENABLE_COLLABORATION_MODE",
      "service": "api",
      "description": "Multi-user canvas editing",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "ENABLE_SOCIAL_OAUTH_LOGIN",
      "service": "api",
      "description": "OAuth sign-in off",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "FORCE_VERIFYING_SIGNATURE",
      "service": "api",
      "description": "Only signed plugins install",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "SERVER_WORKER_CONNECTIONS",
      "service": "api",
      "description": "Connections per worker",
      "secret": false,
      "strategy": "default",
      "default": "100"
    },
    {
      "key": "ENABLE_EMAIL_PASSWORD_LOGIN",
      "service": "api",
      "description": "Email and password sign-in",
      "secret": true,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "EVENT_BUS_REDIS_CHANNEL_TYPE",
      "service": "api",
      "description": "Event transport mode",
      "secret": false,
      "strategy": "default",
      "default": "pubsub"
    },
    {
      "key": "REDISHOST",
      "service": "Redis",
      "description": "Data panel alias, not read by the server",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDISPORT",
      "service": "Redis",
      "description": "Data panel alias, not read by the server",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "REDISUSER",
      "service": "Redis",
      "description": "Data panel alias, not read by the server",
      "secret": false,
      "strategy": "default",
      "default": "default"
    },
    {
      "key": "REDIS_URL",
      "service": "Redis",
      "description": "Private connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDISPASSWORD",
      "service": "Redis",
      "description": "Data panel alias, not read by the server",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "Redis",
      "description": "Auth password, read by the server",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PORT",
      "service": "sandbox",
      "description": "Health check port",
      "secret": false,
      "strategy": "default",
      "default": "8194"
    },
    {
      "key": "API_KEY",
      "service": "sandbox",
      "description": "Auth for API to sandbox calls",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "GIN_MODE",
      "service": "sandbox",
      "description": "Production HTTP server mode",
      "secret": false,
      "strategy": "default",
      "default": "release"
    },
    {
      "key": "HTTP_PROXY",
      "service": "sandbox",
      "description": "Forced egress proxy",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "HTTPS_PROXY",
      "service": "sandbox",
      "description": "Forced egress proxy",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SANDBOX_PORT",
      "service": "sandbox",
      "description": "Sandbox listening port",
      "secret": false,
      "strategy": "default",
      "default": "8194"
    },
    {
      "key": "ENABLE_NETWORK",
      "service": "sandbox",
      "description": "Allow network from code nodes",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "WORKER_TIMEOUT",
      "service": "sandbox",
      "description": "Max code execution seconds",
      "secret": false,
      "strategy": "default",
      "default": "15"
    },
    {
      "key": "LANG",
      "service": "worker",
      "description": "Locale",
      "secret": false,
      "strategy": "default",
      "default": "C.UTF-8"
    },
    {
      "key": "MODE",
      "service": "worker",
      "description": "Run as the Celery worker",
      "secret": false,
      "strategy": "default",
      "default": "worker"
    },
    {
      "key": "DEBUG",
      "service": "worker",
      "description": "Debug mode off",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "LC_ALL",
      "service": "worker",
      "description": "Locale",
      "secret": false,
      "strategy": "default",
      "default": "C.UTF-8"
    },
    {
      "key": "LOG_TZ",
      "service": "worker",
      "description": "Log timestamp timezone",
      "secret": false,
      "strategy": "default",
      "default": "UTC"
    },
    {
      "key": "DB_HOST",
      "service": "worker",
      "description": "Postgres host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_PORT",
      "service": "worker",
      "description": "Postgres port",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_TYPE",
      "service": "worker",
      "description": "Database engine",
      "secret": false,
      "strategy": "default",
      "default": "postgresql"
    },
    {
      "key": "EDITION",
      "service": "worker",
      "description": "Community edition feature set",
      "secret": false,
      "strategy": "default",
      "default": "SELF_HOSTED"
    },
    {
      "key": "REDIS_DB",
      "service": "worker",
      "description": "Redis database index",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "FILES_URL",
      "service": "worker",
      "description": "Public file endpoint base",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "LOG_LEVEL",
      "service": "worker",
      "description": "Application log level",
      "secret": false,
      "strategy": "default",
      "default": "INFO"
    },
    {
      "key": "S3_REGION",
      "service": "worker",
      "description": "Bucket region",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DEPLOY_ENV",
      "service": "worker",
      "description": "Production behaviour",
      "secret": false,
      "strategy": "default",
      "default": "PRODUCTION"
    },
    {
      "key": "REDIS_HOST",
      "service": "worker",
      "description": "Redis host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_PORT",
      "service": "worker",
      "description": "Redis port",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SECRET_KEY",
      "service": "worker",
      "description": "Shared session signing key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APP_API_URL",
      "service": "worker",
      "description": "Web app API base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "APP_WEB_URL",
      "service": "worker",
      "description": "Web app base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "DB_DATABASE",
      "service": "worker",
      "description": "Application database",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_PASSWORD",
      "service": "worker",
      "description": "Postgres password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_USERNAME",
      "service": "worker",
      "description": "Postgres user",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_ENDPOINT",
      "service": "worker",
      "description": "Bucket endpoint",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "TRIGGER_URL",
      "service": "worker",
      "description": "Workflow trigger base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "STORAGE_TYPE",
      "service": "worker",
      "description": "Object storage for uploads",
      "secret": false,
      "strategy": "default",
      "default": "s3"
    },
    {
      "key": "UV_CACHE_DIR",
      "service": "worker",
      "description": "Writable dependency cache",
      "secret": false,
      "strategy": "default",
      "default": "/tmp/.uv-cache"
    },
    {
      "key": "VECTOR_STORE",
      "service": "worker",
      "description": "Vectors stored in Postgres",
      "secret": false,
      "strategy": "default",
      "default": "pgvector"
    },
    {
      "key": "PGVECTOR_HOST",
      "service": "worker",
      "description": "pgvector host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGVECTOR_PORT",
      "service": "worker",
      "description": "pgvector port",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGVECTOR_USER",
      "service": "worker",
      "description": "pgvector user",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_ACCESS_KEY",
      "service": "worker",
      "description": "Bucket access key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_SECRET_KEY",
      "service": "worker",
      "description": "Bucket secret key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CELERY_BACKEND",
      "service": "worker",
      "description": "Celery result backend",
      "secret": false,
      "strategy": "default",
      "default": "redis"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "worker",
      "description": "Redis password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_USERNAME",
      "service": "worker",
      "description": "Redis user",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_BUCKET_NAME",
      "service": "worker",
      "description": "Bucket name",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CONSOLE_API_URL",
      "service": "worker",
      "description": "Console API base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "CONSOLE_WEB_URL",
      "service": "worker",
      "description": "Console base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "MARKETPLACE_URL",
      "service": "worker",
      "description": "Marketplace site",
      "secret": false,
      "strategy": "default",
      "default": "https://marketplace.dify.ai"
    },
    {
      "key": "SERVICE_API_URL",
      "service": "worker",
      "description": "Published app API base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "PYTHONIOENCODING",
      "service": "worker",
      "description": "Python IO encoding",
      "secret": false,
      "strategy": "default",
      "default": "utf-8"
    },
    {
      "key": "S3_ADDRESS_STYLE",
      "service": "worker",
      "description": "Bucket addressing style",
      "secret": false,
      "strategy": "default",
      "default": "auto"
    },
    {
      "key": "CELERY_AUTO_SCALE",
      "service": "worker",
      "description": "Autoscale sizes from host cores, keep off",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "CELERY_BROKER_URL",
      "service": "worker",
      "description": "Task queue",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MIGRATION_ENABLED",
      "service": "worker",
      "description": "Migrations run on the API only",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "PGVECTOR_DATABASE",
      "service": "worker",
      "description": "pgvector database",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGVECTOR_PASSWORD",
      "service": "worker",
      "description": "pgvector password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PLUGIN_DAEMON_KEY",
      "service": "worker",
      "description": "Plugin daemon auth",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PLUGIN_DAEMON_URL",
      "service": "worker",
      "description": "Plugin daemon URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "INTERNAL_FILES_URL",
      "service": "worker",
      "description": "Private file endpoint base",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SCARF_NO_ANALYTICS",
      "service": "worker",
      "description": "Disable package analytics",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "CELERY_WORKER_CLASS",
      "service": "worker",
      "description": "Celery pool implementation",
      "secret": false,
      "strategy": "default",
      "default": "gevent"
    },
    {
      "key": "EVENT_BUS_REDIS_URL",
      "service": "worker",
      "description": "Pub/sub channel",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MARKETPLACE_API_URL",
      "service": "worker",
      "description": "Marketplace API",
      "secret": false,
      "strategy": "default",
      "default": "https://marketplace.dify.ai"
    },
    {
      "key": "MARKETPLACE_ENABLED",
      "service": "worker",
      "description": "Plugin marketplace enabled",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "SSRF_PROXY_HTTP_URL",
      "service": "worker",
      "description": "Outbound HTTP proxy",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "CELERY_WORKER_AMOUNT",
      "service": "worker",
      "description": "Worker concurrency",
      "secret": false,
      "strategy": "default",
      "default": "4"
    },
    {
      "key": "SQLALCHEMY_POOL_SIZE",
      "service": "worker",
      "description": "Connection pool size",
      "secret": false,
      "strategy": "default",
      "default": "20"
    },
    {
      "key": "SSRF_PROXY_HTTPS_URL",
      "service": "worker",
      "description": "Outbound HTTPS proxy",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ENDPOINT_URL_TEMPLATE",
      "service": "worker",
      "description": "Plugin webhook URL shape",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "CODE_EXECUTION_API_KEY",
      "service": "worker",
      "description": "Code sandbox auth",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CODE_EXECUTION_ENDPOINT",
      "service": "worker",
      "description": "Code sandbox URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PGVECTOR_MAX_CONNECTION",
      "service": "worker",
      "description": "Max vector pool connections",
      "secret": false,
      "strategy": "default",
      "default": "5"
    },
    {
      "key": "PGVECTOR_MIN_CONNECTION",
      "service": "worker",
      "description": "Min vector pool connections",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "SQLALCHEMY_POOL_RECYCLE",
      "service": "worker",
      "description": "Recycle connections after an hour",
      "secret": false,
      "strategy": "default",
      "default": "3600"
    },
    {
      "key": "INNER_API_KEY_FOR_PLUGIN",
      "service": "worker",
      "description": "Shared plugin callback auth",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SQLALCHEMY_POOL_PRE_PING",
      "service": "worker",
      "description": "Validate connections before use",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "FORCE_VERIFYING_SIGNATURE",
      "service": "worker",
      "description": "Only signed plugins install",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "EVENT_BUS_REDIS_CHANNEL_TYPE",
      "service": "worker",
      "description": "Event transport mode",
      "secret": false,
      "strategy": "default",
      "default": "pubsub"
    },
    {
      "key": "RAILWAY_DEPLOYMENT_DRAINING_SECONDS",
      "service": "worker",
      "description": "Let in-flight jobs finish",
      "secret": false,
      "strategy": "default",
      "default": "90"
    },
    {
      "key": "PORT",
      "service": "proxy",
      "description": "Caddy listening port",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "DIFY_API_UPSTREAM",
      "service": "proxy",
      "description": "Console and service API backend",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DIFY_WEB_UPSTREAM",
      "service": "proxy",
      "description": "Frontend backend",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DIFY_API_WEBSOCKET_UPSTREAM",
      "service": "proxy",
      "description": "Collaboration socket backend",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DIFY_PLUGIN_DAEMON_UPSTREAM",
      "service": "proxy",
      "description": "Plugin webhook backend",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "LANG",
      "service": "worker-beat",
      "description": "Locale",
      "secret": false,
      "strategy": "default",
      "default": "C.UTF-8"
    },
    {
      "key": "MODE",
      "service": "worker-beat",
      "description": "Run as the Celery scheduler",
      "secret": false,
      "strategy": "default",
      "default": "beat"
    },
    {
      "key": "DEBUG",
      "service": "worker-beat",
      "description": "Debug mode off",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "LC_ALL",
      "service": "worker-beat",
      "description": "Locale",
      "secret": false,
      "strategy": "default",
      "default": "C.UTF-8"
    },
    {
      "key": "LOG_TZ",
      "service": "worker-beat",
      "description": "Log timestamp timezone",
      "secret": false,
      "strategy": "default",
      "default": "UTC"
    },
    {
      "key": "DB_HOST",
      "service": "worker-beat",
      "description": "Postgres host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_PORT",
      "service": "worker-beat",
      "description": "Postgres port",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_TYPE",
      "service": "worker-beat",
      "description": "Database engine",
      "secret": false,
      "strategy": "default",
      "default": "postgresql"
    },
    {
      "key": "EDITION",
      "service": "worker-beat",
      "description": "Community edition feature set",
      "secret": false,
      "strategy": "default",
      "default": "SELF_HOSTED"
    },
    {
      "key": "REDIS_DB",
      "service": "worker-beat",
      "description": "Redis database index",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "FILES_URL",
      "service": "worker-beat",
      "description": "Public file endpoint base",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "LOG_LEVEL",
      "service": "worker-beat",
      "description": "Application log level",
      "secret": false,
      "strategy": "default",
      "default": "INFO"
    },
    {
      "key": "S3_REGION",
      "service": "worker-beat",
      "description": "Bucket region",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DEPLOY_ENV",
      "service": "worker-beat",
      "description": "Production behaviour",
      "secret": false,
      "strategy": "default",
      "default": "PRODUCTION"
    },
    {
      "key": "REDIS_HOST",
      "service": "worker-beat",
      "description": "Redis host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_PORT",
      "service": "worker-beat",
      "description": "Redis port",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SECRET_KEY",
      "service": "worker-beat",
      "description": "Shared session signing key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APP_API_URL",
      "service": "worker-beat",
      "description": "Web app API base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "APP_WEB_URL",
      "service": "worker-beat",
      "description": "Web app base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "DB_DATABASE",
      "service": "worker-beat",
      "description": "Application database",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_PASSWORD",
      "service": "worker-beat",
      "description": "Postgres password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_USERNAME",
      "service": "worker-beat",
      "description": "Postgres user",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_ENDPOINT",
      "service": "worker-beat",
      "description": "Bucket endpoint",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "STORAGE_TYPE",
      "service": "worker-beat",
      "description": "Object storage for uploads",
      "secret": false,
      "strategy": "default",
      "default": "s3"
    },
    {
      "key": "UV_CACHE_DIR",
      "service": "worker-beat",
      "description": "Writable dependency cache",
      "secret": false,
      "strategy": "default",
      "default": "/tmp/.uv-cache"
    },
    {
      "key": "VECTOR_STORE",
      "service": "worker-beat",
      "description": "Vectors stored in Postgres",
      "secret": false,
      "strategy": "default",
      "default": "pgvector"
    },
    {
      "key": "PGVECTOR_HOST",
      "service": "worker-beat",
      "description": "pgvector host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGVECTOR_PORT",
      "service": "worker-beat",
      "description": "pgvector port",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGVECTOR_USER",
      "service": "worker-beat",
      "description": "pgvector user",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_ACCESS_KEY",
      "service": "worker-beat",
      "description": "Bucket access key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_SECRET_KEY",
      "service": "worker-beat",
      "description": "Bucket secret key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CELERY_BACKEND",
      "service": "worker-beat",
      "description": "Celery result backend",
      "secret": false,
      "strategy": "default",
      "default": "redis"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "worker-beat",
      "description": "Redis password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_USERNAME",
      "service": "worker-beat",
      "description": "Redis user",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_BUCKET_NAME",
      "service": "worker-beat",
      "description": "Bucket name",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CONSOLE_API_URL",
      "service": "worker-beat",
      "description": "Console API base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "CONSOLE_WEB_URL",
      "service": "worker-beat",
      "description": "Console base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "SERVICE_API_URL",
      "service": "worker-beat",
      "description": "Published app API base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "PYTHONIOENCODING",
      "service": "worker-beat",
      "description": "Python IO encoding",
      "secret": false,
      "strategy": "default",
      "default": "utf-8"
    },
    {
      "key": "S3_ADDRESS_STYLE",
      "service": "worker-beat",
      "description": "Bucket addressing style",
      "secret": false,
      "strategy": "default",
      "default": "auto"
    },
    {
      "key": "CELERY_BROKER_URL",
      "service": "worker-beat",
      "description": "Task queue",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MIGRATION_ENABLED",
      "service": "worker-beat",
      "description": "Migrations run on the API only",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "PGVECTOR_DATABASE",
      "service": "worker-beat",
      "description": "pgvector database",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGVECTOR_PASSWORD",
      "service": "worker-beat",
      "description": "pgvector password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PLUGIN_DAEMON_KEY",
      "service": "worker-beat",
      "description": "Plugin daemon auth",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PLUGIN_DAEMON_URL",
      "service": "worker-beat",
      "description": "Plugin daemon URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SCARF_NO_ANALYTICS",
      "service": "worker-beat",
      "description": "Disable package analytics",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "SSRF_PROXY_HTTP_URL",
      "service": "worker-beat",
      "description": "Outbound HTTP proxy",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SQLALCHEMY_POOL_SIZE",
      "service": "worker-beat",
      "description": "Connection pool size",
      "secret": false,
      "strategy": "default",
      "default": "5"
    },
    {
      "key": "SSRF_PROXY_HTTPS_URL",
      "service": "worker-beat",
      "description": "Outbound HTTPS proxy",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SQLALCHEMY_POOL_RECYCLE",
      "service": "worker-beat",
      "description": "Recycle connections after an hour",
      "secret": false,
      "strategy": "default",
      "default": "3600"
    },
    {
      "key": "INNER_API_KEY_FOR_PLUGIN",
      "service": "worker-beat",
      "description": "Shared plugin callback auth",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SQLALCHEMY_POOL_PRE_PING",
      "service": "worker-beat",
      "description": "Validate connections before use",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "RAILWAY_DEPLOYMENT_DRAINING_SECONDS",
      "service": "worker-beat",
      "description": "Clean shutdown window",
      "secret": false,
      "strategy": "default",
      "default": "30"
    },
    {
      "key": "PGDATA",
      "service": "Postgres",
      "description": "Cluster location on the volume",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/postgresql/data/pgdata"
    },
    {
      "key": "PGHOST",
      "service": "Postgres",
      "description": "Data panel alias, not read by the server",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PGPORT",
      "service": "Postgres",
      "description": "Data panel alias, not read by the server",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "PGUSER",
      "service": "Postgres",
      "description": "Data panel alias, not read by the server",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGDATABASE",
      "service": "Postgres",
      "description": "Data panel alias, not read by the server",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGPASSWORD",
      "service": "Postgres",
      "description": "Data panel alias, not read by the server",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_DB",
      "service": "Postgres",
      "description": "Database created on first boot",
      "secret": false,
      "strategy": "default",
      "default": "railway"
    },
    {
      "key": "DATABASE_URL",
      "service": "Postgres",
      "description": "Private connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "POSTGRES_USER",
      "service": "Postgres",
      "description": "Superuser created on first boot",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "SSL_CERT_DAYS",
      "service": "Postgres",
      "description": "SSL certificate expiry in days",
      "secret": false,
      "strategy": "default",
      "default": "820"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "Postgres",
      "description": "Superuser password",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "RAILWAY_DEPLOYMENT_DRAINING_SECONDS",
      "service": "Postgres",
      "description": "Clean shutdown window",
      "secret": false,
      "strategy": "default",
      "default": "60"
    },
    {
      "key": "PORT",
      "service": "web",
      "description": "Next.js listening port",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "DEPLOY_ENV",
      "service": "web",
      "description": "Disables development behaviour",
      "secret": false,
      "strategy": "default",
      "default": "PRODUCTION"
    },
    {
      "key": "ALLOW_EMBED",
      "service": "web",
      "description": "Disallow embedding the console in iframes",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "APP_API_URL",
      "service": "web",
      "description": "Published app API base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "MAX_TOOLS_NUM",
      "service": "web",
      "description": "Tools per agent ceiling",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "MAX_TREE_DEPTH",
      "service": "web",
      "description": "Workflow depth ceiling",
      "secret": false,
      "strategy": "default",
      "default": "50"
    },
    {
      "key": "CONSOLE_API_URL",
      "service": "web",
      "description": "Console API base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "CONSOLE_WEB_URL",
      "service": "web",
      "description": "Console base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "MARKETPLACE_URL",
      "service": "web",
      "description": "Plugin marketplace site",
      "secret": false,
      "strategy": "default",
      "default": "https://marketplace.dify.ai"
    },
    {
      "key": "TOP_K_MAX_VALUE",
      "service": "web",
      "description": "Retrieval top-k ceiling",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "MAX_ITERATIONS_NUM",
      "service": "web",
      "description": "Iteration node ceiling",
      "secret": false,
      "strategy": "default",
      "default": "99"
    },
    {
      "key": "MAX_PARALLEL_LIMIT",
      "service": "web",
      "description": "Parallel branch ceiling",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "LOOP_NODE_MAX_COUNT",
      "service": "web",
      "description": "Loop node iteration ceiling",
      "secret": false,
      "strategy": "default",
      "default": "100"
    },
    {
      "key": "MARKETPLACE_API_URL",
      "service": "web",
      "description": "Plugin marketplace API",
      "secret": false,
      "strategy": "default",
      "default": "https://marketplace.dify.ai"
    },
    {
      "key": "NEXT_PUBLIC_SOCKET_URL",
      "service": "web",
      "description": "Collaboration websocket URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "SERVER_CONSOLE_API_URL",
      "service": "web",
      "description": "Server-side API calls",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "NEXT_TELEMETRY_DISABLED",
      "service": "web",
      "description": "Turns off Next.js telemetry",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "ALLOW_UNSAFE_DATA_SCHEME",
      "service": "web",
      "description": "Block data: URLs in rendered output",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "ENABLE_WEBSITE_FIRECRAWL",
      "service": "web",
      "description": "Firecrawl web import",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "ENABLE_WEBSITE_JINAREADER",
      "service": "web",
      "description": "Jina Reader web import",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "ENABLE_WEBSITE_WATERCRAWL",
      "service": "web",
      "description": "Watercrawl web import",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "EXPERIMENTAL_ENABLE_VINEXT",
      "service": "web",
      "description": "Experimental frontend runtime off",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "TEXT_GENERATION_TIMEOUT_MS",
      "service": "web",
      "description": "Client generation timeout",
      "secret": false,
      "strategy": "default",
      "default": "60000"
    },
    {
      "key": "NEXT_PUBLIC_ENABLE_AGENT_V2",
      "service": "web",
      "description": "Agent v2 surface off; backend not deployed",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "WORKFLOW_GENERATION_TIMEOUT_MS",
      "service": "web",
      "description": "Client workflow timeout",
      "secret": false,
      "strategy": "default",
      "default": "180000"
    },
    {
      "key": "INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH",
      "service": "web",
      "description": "Max chunk size when indexing",
      "secret": true,
      "strategy": "default",
      "default": "4000"
    },
    {
      "key": "LANG",
      "service": "api-websocket",
      "description": "Locale",
      "secret": false,
      "strategy": "default",
      "default": "C.UTF-8"
    },
    {
      "key": "MODE",
      "service": "api-websocket",
      "description": "Same image, websocket role",
      "secret": false,
      "strategy": "default",
      "default": "api"
    },
    {
      "key": "PORT",
      "service": "api-websocket",
      "description": "Health check port",
      "secret": false,
      "strategy": "default",
      "default": "5001"
    },
    {
      "key": "DEBUG",
      "service": "api-websocket",
      "description": "Debug mode off",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "LC_ALL",
      "service": "api-websocket",
      "description": "Locale",
      "secret": false,
      "strategy": "default",
      "default": "C.UTF-8"
    },
    {
      "key": "LOG_TZ",
      "service": "api-websocket",
      "description": "Log timestamp timezone",
      "secret": false,
      "strategy": "default",
      "default": "UTC"
    },
    {
      "key": "DB_HOST",
      "service": "api-websocket",
      "description": "Postgres host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_PORT",
      "service": "api-websocket",
      "description": "Postgres port",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_TYPE",
      "service": "api-websocket",
      "description": "Database engine",
      "secret": false,
      "strategy": "default",
      "default": "postgresql"
    },
    {
      "key": "EDITION",
      "service": "api-websocket",
      "description": "Community edition feature set",
      "secret": false,
      "strategy": "default",
      "default": "SELF_HOSTED"
    },
    {
      "key": "REDIS_DB",
      "service": "api-websocket",
      "description": "Redis database index",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "DIFY_PORT",
      "service": "api-websocket",
      "description": "Application listening port",
      "secret": false,
      "strategy": "default",
      "default": "5001"
    },
    {
      "key": "FILES_URL",
      "service": "api-websocket",
      "description": "Public file endpoint base",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "LOG_LEVEL",
      "service": "api-websocket",
      "description": "Application log level",
      "secret": false,
      "strategy": "default",
      "default": "INFO"
    },
    {
      "key": "S3_REGION",
      "service": "api-websocket",
      "description": "Bucket region",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DEPLOY_ENV",
      "service": "api-websocket",
      "description": "Production behaviour",
      "secret": false,
      "strategy": "default",
      "default": "PRODUCTION"
    },
    {
      "key": "REDIS_HOST",
      "service": "api-websocket",
      "description": "Redis host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_PORT",
      "service": "api-websocket",
      "description": "Redis port",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SECRET_KEY",
      "service": "api-websocket",
      "description": "Shared session signing key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APP_API_URL",
      "service": "api-websocket",
      "description": "Web app API base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "APP_WEB_URL",
      "service": "api-websocket",
      "description": "Web app base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "DB_DATABASE",
      "service": "api-websocket",
      "description": "Application database",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_PASSWORD",
      "service": "api-websocket",
      "description": "Postgres password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_USERNAME",
      "service": "api-websocket",
      "description": "Postgres user",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "FLASK_DEBUG",
      "service": "api-websocket",
      "description": "Flask debug off",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "S3_ENDPOINT",
      "service": "api-websocket",
      "description": "Bucket endpoint",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "STORAGE_TYPE",
      "service": "api-websocket",
      "description": "Object storage for uploads",
      "secret": false,
      "strategy": "default",
      "default": "s3"
    },
    {
      "key": "UV_CACHE_DIR",
      "service": "api-websocket",
      "description": "Writable dependency cache",
      "secret": false,
      "strategy": "default",
      "default": "/tmp/.uv-cache"
    },
    {
      "key": "VECTOR_STORE",
      "service": "api-websocket",
      "description": "Vectors stored in Postgres",
      "secret": false,
      "strategy": "default",
      "default": "pgvector"
    },
    {
      "key": "PGVECTOR_HOST",
      "service": "api-websocket",
      "description": "pgvector host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGVECTOR_PORT",
      "service": "api-websocket",
      "description": "pgvector port",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGVECTOR_USER",
      "service": "api-websocket",
      "description": "pgvector user",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_ACCESS_KEY",
      "service": "api-websocket",
      "description": "Bucket access key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_SECRET_KEY",
      "service": "api-websocket",
      "description": "Bucket secret key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ALLOW_REGISTER",
      "service": "api-websocket",
      "description": "Public sign-up disabled",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "CELERY_BACKEND",
      "service": "api-websocket",
      "description": "Celery result backend",
      "secret": false,
      "strategy": "default",
      "default": "redis"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "api-websocket",
      "description": "Redis password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_USERNAME",
      "service": "api-websocket",
      "description": "Redis user",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_BUCKET_NAME",
      "service": "api-websocket",
      "description": "Bucket name",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CONSOLE_API_URL",
      "service": "api-websocket",
      "description": "Console API base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "CONSOLE_WEB_URL",
      "service": "api-websocket",
      "description": "Console base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "SERVICE_API_URL",
      "service": "api-websocket",
      "description": "Published app API base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "GUNICORN_TIMEOUT",
      "service": "api-websocket",
      "description": "Request timeout",
      "secret": false,
      "strategy": "default",
      "default": "360"
    },
    {
      "key": "PYTHONIOENCODING",
      "service": "api-websocket",
      "description": "Python IO encoding",
      "secret": false,
      "strategy": "default",
      "default": "utf-8"
    },
    {
      "key": "S3_ADDRESS_STYLE",
      "service": "api-websocket",
      "description": "Bucket addressing style",
      "secret": false,
      "strategy": "default",
      "default": "auto"
    },
    {
      "key": "CELERY_BROKER_URL",
      "service": "api-websocket",
      "description": "Task queue",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DIFY_BIND_ADDRESS",
      "service": "api-websocket",
      "description": "Listen on all interfaces",
      "secret": false,
      "strategy": "default",
      "default": "0.0.0.0"
    },
    {
      "key": "MIGRATION_ENABLED",
      "service": "api-websocket",
      "description": "Migrations run on the API only",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "PGVECTOR_DATABASE",
      "service": "api-websocket",
      "description": "pgvector database",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGVECTOR_PASSWORD",
      "service": "api-websocket",
      "description": "pgvector password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PLUGIN_DAEMON_KEY",
      "service": "api-websocket",
      "description": "Plugin daemon auth",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PLUGIN_DAEMON_URL",
      "service": "api-websocket",
      "description": "Plugin daemon URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "INTERNAL_FILES_URL",
      "service": "api-websocket",
      "description": "Private file endpoint base",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SCARF_NO_ANALYTICS",
      "service": "api-websocket",
      "description": "Disable package analytics",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "EVENT_BUS_REDIS_URL",
      "service": "api-websocket",
      "description": "Pub/sub channel",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVER_WORKER_CLASS",
      "service": "api-websocket",
      "description": "Websocket worker class",
      "secret": false,
      "strategy": "default",
      "default": "geventwebsocket.gunicorn.workers.GeventWebSocketWorker"
    },
    {
      "key": "SSRF_PROXY_HTTP_URL",
      "service": "api-websocket",
      "description": "Outbound HTTP proxy",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_SOCKET_TIMEOUT",
      "service": "api-websocket",
      "description": "High, or the collaboration socket drops events",
      "secret": false,
      "strategy": "default",
      "default": "300"
    },
    {
      "key": "SERVER_WORKER_AMOUNT",
      "service": "api-websocket",
      "description": "Gunicorn worker processes",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "SQLALCHEMY_POOL_SIZE",
      "service": "api-websocket",
      "description": "Connection pool size",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "SSRF_PROXY_HTTPS_URL",
      "service": "api-websocket",
      "description": "Outbound HTTPS proxy",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ALLOW_CREATE_WORKSPACE",
      "service": "api-websocket",
      "description": "Workspace self-creation disabled",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "SQLALCHEMY_POOL_RECYCLE",
      "service": "api-websocket",
      "description": "Recycle connections after an hour",
      "secret": false,
      "strategy": "default",
      "default": "3600"
    },
    {
      "key": "INNER_API_KEY_FOR_PLUGIN",
      "service": "api-websocket",
      "description": "Shared plugin callback auth",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SQLALCHEMY_POOL_PRE_PING",
      "service": "api-websocket",
      "description": "Validate connections before use",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "ENABLE_COLLABORATION_MODE",
      "service": "api-websocket",
      "description": "Multi-user canvas editing",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "SERVER_WORKER_CONNECTIONS",
      "service": "api-websocket",
      "description": "Concurrent websocket connections",
      "secret": false,
      "strategy": "default",
      "default": "1000"
    },
    {
      "key": "EVENT_BUS_REDIS_CHANNEL_TYPE",
      "service": "api-websocket",
      "description": "Event transport mode",
      "secret": false,
      "strategy": "default",
      "default": "pubsub"
    },
    {
      "key": "HTTP_PORT",
      "service": "ssrf-proxy",
      "description": "Squid listening port",
      "secret": false,
      "strategy": "default",
      "default": "3128"
    },
    {
      "key": "COREDUMP_DIR",
      "service": "ssrf-proxy",
      "description": "Squid coredump directory",
      "secret": false,
      "strategy": "default",
      "default": "/var/spool/squid"
    },
    {
      "key": "PORT",
      "service": "plugin-daemon",
      "description": "Health check port",
      "secret": false,
      "strategy": "default",
      "default": "5002"
    },
    {
      "key": "DB_HOST",
      "service": "plugin-daemon",
      "description": "Postgres host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_PORT",
      "service": "plugin-daemon",
      "description": "Postgres port",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_TYPE",
      "service": "plugin-daemon",
      "description": "Database engine",
      "secret": false,
      "strategy": "default",
      "default": "postgresql"
    },
    {
      "key": "PLATFORM",
      "service": "plugin-daemon",
      "description": "Run plugins in-process",
      "secret": false,
      "strategy": "default",
      "default": "local"
    },
    {
      "key": "REDIS_DB",
      "service": "plugin-daemon",
      "description": "Redis database index",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "REDIS_HOST",
      "service": "plugin-daemon",
      "description": "Redis host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_PORT",
      "service": "plugin-daemon",
      "description": "Redis port",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVER_KEY",
      "service": "plugin-daemon",
      "description": "Auth for API to daemon calls",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "DB_DATABASE",
      "service": "plugin-daemon",
      "description": "Created by the daemon on first boot",
      "secret": false,
      "strategy": "default",
      "default": "dify_plugin"
    },
    {
      "key": "DB_PASSWORD",
      "service": "plugin-daemon",
      "description": "Postgres password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_SSL_MODE",
      "service": "plugin-daemon",
      "description": "Private network, no TLS needed",
      "secret": false,
      "strategy": "default",
      "default": "disable"
    },
    {
      "key": "DB_USERNAME",
      "service": "plugin-daemon",
      "description": "Postgres user",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVER_PORT",
      "service": "plugin-daemon",
      "description": "Daemon listening port",
      "secret": false,
      "strategy": "default",
      "default": "5002"
    },
    {
      "key": "PPROF_ENABLED",
      "service": "plugin-daemon",
      "description": "Profiling endpoint off",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "plugin-daemon",
      "description": "Redis password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_USERNAME",
      "service": "plugin-daemon",
      "description": "Redis user",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ROUTINE_POOL_SIZE",
      "service": "plugin-daemon",
      "description": "Goroutine pool size",
      "secret": false,
      "strategy": "default",
      "default": "10000"
    },
    {
      "key": "DIFY_INNER_API_KEY",
      "service": "plugin-daemon",
      "description": "API callback auth",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DIFY_INNER_API_URL",
      "service": "plugin-daemon",
      "description": "API callback URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DB_DEFAULT_DATABASE",
      "service": "plugin-daemon",
      "description": "Required; used to create the above",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "PLUGIN_STORAGE_TYPE",
      "service": "plugin-daemon",
      "description": "Plugins stored on the volume",
      "secret": false,
      "strategy": "default",
      "default": "local"
    },
    {
      "key": "PLUGIN_WORKING_PATH",
      "service": "plugin-daemon",
      "description": "Plugin runtime working directory",
      "secret": false,
      "strategy": "default",
      "default": "/app/storage/cwd"
    },
    {
      "key": "PLUGIN_INSTALLED_PATH",
      "service": "plugin-daemon",
      "description": "Installed plugin subdirectory",
      "secret": false,
      "strategy": "default",
      "default": "plugin"
    },
    {
      "key": "PIP_MIRROR_AUTO_DETECT",
      "service": "plugin-daemon",
      "description": "Use the default package index",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "MAX_PLUGIN_PACKAGE_SIZE",
      "service": "plugin-daemon",
      "description": "Max plugin package bytes",
      "secret": false,
      "strategy": "default",
      "default": "52428800"
    },
    {
      "key": "PLUGIN_MEDIA_CACHE_PATH",
      "service": "plugin-daemon",
      "description": "Media cache subdirectory",
      "secret": false,
      "strategy": "default",
      "default": "assets"
    },
    {
      "key": "PYTHON_ENV_INIT_TIMEOUT",
      "service": "plugin-daemon",
      "description": "Plugin environment build timeout",
      "secret": false,
      "strategy": "default",
      "default": "120"
    },
    {
      "key": "FORCE_VERIFYING_SIGNATURE",
      "service": "plugin-daemon",
      "description": "Only signed plugins install",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PLUGIN_PACKAGE_CACHE_PATH",
      "service": "plugin-daemon",
      "description": "Package cache subdirectory",
      "secret": false,
      "strategy": "default",
      "default": "plugin_packages"
    },
    {
      "key": "PLUGIN_STORAGE_LOCAL_ROOT",
      "service": "plugin-daemon",
      "description": "Volume mount path",
      "secret": false,
      "strategy": "default",
      "default": "/app/storage"
    },
    {
      "key": "LIFETIME_STATE_GC_INTERVAL",
      "service": "plugin-daemon",
      "description": "State GC seconds",
      "secret": false,
      "strategy": "default",
      "default": "300"
    },
    {
      "key": "PLUGIN_MAX_EXECUTION_TIMEOUT",
      "service": "plugin-daemon",
      "description": "Max plugin execution seconds",
      "secret": false,
      "strategy": "default",
      "default": "600"
    },
    {
      "key": "PLUGIN_REMOTE_INSTALLING_HOST",
      "service": "plugin-daemon",
      "description": "Remote plugin debug bind address",
      "secret": false,
      "strategy": "default",
      "default": "0.0.0.0"
    },
    {
      "key": "PLUGIN_REMOTE_INSTALLING_PORT",
      "service": "plugin-daemon",
      "description": "Remote plugin debug port",
      "secret": false,
      "strategy": "default",
      "default": "5003"
    },
    {
      "key": "LIFETIME_COLLECTION_GC_INTERVAL",
      "service": "plugin-daemon",
      "description": "Cluster GC seconds",
      "secret": false,
      "strategy": "default",
      "default": "60"
    },
    {
      "key": "LIFETIME_COLLECTION_HEARTBEAT_INTERVAL",
      "service": "plugin-daemon",
      "description": "Cluster heartbeat seconds",
      "secret": false,
      "strategy": "default",
      "default": "5"
    },
    {
      "key": "DIFY_INVOCATION_CONNECTION_IDLE_TIMEOUT",
      "service": "plugin-daemon",
      "description": "Idle invocation timeout",
      "secret": false,
      "strategy": "default",
      "default": "120"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "dify-ai"
      }
    },
    "cli": "railway deploy --template dify-ai",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "73a4f886-f4f4-4995-aeeb-f792710f7221",
            "serializedConfig": {
              "buckets": {
                "3d60ef0c-2c99-4668-94d4-5d7a62c9f7c8": {
                  "name": "difystorage"
                }
              },
              "services": {
                "1e637186-e48c-4ab1-b1ef-cdc8a14b2043": {
                  "icon": "https://raw.githubusercontent.com/langgenius/dify/1.16.1/web/public/logo/logo.svg",
                  "name": "api",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/health",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "langgenius/dify-api:1.16.1"
                  },
                  "variables": {
                    "LANG": {
                      "isOptional": false,
                      "description": "Locale",
                      "defaultValue": "C.UTF-8"
                    },
                    "MODE": {
                      "isOptional": false,
                      "description": "Run as the API server",
                      "defaultValue": "api"
                    },
                    "PORT": {
                      "isOptional": false,
                      "description": "Health check port",
                      "defaultValue": "5001"
                    },
                    "DEBUG": {
                      "isOptional": false,
                      "description": "Debug mode off",
                      "defaultValue": "false"
                    },
                    "LC_ALL": {
                      "isOptional": false,
                      "description": "Locale",
                      "defaultValue": "C.UTF-8"
                    },
                    "LOG_TZ": {
                      "isOptional": false,
                      "description": "Log timestamp timezone",
                      "defaultValue": "UTC"
                    },
                    "DB_HOST": {
                      "isOptional": false,
                      "description": "Postgres host",
                      "defaultValue": "${{Postgres.PGHOST}}"
                    },
                    "DB_PORT": {
                      "isOptional": false,
                      "description": "Postgres port",
                      "defaultValue": "${{Postgres.PGPORT}}"
                    },
                    "DB_TYPE": {
                      "isOptional": false,
                      "description": "Database engine",
                      "defaultValue": "postgresql"
                    },
                    "EDITION": {
                      "isOptional": false,
                      "description": "Community edition feature set",
                      "defaultValue": "SELF_HOSTED"
                    },
                    "REDIS_DB": {
                      "isOptional": false,
                      "description": "Redis database index",
                      "defaultValue": "0"
                    },
                    "DIFY_PORT": {
                      "isOptional": false,
                      "description": "Application listening port",
                      "defaultValue": "5001"
                    },
                    "FILES_URL": {
                      "isOptional": false,
                      "description": "Public file endpoint base",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "LOG_LEVEL": {
                      "isOptional": false,
                      "description": "Application log level",
                      "defaultValue": "INFO"
                    },
                    "S3_REGION": {
                      "isOptional": false,
                      "description": "Bucket region",
                      "defaultValue": "${{difystorage.REGION}}"
                    },
                    "DEPLOY_ENV": {
                      "isOptional": false,
                      "description": "Production behaviour",
                      "defaultValue": "PRODUCTION"
                    },
                    "REDIS_HOST": {
                      "isOptional": false,
                      "description": "Redis host",
                      "defaultValue": "${{Redis.REDISHOST}}"
                    },
                    "REDIS_PORT": {
                      "isOptional": false,
                      "description": "Redis port",
                      "defaultValue": "${{Redis.REDISPORT}}"
                    },
                    "SECRET_KEY": {
                      "isOptional": false,
                      "description": "Signs sessions, encrypts provider keys",
                      "defaultValue": "{{SECRET_KEY}}"
                    },
                    "APP_API_URL": {
                      "isOptional": false,
                      "description": "Web app API base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "APP_WEB_URL": {
                      "isOptional": false,
                      "description": "Web app base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "DB_DATABASE": {
                      "isOptional": false,
                      "description": "Application database",
                      "defaultValue": "${{Postgres.PGDATABASE}}"
                    },
                    "DB_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password",
                      "defaultValue": "${{Postgres.PGPASSWORD}}"
                    },
                    "DB_USERNAME": {
                      "isOptional": false,
                      "description": "Postgres user",
                      "defaultValue": "${{Postgres.PGUSER}}"
                    },
                    "FLASK_DEBUG": {
                      "isOptional": false,
                      "description": "Flask debug off",
                      "defaultValue": "false"
                    },
                    "S3_ENDPOINT": {
                      "isOptional": false,
                      "description": "Bucket endpoint",
                      "defaultValue": "${{difystorage.ENDPOINT}}"
                    },
                    "TRIGGER_URL": {
                      "isOptional": false,
                      "description": "Workflow trigger base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "STORAGE_TYPE": {
                      "isOptional": false,
                      "description": "Object storage for uploads",
                      "defaultValue": "s3"
                    },
                    "UV_CACHE_DIR": {
                      "isOptional": false,
                      "description": "Writable dependency cache",
                      "defaultValue": "/tmp/.uv-cache"
                    },
                    "VECTOR_STORE": {
                      "isOptional": false,
                      "description": "Vectors stored in Postgres",
                      "defaultValue": "pgvector"
                    },
                    "INIT_PASSWORD": {
                      "isOptional": false,
                      "description": "Gates the first-run setup screen",
                      "defaultValue": "{{INIT_PASSWORD}}"
                    },
                    "PGVECTOR_HOST": {
                      "isOptional": false,
                      "description": "pgvector host",
                      "defaultValue": "${{Postgres.PGHOST}}"
                    },
                    "PGVECTOR_PORT": {
                      "isOptional": false,
                      "description": "pgvector port",
                      "defaultValue": "${{Postgres.PGPORT}}"
                    },
                    "PGVECTOR_USER": {
                      "isOptional": false,
                      "description": "pgvector user",
                      "defaultValue": "${{Postgres.PGUSER}}"
                    },
                    "S3_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Bucket access key",
                      "defaultValue": "${{difystorage.ACCESS_KEY_ID}}"
                    },
                    "S3_SECRET_KEY": {
                      "isOptional": false,
                      "description": "Bucket secret key",
                      "defaultValue": "${{difystorage.SECRET_ACCESS_KEY}}"
                    },
                    "ALLOW_REGISTER": {
                      "isOptional": false,
                      "description": "Public sign-up disabled",
                      "defaultValue": "false"
                    },
                    "CELERY_BACKEND": {
                      "isOptional": false,
                      "description": "Celery result backend",
                      "defaultValue": "redis"
                    },
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "description": "Redis password",
                      "defaultValue": "${{Redis.REDISPASSWORD}}"
                    },
                    "REDIS_USERNAME": {
                      "isOptional": false,
                      "description": "Redis user",
                      "defaultValue": "${{Redis.REDISUSER}}"
                    },
                    "S3_BUCKET_NAME": {
                      "isOptional": false,
                      "description": "Bucket name",
                      "defaultValue": "${{difystorage.BUCKET}}"
                    },
                    "CONSOLE_API_URL": {
                      "isOptional": false,
                      "description": "Console API base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "CONSOLE_WEB_URL": {
                      "isOptional": false,
                      "description": "Console base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "ENABLE_AGENT_V2": {
                      "isOptional": false,
                      "description": "Agent v2 backend not deployed",
                      "defaultValue": "false"
                    },
                    "MARKETPLACE_URL": {
                      "isOptional": false,
                      "description": "Marketplace site",
                      "defaultValue": "https://marketplace.dify.ai"
                    },
                    "SERVICE_API_URL": {
                      "isOptional": false,
                      "description": "Published app API base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "CHECK_UPDATE_URL": {
                      "isOptional": false,
                      "description": "Update check endpoint",
                      "defaultValue": "https://updates.dify.ai"
                    },
                    "GUNICORN_TIMEOUT": {
                      "isOptional": false,
                      "description": "Request timeout for long generations",
                      "defaultValue": "360"
                    },
                    "PYTHONIOENCODING": {
                      "isOptional": false,
                      "description": "Python IO encoding",
                      "defaultValue": "utf-8"
                    },
                    "S3_ADDRESS_STYLE": {
                      "isOptional": false,
                      "description": "Bucket addressing style",
                      "defaultValue": "auto"
                    },
                    "CELERY_BROKER_URL": {
                      "isOptional": false,
                      "description": "Task queue",
                      "defaultValue": "redis://${{Redis.REDISUSER}}:${{Redis.REDISPASSWORD}}@${{Redis.REDISHOST}}:${{Redis.REDISPORT}}/1"
                    },
                    "DIFY_BIND_ADDRESS": {
                      "isOptional": false,
                      "description": "Listen on all interfaces",
                      "defaultValue": "0.0.0.0"
                    },
                    "MIGRATION_ENABLED": {
                      "isOptional": false,
                      "description": "Run schema migrations at boot",
                      "defaultValue": "true"
                    },
                    "PGVECTOR_DATABASE": {
                      "isOptional": false,
                      "description": "pgvector database",
                      "defaultValue": "${{Postgres.PGDATABASE}}"
                    },
                    "PGVECTOR_PASSWORD": {
                      "isOptional": false,
                      "description": "pgvector password",
                      "defaultValue": "${{Postgres.PGPASSWORD}}"
                    },
                    "PLUGIN_DAEMON_KEY": {
                      "isOptional": false,
                      "description": "Plugin daemon auth",
                      "defaultValue": "${{plugin-daemon.SERVER_KEY}}"
                    },
                    "PLUGIN_DAEMON_URL": {
                      "isOptional": false,
                      "description": "Plugin daemon URL",
                      "defaultValue": "http://${{plugin-daemon.RAILWAY_PRIVATE_DOMAIN}}:5002"
                    },
                    "INTERNAL_FILES_URL": {
                      "isOptional": false,
                      "description": "Private file endpoint base",
                      "defaultValue": "http://${{RAILWAY_PRIVATE_DOMAIN}}:5001"
                    },
                    "SCARF_NO_ANALYTICS": {
                      "isOptional": false,
                      "description": "Disable package analytics",
                      "defaultValue": "true"
                    },
                    "EVENT_BUS_REDIS_URL": {
                      "isOptional": false,
                      "description": "Pub/sub channel",
                      "defaultValue": "redis://${{Redis.REDISUSER}}:${{Redis.REDISPASSWORD}}@${{Redis.REDISHOST}}:${{Redis.REDISPORT}}/0"
                    },
                    "MARKETPLACE_API_URL": {
                      "isOptional": false,
                      "description": "Marketplace API",
                      "defaultValue": "https://marketplace.dify.ai"
                    },
                    "MARKETPLACE_ENABLED": {
                      "isOptional": false,
                      "description": "Plugin marketplace enabled",
                      "defaultValue": "true"
                    },
                    "SERVER_WORKER_CLASS": {
                      "isOptional": false,
                      "description": "Gunicorn worker class",
                      "defaultValue": "gevent"
                    },
                    "SSRF_PROXY_HTTP_URL": {
                      "isOptional": false,
                      "description": "Outbound HTTP proxy",
                      "defaultValue": "http://${{ssrf-proxy.RAILWAY_PRIVATE_DOMAIN}}:3128"
                    },
                    "REDIS_SOCKET_TIMEOUT": {
                      "isOptional": false,
                      "description": "High, or the collaboration socket drops events",
                      "defaultValue": "300"
                    },
                    "SERVER_WORKER_AMOUNT": {
                      "isOptional": false,
                      "description": "Gunicorn worker processes",
                      "defaultValue": "2"
                    },
                    "SQLALCHEMY_POOL_SIZE": {
                      "isOptional": false,
                      "description": "Connection pool size",
                      "defaultValue": "20"
                    },
                    "SSRF_PROXY_HTTPS_URL": {
                      "isOptional": false,
                      "description": "Outbound HTTPS proxy",
                      "defaultValue": "http://${{ssrf-proxy.RAILWAY_PRIVATE_DOMAIN}}:3128"
                    },
                    "ENDPOINT_URL_TEMPLATE": {
                      "isOptional": false,
                      "description": "Plugin webhook URL shape",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}/e/{hook_id}"
                    },
                    "ALLOW_CREATE_WORKSPACE": {
                      "isOptional": false,
                      "description": "Workspace self-creation disabled",
                      "defaultValue": "false"
                    },
                    "CODE_EXECUTION_API_KEY": {
                      "isOptional": false,
                      "description": "Code sandbox auth",
                      "defaultValue": "${{sandbox.API_KEY}}"
                    },
                    "CODE_EXECUTION_ENDPOINT": {
                      "isOptional": false,
                      "description": "Code sandbox URL",
                      "defaultValue": "http://${{sandbox.RAILWAY_PRIVATE_DOMAIN}}:8194"
                    },
                    "ENABLE_EMAIL_CODE_LOGIN": {
                      "isOptional": false,
                      "description": "Emailed code sign-in off",
                      "defaultValue": "false"
                    },
                    "PGVECTOR_MAX_CONNECTION": {
                      "isOptional": false,
                      "description": "Max vector pool connections",
                      "defaultValue": "5"
                    },
                    "PGVECTOR_MIN_CONNECTION": {
                      "isOptional": false,
                      "description": "Min vector pool connections",
                      "defaultValue": "1"
                    },
                    "PLUGIN_MAX_PACKAGE_SIZE": {
                      "isOptional": false,
                      "description": "Max plugin package bytes",
                      "defaultValue": "52428800"
                    },
                    "SQLALCHEMY_MAX_OVERFLOW": {
                      "isOptional": false,
                      "description": "Pool overflow allowance",
                      "defaultValue": "10"
                    },
                    "SQLALCHEMY_POOL_RECYCLE": {
                      "isOptional": false,
                      "description": "Recycle connections after an hour",
                      "defaultValue": "3600"
                    },
                    "INNER_API_KEY_FOR_PLUGIN": {
                      "isOptional": false,
                      "description": "Auth for plugin daemon callbacks",
                      "defaultValue": "{{INNER_API_KEY_FOR_PLUGIN}}"
                    },
                    "SQLALCHEMY_POOL_PRE_PING": {
                      "isOptional": false,
                      "description": "Validate connections before use",
                      "defaultValue": "true"
                    },
                    "ENABLE_COLLABORATION_MODE": {
                      "isOptional": false,
                      "description": "Multi-user canvas editing",
                      "defaultValue": "true"
                    },
                    "ENABLE_SOCIAL_OAUTH_LOGIN": {
                      "isOptional": false,
                      "description": "OAuth sign-in off",
                      "defaultValue": "false"
                    },
                    "FORCE_VERIFYING_SIGNATURE": {
                      "isOptional": false,
                      "description": "Only signed plugins install",
                      "defaultValue": "true"
                    },
                    "SERVER_WORKER_CONNECTIONS": {
                      "isOptional": false,
                      "description": "Connections per worker",
                      "defaultValue": "100"
                    },
                    "ENABLE_EMAIL_PASSWORD_LOGIN": {
                      "isOptional": false,
                      "description": "Email and password sign-in",
                      "defaultValue": "true"
                    },
                    "EVENT_BUS_REDIS_CHANNEL_TYPE": {
                      "isOptional": false,
                      "description": "Event transport mode",
                      "defaultValue": "pubsub"
                    }
                  }
                },
                "2f5a7c28-db2e-4ae7-98e9-5a4e30268eca": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/redis.svg",
                  "name": "Redis",
                  "deploy": {
                    "startCommand": "/bin/sh -c \"rm -rf $RAILWAY_VOLUME_MOUNT_PATH/lost+found/ && exec docker-entrypoint.sh redis-server --requirepass $REDIS_PASSWORD --save 60 1 --dir $RAILWAY_VOLUME_MOUNT_PATH\"",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "redis:8.2"
                  },
                  "variables": {
                    "REDISHOST": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDISPORT": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "6379"
                    },
                    "REDISUSER": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "default"
                    },
                    "REDIS_URL": {
                      "isOptional": false,
                      "description": "Private connection string",
                      "defaultValue": "redis://${{REDISUSER}}:${{REDIS_PASSWORD}}@${{REDISHOST}}:${{REDISPORT}}"
                    },
                    "REDISPASSWORD": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "${{REDIS_PASSWORD}}"
                    },
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "description": "Auth password, read by the server",
                      "defaultValue": "{{REDIS_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "2f5a7c28-db2e-4ae7-98e9-5a4e30268eca": {
                      "mountPath": "/data"
                    }
                  }
                },
                "325dd7be-f952-4f7c-b66a-fca61e577901": {
                  "icon": "https://raw.githubusercontent.com/langgenius/dify/1.16.1/web/public/logo/logo.svg",
                  "name": "sandbox",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/health",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "langgenius/dify-sandbox:0.2.15"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Health check port",
                      "defaultValue": "8194"
                    },
                    "API_KEY": {
                      "isOptional": false,
                      "description": "Auth for API to sandbox calls",
                      "defaultValue": "{{API_KEY}}"
                    },
                    "GIN_MODE": {
                      "isOptional": false,
                      "description": "Production HTTP server mode",
                      "defaultValue": "release"
                    },
                    "HTTP_PROXY": {
                      "isOptional": false,
                      "description": "Forced egress proxy",
                      "defaultValue": "http://${{ssrf-proxy.RAILWAY_PRIVATE_DOMAIN}}:3128"
                    },
                    "HTTPS_PROXY": {
                      "isOptional": false,
                      "description": "Forced egress proxy",
                      "defaultValue": "http://${{ssrf-proxy.RAILWAY_PRIVATE_DOMAIN}}:3128"
                    },
                    "SANDBOX_PORT": {
                      "isOptional": false,
                      "description": "Sandbox listening port",
                      "defaultValue": "8194"
                    },
                    "ENABLE_NETWORK": {
                      "isOptional": false,
                      "description": "Allow network from code nodes",
                      "defaultValue": "true"
                    },
                    "WORKER_TIMEOUT": {
                      "isOptional": false,
                      "description": "Max code execution seconds",
                      "defaultValue": "15"
                    }
                  }
                },
                "3ca3be6c-97aa-485e-93ab-b07054291938": {
                  "icon": "https://raw.githubusercontent.com/langgenius/dify/1.16.1/web/public/logo/logo.svg",
                  "name": "worker",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "langgenius/dify-api:1.16.1"
                  },
                  "variables": {
                    "LANG": {
                      "isOptional": false,
                      "description": "Locale",
                      "defaultValue": "C.UTF-8"
                    },
                    "MODE": {
                      "isOptional": false,
                      "description": "Run as the Celery worker",
                      "defaultValue": "worker"
                    },
                    "DEBUG": {
                      "isOptional": false,
                      "description": "Debug mode off",
                      "defaultValue": "false"
                    },
                    "LC_ALL": {
                      "isOptional": false,
                      "description": "Locale",
                      "defaultValue": "C.UTF-8"
                    },
                    "LOG_TZ": {
                      "isOptional": false,
                      "description": "Log timestamp timezone",
                      "defaultValue": "UTC"
                    },
                    "DB_HOST": {
                      "isOptional": false,
                      "description": "Postgres host",
                      "defaultValue": "${{Postgres.PGHOST}}"
                    },
                    "DB_PORT": {
                      "isOptional": false,
                      "description": "Postgres port",
                      "defaultValue": "${{Postgres.PGPORT}}"
                    },
                    "DB_TYPE": {
                      "isOptional": false,
                      "description": "Database engine",
                      "defaultValue": "postgresql"
                    },
                    "EDITION": {
                      "isOptional": false,
                      "description": "Community edition feature set",
                      "defaultValue": "SELF_HOSTED"
                    },
                    "REDIS_DB": {
                      "isOptional": false,
                      "description": "Redis database index",
                      "defaultValue": "0"
                    },
                    "FILES_URL": {
                      "isOptional": false,
                      "description": "Public file endpoint base",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "LOG_LEVEL": {
                      "isOptional": false,
                      "description": "Application log level",
                      "defaultValue": "INFO"
                    },
                    "S3_REGION": {
                      "isOptional": false,
                      "description": "Bucket region",
                      "defaultValue": "${{difystorage.REGION}}"
                    },
                    "DEPLOY_ENV": {
                      "isOptional": false,
                      "description": "Production behaviour",
                      "defaultValue": "PRODUCTION"
                    },
                    "REDIS_HOST": {
                      "isOptional": false,
                      "description": "Redis host",
                      "defaultValue": "${{Redis.REDISHOST}}"
                    },
                    "REDIS_PORT": {
                      "isOptional": false,
                      "description": "Redis port",
                      "defaultValue": "${{Redis.REDISPORT}}"
                    },
                    "SECRET_KEY": {
                      "isOptional": false,
                      "description": "Shared session signing key",
                      "defaultValue": "${{api.SECRET_KEY}}"
                    },
                    "APP_API_URL": {
                      "isOptional": false,
                      "description": "Web app API base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "APP_WEB_URL": {
                      "isOptional": false,
                      "description": "Web app base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "DB_DATABASE": {
                      "isOptional": false,
                      "description": "Application database",
                      "defaultValue": "${{Postgres.PGDATABASE}}"
                    },
                    "DB_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password",
                      "defaultValue": "${{Postgres.PGPASSWORD}}"
                    },
                    "DB_USERNAME": {
                      "isOptional": false,
                      "description": "Postgres user",
                      "defaultValue": "${{Postgres.PGUSER}}"
                    },
                    "S3_ENDPOINT": {
                      "isOptional": false,
                      "description": "Bucket endpoint",
                      "defaultValue": "${{difystorage.ENDPOINT}}"
                    },
                    "TRIGGER_URL": {
                      "isOptional": false,
                      "description": "Workflow trigger base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "STORAGE_TYPE": {
                      "isOptional": false,
                      "description": "Object storage for uploads",
                      "defaultValue": "s3"
                    },
                    "UV_CACHE_DIR": {
                      "isOptional": false,
                      "description": "Writable dependency cache",
                      "defaultValue": "/tmp/.uv-cache"
                    },
                    "VECTOR_STORE": {
                      "isOptional": false,
                      "description": "Vectors stored in Postgres",
                      "defaultValue": "pgvector"
                    },
                    "PGVECTOR_HOST": {
                      "isOptional": false,
                      "description": "pgvector host",
                      "defaultValue": "${{Postgres.PGHOST}}"
                    },
                    "PGVECTOR_PORT": {
                      "isOptional": false,
                      "description": "pgvector port",
                      "defaultValue": "${{Postgres.PGPORT}}"
                    },
                    "PGVECTOR_USER": {
                      "isOptional": false,
                      "description": "pgvector user",
                      "defaultValue": "${{Postgres.PGUSER}}"
                    },
                    "S3_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Bucket access key",
                      "defaultValue": "${{difystorage.ACCESS_KEY_ID}}"
                    },
                    "S3_SECRET_KEY": {
                      "isOptional": false,
                      "description": "Bucket secret key",
                      "defaultValue": "${{difystorage.SECRET_ACCESS_KEY}}"
                    },
                    "CELERY_BACKEND": {
                      "isOptional": false,
                      "description": "Celery result backend",
                      "defaultValue": "redis"
                    },
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "description": "Redis password",
                      "defaultValue": "${{Redis.REDISPASSWORD}}"
                    },
                    "REDIS_USERNAME": {
                      "isOptional": false,
                      "description": "Redis user",
                      "defaultValue": "${{Redis.REDISUSER}}"
                    },
                    "S3_BUCKET_NAME": {
                      "isOptional": false,
                      "description": "Bucket name",
                      "defaultValue": "${{difystorage.BUCKET}}"
                    },
                    "CONSOLE_API_URL": {
                      "isOptional": false,
                      "description": "Console API base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "CONSOLE_WEB_URL": {
                      "isOptional": false,
                      "description": "Console base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "MARKETPLACE_URL": {
                      "isOptional": false,
                      "description": "Marketplace site",
                      "defaultValue": "https://marketplace.dify.ai"
                    },
                    "SERVICE_API_URL": {
                      "isOptional": false,
                      "description": "Published app API base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "PYTHONIOENCODING": {
                      "isOptional": false,
                      "description": "Python IO encoding",
                      "defaultValue": "utf-8"
                    },
                    "S3_ADDRESS_STYLE": {
                      "isOptional": false,
                      "description": "Bucket addressing style",
                      "defaultValue": "auto"
                    },
                    "CELERY_AUTO_SCALE": {
                      "isOptional": false,
                      "description": "Autoscale sizes from host cores, keep off",
                      "defaultValue": "false"
                    },
                    "CELERY_BROKER_URL": {
                      "isOptional": false,
                      "description": "Task queue",
                      "defaultValue": "redis://${{Redis.REDISUSER}}:${{Redis.REDISPASSWORD}}@${{Redis.REDISHOST}}:${{Redis.REDISPORT}}/1"
                    },
                    "MIGRATION_ENABLED": {
                      "isOptional": false,
                      "description": "Migrations run on the API only",
                      "defaultValue": "false"
                    },
                    "PGVECTOR_DATABASE": {
                      "isOptional": false,
                      "description": "pgvector database",
                      "defaultValue": "${{Postgres.PGDATABASE}}"
                    },
                    "PGVECTOR_PASSWORD": {
                      "isOptional": false,
                      "description": "pgvector password",
                      "defaultValue": "${{Postgres.PGPASSWORD}}"
                    },
                    "PLUGIN_DAEMON_KEY": {
                      "isOptional": false,
                      "description": "Plugin daemon auth",
                      "defaultValue": "${{plugin-daemon.SERVER_KEY}}"
                    },
                    "PLUGIN_DAEMON_URL": {
                      "isOptional": false,
                      "description": "Plugin daemon URL",
                      "defaultValue": "http://${{plugin-daemon.RAILWAY_PRIVATE_DOMAIN}}:5002"
                    },
                    "INTERNAL_FILES_URL": {
                      "isOptional": false,
                      "description": "Private file endpoint base",
                      "defaultValue": "http://${{api.RAILWAY_PRIVATE_DOMAIN}}:5001"
                    },
                    "SCARF_NO_ANALYTICS": {
                      "isOptional": false,
                      "description": "Disable package analytics",
                      "defaultValue": "true"
                    },
                    "CELERY_WORKER_CLASS": {
                      "isOptional": false,
                      "description": "Celery pool implementation",
                      "defaultValue": "gevent"
                    },
                    "EVENT_BUS_REDIS_URL": {
                      "isOptional": false,
                      "description": "Pub/sub channel",
                      "defaultValue": "redis://${{Redis.REDISUSER}}:${{Redis.REDISPASSWORD}}@${{Redis.REDISHOST}}:${{Redis.REDISPORT}}/0"
                    },
                    "MARKETPLACE_API_URL": {
                      "isOptional": false,
                      "description": "Marketplace API",
                      "defaultValue": "https://marketplace.dify.ai"
                    },
                    "MARKETPLACE_ENABLED": {
                      "isOptional": false,
                      "description": "Plugin marketplace enabled",
                      "defaultValue": "true"
                    },
                    "SSRF_PROXY_HTTP_URL": {
                      "isOptional": false,
                      "description": "Outbound HTTP proxy",
                      "defaultValue": "http://${{ssrf-proxy.RAILWAY_PRIVATE_DOMAIN}}:3128"
                    },
                    "CELERY_WORKER_AMOUNT": {
                      "isOptional": false,
                      "description": "Worker concurrency",
                      "defaultValue": "4"
                    },
                    "SQLALCHEMY_POOL_SIZE": {
                      "isOptional": false,
                      "description": "Connection pool size",
                      "defaultValue": "20"
                    },
                    "SSRF_PROXY_HTTPS_URL": {
                      "isOptional": false,
                      "description": "Outbound HTTPS proxy",
                      "defaultValue": "http://${{ssrf-proxy.RAILWAY_PRIVATE_DOMAIN}}:3128"
                    },
                    "ENDPOINT_URL_TEMPLATE": {
                      "isOptional": false,
                      "description": "Plugin webhook URL shape",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}/e/{hook_id}"
                    },
                    "CODE_EXECUTION_API_KEY": {
                      "isOptional": false,
                      "description": "Code sandbox auth",
                      "defaultValue": "${{sandbox.API_KEY}}"
                    },
                    "CODE_EXECUTION_ENDPOINT": {
                      "isOptional": false,
                      "description": "Code sandbox URL",
                      "defaultValue": "http://${{sandbox.RAILWAY_PRIVATE_DOMAIN}}:8194"
                    },
                    "PGVECTOR_MAX_CONNECTION": {
                      "isOptional": false,
                      "description": "Max vector pool connections",
                      "defaultValue": "5"
                    },
                    "PGVECTOR_MIN_CONNECTION": {
                      "isOptional": false,
                      "description": "Min vector pool connections",
                      "defaultValue": "1"
                    },
                    "SQLALCHEMY_POOL_RECYCLE": {
                      "isOptional": false,
                      "description": "Recycle connections after an hour",
                      "defaultValue": "3600"
                    },
                    "INNER_API_KEY_FOR_PLUGIN": {
                      "isOptional": false,
                      "description": "Shared plugin callback auth",
                      "defaultValue": "${{api.INNER_API_KEY_FOR_PLUGIN}}"
                    },
                    "SQLALCHEMY_POOL_PRE_PING": {
                      "isOptional": false,
                      "description": "Validate connections before use",
                      "defaultValue": "true"
                    },
                    "FORCE_VERIFYING_SIGNATURE": {
                      "isOptional": false,
                      "description": "Only signed plugins install",
                      "defaultValue": "true"
                    },
                    "EVENT_BUS_REDIS_CHANNEL_TYPE": {
                      "isOptional": false,
                      "description": "Event transport mode",
                      "defaultValue": "pubsub"
                    },
                    "RAILWAY_DEPLOYMENT_DRAINING_SECONDS": {
                      "isOptional": false,
                      "description": "Let in-flight jobs finish",
                      "defaultValue": "90"
                    }
                  }
                },
                "539099aa-746a-4d84-8902-8bb975281f36": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/caddy.svg",
                  "name": "proxy",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "repo": "https://github.com/gridalpha/dify-railway",
                    "rootDirectory": "proxy"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Caddy listening port",
                      "defaultValue": "8080"
                    },
                    "DIFY_API_UPSTREAM": {
                      "isOptional": false,
                      "description": "Console and service API backend",
                      "defaultValue": "${{api.RAILWAY_PRIVATE_DOMAIN}}:5001"
                    },
                    "DIFY_WEB_UPSTREAM": {
                      "isOptional": false,
                      "description": "Frontend backend",
                      "defaultValue": "${{web.RAILWAY_PRIVATE_DOMAIN}}:3000"
                    },
                    "DIFY_API_WEBSOCKET_UPSTREAM": {
                      "isOptional": false,
                      "description": "Collaboration socket backend",
                      "defaultValue": "${{api-websocket.RAILWAY_PRIVATE_DOMAIN}}:5001"
                    },
                    "DIFY_PLUGIN_DAEMON_UPSTREAM": {
                      "isOptional": false,
                      "description": "Plugin webhook backend",
                      "defaultValue": "${{plugin-daemon.RAILWAY_PRIVATE_DOMAIN}}:5002"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8080": {
                        "port": 8080
                      }
                    }
                  }
                },
                "5a76e6f4-0007-4180-9897-39c9562dbad2": {
                  "icon": "https://raw.githubusercontent.com/langgenius/dify/1.16.1/web/public/logo/logo.svg",
                  "name": "worker-beat",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "langgenius/dify-api:1.16.1"
                  },
                  "variables": {
                    "LANG": {
                      "isOptional": false,
                      "description": "Locale",
                      "defaultValue": "C.UTF-8"
                    },
                    "MODE": {
                      "isOptional": false,
                      "description": "Run as the Celery scheduler",
                      "defaultValue": "beat"
                    },
                    "DEBUG": {
                      "isOptional": false,
                      "description": "Debug mode off",
                      "defaultValue": "false"
                    },
                    "LC_ALL": {
                      "isOptional": false,
                      "description": "Locale",
                      "defaultValue": "C.UTF-8"
                    },
                    "LOG_TZ": {
                      "isOptional": false,
                      "description": "Log timestamp timezone",
                      "defaultValue": "UTC"
                    },
                    "DB_HOST": {
                      "isOptional": false,
                      "description": "Postgres host",
                      "defaultValue": "${{Postgres.PGHOST}}"
                    },
                    "DB_PORT": {
                      "isOptional": false,
                      "description": "Postgres port",
                      "defaultValue": "${{Postgres.PGPORT}}"
                    },
                    "DB_TYPE": {
                      "isOptional": false,
                      "description": "Database engine",
                      "defaultValue": "postgresql"
                    },
                    "EDITION": {
                      "isOptional": false,
                      "description": "Community edition feature set",
                      "defaultValue": "SELF_HOSTED"
                    },
                    "REDIS_DB": {
                      "isOptional": false,
                      "description": "Redis database index",
                      "defaultValue": "0"
                    },
                    "FILES_URL": {
                      "isOptional": false,
                      "description": "Public file endpoint base",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "LOG_LEVEL": {
                      "isOptional": false,
                      "description": "Application log level",
                      "defaultValue": "INFO"
                    },
                    "S3_REGION": {
                      "isOptional": false,
                      "description": "Bucket region",
                      "defaultValue": "${{difystorage.REGION}}"
                    },
                    "DEPLOY_ENV": {
                      "isOptional": false,
                      "description": "Production behaviour",
                      "defaultValue": "PRODUCTION"
                    },
                    "REDIS_HOST": {
                      "isOptional": false,
                      "description": "Redis host",
                      "defaultValue": "${{Redis.REDISHOST}}"
                    },
                    "REDIS_PORT": {
                      "isOptional": false,
                      "description": "Redis port",
                      "defaultValue": "${{Redis.REDISPORT}}"
                    },
                    "SECRET_KEY": {
                      "isOptional": false,
                      "description": "Shared session signing key",
                      "defaultValue": "${{api.SECRET_KEY}}"
                    },
                    "APP_API_URL": {
                      "isOptional": false,
                      "description": "Web app API base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "APP_WEB_URL": {
                      "isOptional": false,
                      "description": "Web app base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "DB_DATABASE": {
                      "isOptional": false,
                      "description": "Application database",
                      "defaultValue": "${{Postgres.PGDATABASE}}"
                    },
                    "DB_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password",
                      "defaultValue": "${{Postgres.PGPASSWORD}}"
                    },
                    "DB_USERNAME": {
                      "isOptional": false,
                      "description": "Postgres user",
                      "defaultValue": "${{Postgres.PGUSER}}"
                    },
                    "S3_ENDPOINT": {
                      "isOptional": false,
                      "description": "Bucket endpoint",
                      "defaultValue": "${{difystorage.ENDPOINT}}"
                    },
                    "STORAGE_TYPE": {
                      "isOptional": false,
                      "description": "Object storage for uploads",
                      "defaultValue": "s3"
                    },
                    "UV_CACHE_DIR": {
                      "isOptional": false,
                      "description": "Writable dependency cache",
                      "defaultValue": "/tmp/.uv-cache"
                    },
                    "VECTOR_STORE": {
                      "isOptional": false,
                      "description": "Vectors stored in Postgres",
                      "defaultValue": "pgvector"
                    },
                    "PGVECTOR_HOST": {
                      "isOptional": false,
                      "description": "pgvector host",
                      "defaultValue": "${{Postgres.PGHOST}}"
                    },
                    "PGVECTOR_PORT": {
                      "isOptional": false,
                      "description": "pgvector port",
                      "defaultValue": "${{Postgres.PGPORT}}"
                    },
                    "PGVECTOR_USER": {
                      "isOptional": false,
                      "description": "pgvector user",
                      "defaultValue": "${{Postgres.PGUSER}}"
                    },
                    "S3_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Bucket access key",
                      "defaultValue": "${{difystorage.ACCESS_KEY_ID}}"
                    },
                    "S3_SECRET_KEY": {
                      "isOptional": false,
                      "description": "Bucket secret key",
                      "defaultValue": "${{difystorage.SECRET_ACCESS_KEY}}"
                    },
                    "CELERY_BACKEND": {
                      "isOptional": false,
                      "description": "Celery result backend",
                      "defaultValue": "redis"
                    },
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "description": "Redis password",
                      "defaultValue": "${{Redis.REDISPASSWORD}}"
                    },
                    "REDIS_USERNAME": {
                      "isOptional": false,
                      "description": "Redis user",
                      "defaultValue": "${{Redis.REDISUSER}}"
                    },
                    "S3_BUCKET_NAME": {
                      "isOptional": false,
                      "description": "Bucket name",
                      "defaultValue": "${{difystorage.BUCKET}}"
                    },
                    "CONSOLE_API_URL": {
                      "isOptional": false,
                      "description": "Console API base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "CONSOLE_WEB_URL": {
                      "isOptional": false,
                      "description": "Console base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "SERVICE_API_URL": {
                      "isOptional": false,
                      "description": "Published app API base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "PYTHONIOENCODING": {
                      "isOptional": false,
                      "description": "Python IO encoding",
                      "defaultValue": "utf-8"
                    },
                    "S3_ADDRESS_STYLE": {
                      "isOptional": false,
                      "description": "Bucket addressing style",
                      "defaultValue": "auto"
                    },
                    "CELERY_BROKER_URL": {
                      "isOptional": false,
                      "description": "Task queue",
                      "defaultValue": "redis://${{Redis.REDISUSER}}:${{Redis.REDISPASSWORD}}@${{Redis.REDISHOST}}:${{Redis.REDISPORT}}/1"
                    },
                    "MIGRATION_ENABLED": {
                      "isOptional": false,
                      "description": "Migrations run on the API only",
                      "defaultValue": "false"
                    },
                    "PGVECTOR_DATABASE": {
                      "isOptional": false,
                      "description": "pgvector database",
                      "defaultValue": "${{Postgres.PGDATABASE}}"
                    },
                    "PGVECTOR_PASSWORD": {
                      "isOptional": false,
                      "description": "pgvector password",
                      "defaultValue": "${{Postgres.PGPASSWORD}}"
                    },
                    "PLUGIN_DAEMON_KEY": {
                      "isOptional": false,
                      "description": "Plugin daemon auth",
                      "defaultValue": "${{plugin-daemon.SERVER_KEY}}"
                    },
                    "PLUGIN_DAEMON_URL": {
                      "isOptional": false,
                      "description": "Plugin daemon URL",
                      "defaultValue": "http://${{plugin-daemon.RAILWAY_PRIVATE_DOMAIN}}:5002"
                    },
                    "SCARF_NO_ANALYTICS": {
                      "isOptional": false,
                      "description": "Disable package analytics",
                      "defaultValue": "true"
                    },
                    "SSRF_PROXY_HTTP_URL": {
                      "isOptional": false,
                      "description": "Outbound HTTP proxy",
                      "defaultValue": "http://${{ssrf-proxy.RAILWAY_PRIVATE_DOMAIN}}:3128"
                    },
                    "SQLALCHEMY_POOL_SIZE": {
                      "isOptional": false,
                      "description": "Connection pool size",
                      "defaultValue": "5"
                    },
                    "SSRF_PROXY_HTTPS_URL": {
                      "isOptional": false,
                      "description": "Outbound HTTPS proxy",
                      "defaultValue": "http://${{ssrf-proxy.RAILWAY_PRIVATE_DOMAIN}}:3128"
                    },
                    "SQLALCHEMY_POOL_RECYCLE": {
                      "isOptional": false,
                      "description": "Recycle connections after an hour",
                      "defaultValue": "3600"
                    },
                    "INNER_API_KEY_FOR_PLUGIN": {
                      "isOptional": false,
                      "description": "Shared plugin callback auth",
                      "defaultValue": "${{api.INNER_API_KEY_FOR_PLUGIN}}"
                    },
                    "SQLALCHEMY_POOL_PRE_PING": {
                      "isOptional": false,
                      "description": "Validate connections before use",
                      "defaultValue": "true"
                    },
                    "RAILWAY_DEPLOYMENT_DRAINING_SECONDS": {
                      "isOptional": false,
                      "description": "Clean shutdown window",
                      "defaultValue": "30"
                    }
                  }
                },
                "7fab093c-7ade-43d0-acf9-94d5ba5b1f5d": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/postgresql.svg",
                  "name": "Postgres",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/railwayapp-templates/postgres-ssl:18"
                  },
                  "variables": {
                    "PGDATA": {
                      "isOptional": false,
                      "description": "Cluster location on the volume",
                      "defaultValue": "/var/lib/postgresql/data/pgdata"
                    },
                    "PGHOST": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PGPORT": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "5432"
                    },
                    "PGUSER": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "${{POSTGRES_USER}}"
                    },
                    "PGDATABASE": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "${{POSTGRES_DB}}"
                    },
                    "PGPASSWORD": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "${{POSTGRES_PASSWORD}}"
                    },
                    "POSTGRES_DB": {
                      "isOptional": false,
                      "description": "Database created on first boot",
                      "defaultValue": "railway"
                    },
                    "DATABASE_URL": {
                      "isOptional": false,
                      "description": "Private connection string",
                      "defaultValue": "postgresql://${{PGUSER}}:${{POSTGRES_PASSWORD}}@${{RAILWAY_PRIVATE_DOMAIN}}:5432/${{PGDATABASE}}"
                    },
                    "POSTGRES_USER": {
                      "isOptional": false,
                      "description": "Superuser created on first boot",
                      "defaultValue": "postgres"
                    },
                    "SSL_CERT_DAYS": {
                      "isOptional": false,
                      "description": "SSL certificate expiry in days",
                      "defaultValue": "820"
                    },
                    "POSTGRES_PASSWORD": {
                      "isOptional": false,
                      "description": "Superuser password",
                      "defaultValue": "{{POSTGRES_PASSWORD}}"
                    },
                    "RAILWAY_DEPLOYMENT_DRAINING_SECONDS": {
                      "isOptional": false,
                      "description": "Clean shutdown window",
                      "defaultValue": "60"
                    }
                  },
                  "volumeMounts": {
                    "7fab093c-7ade-43d0-acf9-94d5ba5b1f5d": {
                      "mountPath": "/var/lib/postgresql/data"
                    }
                  }
                },
                "8a180ea8-afd9-45c1-8a2b-f23de441de25": {
                  "icon": "https://raw.githubusercontent.com/langgenius/dify/1.16.1/web/public/logo/logo.svg",
                  "name": "web",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/signin",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "langgenius/dify-web:1.16.1"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Next.js listening port",
                      "defaultValue": "3000"
                    },
                    "DEPLOY_ENV": {
                      "isOptional": false,
                      "description": "Disables development behaviour",
                      "defaultValue": "PRODUCTION"
                    },
                    "ALLOW_EMBED": {
                      "isOptional": false,
                      "description": "Disallow embedding the console in iframes",
                      "defaultValue": "false"
                    },
                    "APP_API_URL": {
                      "isOptional": false,
                      "description": "Published app API base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "MAX_TOOLS_NUM": {
                      "isOptional": false,
                      "description": "Tools per agent ceiling",
                      "defaultValue": "10"
                    },
                    "MAX_TREE_DEPTH": {
                      "isOptional": false,
                      "description": "Workflow depth ceiling",
                      "defaultValue": "50"
                    },
                    "CONSOLE_API_URL": {
                      "isOptional": false,
                      "description": "Console API base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "CONSOLE_WEB_URL": {
                      "isOptional": false,
                      "description": "Console base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "MARKETPLACE_URL": {
                      "isOptional": false,
                      "description": "Plugin marketplace site",
                      "defaultValue": "https://marketplace.dify.ai"
                    },
                    "TOP_K_MAX_VALUE": {
                      "isOptional": false,
                      "description": "Retrieval top-k ceiling",
                      "defaultValue": "10"
                    },
                    "MAX_ITERATIONS_NUM": {
                      "isOptional": false,
                      "description": "Iteration node ceiling",
                      "defaultValue": "99"
                    },
                    "MAX_PARALLEL_LIMIT": {
                      "isOptional": false,
                      "description": "Parallel branch ceiling",
                      "defaultValue": "10"
                    },
                    "LOOP_NODE_MAX_COUNT": {
                      "isOptional": false,
                      "description": "Loop node iteration ceiling",
                      "defaultValue": "100"
                    },
                    "MARKETPLACE_API_URL": {
                      "isOptional": false,
                      "description": "Plugin marketplace API",
                      "defaultValue": "https://marketplace.dify.ai"
                    },
                    "NEXT_PUBLIC_SOCKET_URL": {
                      "isOptional": false,
                      "description": "Collaboration websocket URL",
                      "defaultValue": "wss://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "SERVER_CONSOLE_API_URL": {
                      "isOptional": false,
                      "description": "Server-side API calls",
                      "defaultValue": "http://${{api.RAILWAY_PRIVATE_DOMAIN}}:5001"
                    },
                    "NEXT_TELEMETRY_DISABLED": {
                      "isOptional": false,
                      "description": "Turns off Next.js telemetry",
                      "defaultValue": "1"
                    },
                    "ALLOW_UNSAFE_DATA_SCHEME": {
                      "isOptional": false,
                      "description": "Block data: URLs in rendered output",
                      "defaultValue": "false"
                    },
                    "ENABLE_WEBSITE_FIRECRAWL": {
                      "isOptional": false,
                      "description": "Firecrawl web import",
                      "defaultValue": "true"
                    },
                    "ENABLE_WEBSITE_JINAREADER": {
                      "isOptional": false,
                      "description": "Jina Reader web import",
                      "defaultValue": "true"
                    },
                    "ENABLE_WEBSITE_WATERCRAWL": {
                      "isOptional": false,
                      "description": "Watercrawl web import",
                      "defaultValue": "true"
                    },
                    "EXPERIMENTAL_ENABLE_VINEXT": {
                      "isOptional": false,
                      "description": "Experimental frontend runtime off",
                      "defaultValue": "false"
                    },
                    "TEXT_GENERATION_TIMEOUT_MS": {
                      "isOptional": false,
                      "description": "Client generation timeout",
                      "defaultValue": "60000"
                    },
                    "NEXT_PUBLIC_ENABLE_AGENT_V2": {
                      "isOptional": false,
                      "description": "Agent v2 surface off; backend not deployed",
                      "defaultValue": "false"
                    },
                    "WORKFLOW_GENERATION_TIMEOUT_MS": {
                      "isOptional": false,
                      "description": "Client workflow timeout",
                      "defaultValue": "180000"
                    },
                    "INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH": {
                      "isOptional": false,
                      "description": "Max chunk size when indexing",
                      "defaultValue": "4000"
                    }
                  }
                },
                "af1dcf31-e71b-4354-8165-451d250b691a": {
                  "icon": "https://raw.githubusercontent.com/langgenius/dify/1.16.1/web/public/logo/logo.svg",
                  "name": "api-websocket",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/health",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "langgenius/dify-api:1.16.1"
                  },
                  "variables": {
                    "LANG": {
                      "isOptional": false,
                      "description": "Locale",
                      "defaultValue": "C.UTF-8"
                    },
                    "MODE": {
                      "isOptional": false,
                      "description": "Same image, websocket role",
                      "defaultValue": "api"
                    },
                    "PORT": {
                      "isOptional": false,
                      "description": "Health check port",
                      "defaultValue": "5001"
                    },
                    "DEBUG": {
                      "isOptional": false,
                      "description": "Debug mode off",
                      "defaultValue": "false"
                    },
                    "LC_ALL": {
                      "isOptional": false,
                      "description": "Locale",
                      "defaultValue": "C.UTF-8"
                    },
                    "LOG_TZ": {
                      "isOptional": false,
                      "description": "Log timestamp timezone",
                      "defaultValue": "UTC"
                    },
                    "DB_HOST": {
                      "isOptional": false,
                      "description": "Postgres host",
                      "defaultValue": "${{Postgres.PGHOST}}"
                    },
                    "DB_PORT": {
                      "isOptional": false,
                      "description": "Postgres port",
                      "defaultValue": "${{Postgres.PGPORT}}"
                    },
                    "DB_TYPE": {
                      "isOptional": false,
                      "description": "Database engine",
                      "defaultValue": "postgresql"
                    },
                    "EDITION": {
                      "isOptional": false,
                      "description": "Community edition feature set",
                      "defaultValue": "SELF_HOSTED"
                    },
                    "REDIS_DB": {
                      "isOptional": false,
                      "description": "Redis database index",
                      "defaultValue": "0"
                    },
                    "DIFY_PORT": {
                      "isOptional": false,
                      "description": "Application listening port",
                      "defaultValue": "5001"
                    },
                    "FILES_URL": {
                      "isOptional": false,
                      "description": "Public file endpoint base",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "LOG_LEVEL": {
                      "isOptional": false,
                      "description": "Application log level",
                      "defaultValue": "INFO"
                    },
                    "S3_REGION": {
                      "isOptional": false,
                      "description": "Bucket region",
                      "defaultValue": "${{difystorage.REGION}}"
                    },
                    "DEPLOY_ENV": {
                      "isOptional": false,
                      "description": "Production behaviour",
                      "defaultValue": "PRODUCTION"
                    },
                    "REDIS_HOST": {
                      "isOptional": false,
                      "description": "Redis host",
                      "defaultValue": "${{Redis.REDISHOST}}"
                    },
                    "REDIS_PORT": {
                      "isOptional": false,
                      "description": "Redis port",
                      "defaultValue": "${{Redis.REDISPORT}}"
                    },
                    "SECRET_KEY": {
                      "isOptional": false,
                      "description": "Shared session signing key",
                      "defaultValue": "${{api.SECRET_KEY}}"
                    },
                    "APP_API_URL": {
                      "isOptional": false,
                      "description": "Web app API base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "APP_WEB_URL": {
                      "isOptional": false,
                      "description": "Web app base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "DB_DATABASE": {
                      "isOptional": false,
                      "description": "Application database",
                      "defaultValue": "${{Postgres.PGDATABASE}}"
                    },
                    "DB_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password",
                      "defaultValue": "${{Postgres.PGPASSWORD}}"
                    },
                    "DB_USERNAME": {
                      "isOptional": false,
                      "description": "Postgres user",
                      "defaultValue": "${{Postgres.PGUSER}}"
                    },
                    "FLASK_DEBUG": {
                      "isOptional": false,
                      "description": "Flask debug off",
                      "defaultValue": "false"
                    },
                    "S3_ENDPOINT": {
                      "isOptional": false,
                      "description": "Bucket endpoint",
                      "defaultValue": "${{difystorage.ENDPOINT}}"
                    },
                    "STORAGE_TYPE": {
                      "isOptional": false,
                      "description": "Object storage for uploads",
                      "defaultValue": "s3"
                    },
                    "UV_CACHE_DIR": {
                      "isOptional": false,
                      "description": "Writable dependency cache",
                      "defaultValue": "/tmp/.uv-cache"
                    },
                    "VECTOR_STORE": {
                      "isOptional": false,
                      "description": "Vectors stored in Postgres",
                      "defaultValue": "pgvector"
                    },
                    "PGVECTOR_HOST": {
                      "isOptional": false,
                      "description": "pgvector host",
                      "defaultValue": "${{Postgres.PGHOST}}"
                    },
                    "PGVECTOR_PORT": {
                      "isOptional": false,
                      "description": "pgvector port",
                      "defaultValue": "${{Postgres.PGPORT}}"
                    },
                    "PGVECTOR_USER": {
                      "isOptional": false,
                      "description": "pgvector user",
                      "defaultValue": "${{Postgres.PGUSER}}"
                    },
                    "S3_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Bucket access key",
                      "defaultValue": "${{difystorage.ACCESS_KEY_ID}}"
                    },
                    "S3_SECRET_KEY": {
                      "isOptional": false,
                      "description": "Bucket secret key",
                      "defaultValue": "${{difystorage.SECRET_ACCESS_KEY}}"
                    },
                    "ALLOW_REGISTER": {
                      "isOptional": false,
                      "description": "Public sign-up disabled",
                      "defaultValue": "false"
                    },
                    "CELERY_BACKEND": {
                      "isOptional": false,
                      "description": "Celery result backend",
                      "defaultValue": "redis"
                    },
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "description": "Redis password",
                      "defaultValue": "${{Redis.REDISPASSWORD}}"
                    },
                    "REDIS_USERNAME": {
                      "isOptional": false,
                      "description": "Redis user",
                      "defaultValue": "${{Redis.REDISUSER}}"
                    },
                    "S3_BUCKET_NAME": {
                      "isOptional": false,
                      "description": "Bucket name",
                      "defaultValue": "${{difystorage.BUCKET}}"
                    },
                    "CONSOLE_API_URL": {
                      "isOptional": false,
                      "description": "Console API base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "CONSOLE_WEB_URL": {
                      "isOptional": false,
                      "description": "Console base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "SERVICE_API_URL": {
                      "isOptional": false,
                      "description": "Published app API base URL",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "GUNICORN_TIMEOUT": {
                      "isOptional": false,
                      "description": "Request timeout",
                      "defaultValue": "360"
                    },
                    "PYTHONIOENCODING": {
                      "isOptional": false,
                      "description": "Python IO encoding",
                      "defaultValue": "utf-8"
                    },
                    "S3_ADDRESS_STYLE": {
                      "isOptional": false,
                      "description": "Bucket addressing style",
                      "defaultValue": "auto"
                    },
                    "CELERY_BROKER_URL": {
                      "isOptional": false,
                      "description": "Task queue",
                      "defaultValue": "redis://${{Redis.REDISUSER}}:${{Redis.REDISPASSWORD}}@${{Redis.REDISHOST}}:${{Redis.REDISPORT}}/1"
                    },
                    "DIFY_BIND_ADDRESS": {
                      "isOptional": false,
                      "description": "Listen on all interfaces",
                      "defaultValue": "0.0.0.0"
                    },
                    "MIGRATION_ENABLED": {
                      "isOptional": false,
                      "description": "Migrations run on the API only",
                      "defaultValue": "false"
                    },
                    "PGVECTOR_DATABASE": {
                      "isOptional": false,
                      "description": "pgvector database",
                      "defaultValue": "${{Postgres.PGDATABASE}}"
                    },
                    "PGVECTOR_PASSWORD": {
                      "isOptional": false,
                      "description": "pgvector password",
                      "defaultValue": "${{Postgres.PGPASSWORD}}"
                    },
                    "PLUGIN_DAEMON_KEY": {
                      "isOptional": false,
                      "description": "Plugin daemon auth",
                      "defaultValue": "${{plugin-daemon.SERVER_KEY}}"
                    },
                    "PLUGIN_DAEMON_URL": {
                      "isOptional": false,
                      "description": "Plugin daemon URL",
                      "defaultValue": "http://${{plugin-daemon.RAILWAY_PRIVATE_DOMAIN}}:5002"
                    },
                    "INTERNAL_FILES_URL": {
                      "isOptional": false,
                      "description": "Private file endpoint base",
                      "defaultValue": "http://${{api.RAILWAY_PRIVATE_DOMAIN}}:5001"
                    },
                    "SCARF_NO_ANALYTICS": {
                      "isOptional": false,
                      "description": "Disable package analytics",
                      "defaultValue": "true"
                    },
                    "EVENT_BUS_REDIS_URL": {
                      "isOptional": false,
                      "description": "Pub/sub channel",
                      "defaultValue": "redis://${{Redis.REDISUSER}}:${{Redis.REDISPASSWORD}}@${{Redis.REDISHOST}}:${{Redis.REDISPORT}}/0"
                    },
                    "SERVER_WORKER_CLASS": {
                      "isOptional": false,
                      "description": "Websocket worker class",
                      "defaultValue": "geventwebsocket.gunicorn.workers.GeventWebSocketWorker"
                    },
                    "SSRF_PROXY_HTTP_URL": {
                      "isOptional": false,
                      "description": "Outbound HTTP proxy",
                      "defaultValue": "http://${{ssrf-proxy.RAILWAY_PRIVATE_DOMAIN}}:3128"
                    },
                    "REDIS_SOCKET_TIMEOUT": {
                      "isOptional": false,
                      "description": "High, or the collaboration socket drops events",
                      "defaultValue": "300"
                    },
                    "SERVER_WORKER_AMOUNT": {
                      "isOptional": false,
                      "description": "Gunicorn worker processes",
                      "defaultValue": "1"
                    },
                    "SQLALCHEMY_POOL_SIZE": {
                      "isOptional": false,
                      "description": "Connection pool size",
                      "defaultValue": "10"
                    },
                    "SSRF_PROXY_HTTPS_URL": {
                      "isOptional": false,
                      "description": "Outbound HTTPS proxy",
                      "defaultValue": "http://${{ssrf-proxy.RAILWAY_PRIVATE_DOMAIN}}:3128"
                    },
                    "ALLOW_CREATE_WORKSPACE": {
                      "isOptional": false,
                      "description": "Workspace self-creation disabled",
                      "defaultValue": "false"
                    },
                    "SQLALCHEMY_POOL_RECYCLE": {
                      "isOptional": false,
                      "description": "Recycle connections after an hour",
                      "defaultValue": "3600"
                    },
                    "INNER_API_KEY_FOR_PLUGIN": {
                      "isOptional": false,
                      "description": "Shared plugin callback auth",
                      "defaultValue": "${{api.INNER_API_KEY_FOR_PLUGIN}}"
                    },
                    "SQLALCHEMY_POOL_PRE_PING": {
                      "isOptional": false,
                      "description": "Validate connections before use",
                      "defaultValue": "true"
                    },
                    "ENABLE_COLLABORATION_MODE": {
                      "isOptional": false,
                      "description": "Multi-user canvas editing",
                      "defaultValue": "true"
                    },
                    "SERVER_WORKER_CONNECTIONS": {
                      "isOptional": false,
                      "description": "Concurrent websocket connections",
                      "defaultValue": "1000"
                    },
                    "EVENT_BUS_REDIS_CHANNEL_TYPE": {
                      "isOptional": false,
                      "description": "Event transport mode",
                      "defaultValue": "pubsub"
                    }
                  }
                },
                "e0eae907-9bf9-407c-8710-f7e42e6bb6bd": {
                  "icon": "https://www.squid-cache.org/Artwork/SN.png",
                  "name": "ssrf-proxy",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "repo": "https://github.com/gridalpha/dify-railway",
                    "rootDirectory": "ssrf-proxy"
                  },
                  "variables": {
                    "HTTP_PORT": {
                      "isOptional": false,
                      "description": "Squid listening port",
                      "defaultValue": "3128"
                    },
                    "COREDUMP_DIR": {
                      "isOptional": false,
                      "description": "Squid coredump directory",
                      "defaultValue": "/var/spool/squid"
                    }
                  }
                },
                "eea6322a-bf31-4150-ad85-eda292cb800b": {
                  "icon": "https://raw.githubusercontent.com/langgenius/dify/1.16.1/web/public/logo/logo.svg",
                  "name": "plugin-daemon",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/health/check",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "langgenius/dify-plugin-daemon:0.6.3-local"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Health check port",
                      "defaultValue": "5002"
                    },
                    "DB_HOST": {
                      "isOptional": false,
                      "description": "Postgres host",
                      "defaultValue": "${{Postgres.PGHOST}}"
                    },
                    "DB_PORT": {
                      "isOptional": false,
                      "description": "Postgres port",
                      "defaultValue": "${{Postgres.PGPORT}}"
                    },
                    "DB_TYPE": {
                      "isOptional": false,
                      "description": "Database engine",
                      "defaultValue": "postgresql"
                    },
                    "PLATFORM": {
                      "isOptional": false,
                      "description": "Run plugins in-process",
                      "defaultValue": "local"
                    },
                    "REDIS_DB": {
                      "isOptional": false,
                      "description": "Redis database index",
                      "defaultValue": "0"
                    },
                    "REDIS_HOST": {
                      "isOptional": false,
                      "description": "Redis host",
                      "defaultValue": "${{Redis.REDISHOST}}"
                    },
                    "REDIS_PORT": {
                      "isOptional": false,
                      "description": "Redis port",
                      "defaultValue": "${{Redis.REDISPORT}}"
                    },
                    "SERVER_KEY": {
                      "isOptional": false,
                      "description": "Auth for API to daemon calls",
                      "defaultValue": "{{SERVER_KEY}}"
                    },
                    "DB_DATABASE": {
                      "isOptional": false,
                      "description": "Created by the daemon on first boot",
                      "defaultValue": "dify_plugin"
                    },
                    "DB_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password",
                      "defaultValue": "${{Postgres.PGPASSWORD}}"
                    },
                    "DB_SSL_MODE": {
                      "isOptional": false,
                      "description": "Private network, no TLS needed",
                      "defaultValue": "disable"
                    },
                    "DB_USERNAME": {
                      "isOptional": false,
                      "description": "Postgres user",
                      "defaultValue": "${{Postgres.PGUSER}}"
                    },
                    "SERVER_PORT": {
                      "isOptional": false,
                      "description": "Daemon listening port",
                      "defaultValue": "5002"
                    },
                    "PPROF_ENABLED": {
                      "isOptional": false,
                      "description": "Profiling endpoint off",
                      "defaultValue": "false"
                    },
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "description": "Redis password",
                      "defaultValue": "${{Redis.REDISPASSWORD}}"
                    },
                    "REDIS_USERNAME": {
                      "isOptional": false,
                      "description": "Redis user",
                      "defaultValue": "${{Redis.REDISUSER}}"
                    },
                    "ROUTINE_POOL_SIZE": {
                      "isOptional": false,
                      "description": "Goroutine pool size",
                      "defaultValue": "10000"
                    },
                    "DIFY_INNER_API_KEY": {
                      "isOptional": false,
                      "description": "API callback auth",
                      "defaultValue": "${{api.INNER_API_KEY_FOR_PLUGIN}}"
                    },
                    "DIFY_INNER_API_URL": {
                      "isOptional": false,
                      "description": "API callback URL",
                      "defaultValue": "http://${{api.RAILWAY_PRIVATE_DOMAIN}}:5001"
                    },
                    "DB_DEFAULT_DATABASE": {
                      "isOptional": false,
                      "description": "Required; used to create the above",
                      "defaultValue": "postgres"
                    },
                    "PLUGIN_STORAGE_TYPE": {
                      "isOptional": false,
                      "description": "Plugins stored on the volume",
                      "defaultValue": "local"
                    },
                    "PLUGIN_WORKING_PATH": {
                      "isOptional": false,
                      "description": "Plugin runtime working directory",
                      "defaultValue": "/app/storage/cwd"
                    },
                    "PLUGIN_INSTALLED_PATH": {
                      "isOptional": false,
                      "description": "Installed plugin subdirectory",
                      "defaultValue": "plugin"
                    },
                    "PIP_MIRROR_AUTO_DETECT": {
                      "isOptional": false,
                      "description": "Use the default package index",
                      "defaultValue": "false"
                    },
                    "MAX_PLUGIN_PACKAGE_SIZE": {
                      "isOptional": false,
                      "description": "Max plugin package bytes",
                      "defaultValue": "52428800"
                    },
                    "PLUGIN_MEDIA_CACHE_PATH": {
                      "isOptional": false,
                      "description": "Media cache subdirectory",
                      "defaultValue": "assets"
                    },
                    "PYTHON_ENV_INIT_TIMEOUT": {
                      "isOptional": false,
                      "description": "Plugin environment build timeout",
                      "defaultValue": "120"
                    },
                    "FORCE_VERIFYING_SIGNATURE": {
                      "isOptional": false,
                      "description": "Only signed plugins install",
                      "defaultValue": "true"
                    },
                    "PLUGIN_PACKAGE_CACHE_PATH": {
                      "isOptional": false,
                      "description": "Package cache subdirectory",
                      "defaultValue": "plugin_packages"
                    },
                    "PLUGIN_STORAGE_LOCAL_ROOT": {
                      "isOptional": false,
                      "description": "Volume mount path",
                      "defaultValue": "/app/storage"
                    },
                    "LIFETIME_STATE_GC_INTERVAL": {
                      "isOptional": false,
                      "description": "State GC seconds",
                      "defaultValue": "300"
                    },
                    "PLUGIN_MAX_EXECUTION_TIMEOUT": {
                      "isOptional": false,
                      "description": "Max plugin execution seconds",
                      "defaultValue": "600"
                    },
                    "PLUGIN_REMOTE_INSTALLING_HOST": {
                      "isOptional": false,
                      "description": "Remote plugin debug bind address",
                      "defaultValue": "0.0.0.0"
                    },
                    "PLUGIN_REMOTE_INSTALLING_PORT": {
                      "isOptional": false,
                      "description": "Remote plugin debug port",
                      "defaultValue": "5003"
                    },
                    "LIFETIME_COLLECTION_GC_INTERVAL": {
                      "isOptional": false,
                      "description": "Cluster GC seconds",
                      "defaultValue": "60"
                    },
                    "LIFETIME_COLLECTION_HEARTBEAT_INTERVAL": {
                      "isOptional": false,
                      "description": "Cluster heartbeat seconds",
                      "defaultValue": "5"
                    },
                    "DIFY_INVOCATION_CONNECTION_IDLE_TIMEOUT": {
                      "isOptional": false,
                      "description": "Idle invocation timeout",
                      "defaultValue": "120"
                    }
                  },
                  "volumeMounts": {
                    "eea6322a-bf31-4150-ad85-eda292cb800b": {
                      "mountPath": "/app/storage"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 11,
    "needs_volume": true
  },
  "generated_at": "2026-09-20T16:14:49.616Z",
  "generator_version": "0.1.0",
  "status": "degraded",
  "validated_at": "2026-09-19T16:35:44.189Z",
  "success_rate_30d": 0.1667,
  "validation": {
    "last_run_id": "run_c9fe95dcf9a0443087f2",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": false,
        "detail": "Your workspace has been restricted. Please contact support to resolve this."
      }
    ],
    "typical_ready_seconds": 128,
    "typical_build_seconds": 0,
    "typical_start_seconds": 20,
    "slowest_service": "worker-beat"
  }
}
