{
  "manifest_version": "1.0.0",
  "template": {
    "id": "0b346307-078f-4e19-b4ec-6a23a99f81fd",
    "slug": "budibase-platform",
    "name": "Budibase",
    "description": "Low-code platform for building internal business apps",
    "url": "https://railway.com/deploy/budibase-platform",
    "upstream": {
      "repo_url": "https://github.com/gridalpha/budibase-railway"
    }
  },
  "services": [
    {
      "name": "Redis",
      "source": {
        "image": "redis:8.2"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    },
    {
      "name": "budibase-proxy",
      "source": {
        "repo": "https://github.com/gridalpha/budibase-railway"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "budibase-worker",
      "source": {
        "image": "budibase/worker:v3.43.0"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "budibase-apps",
      "source": {
        "image": "budibase/apps:v3.43.0"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "minio",
      "source": {
        "image": "minio/minio:RELEASE.2025-09-07T16-13-09Z"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    },
    {
      "name": "couchdb",
      "source": {
        "image": "budibase/database:2.1.0"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    },
    {
      "name": "budibase-automation-worker",
      "source": {
        "image": "budibase/apps:v3.43.0"
      },
      "needs_volume": false,
      "http": false
    }
  ],
  "required_inputs": [
    {
      "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": "budibase-proxy",
      "description": "Port nginx listens on",
      "secret": false,
      "strategy": "default",
      "default": "10000"
    },
    {
      "key": "APPS_UPSTREAM_URL",
      "service": "budibase-proxy",
      "description": "Apps service upstream",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "MINIO_UPSTREAM_URL",
      "service": "budibase-proxy",
      "description": "Object storage upstream",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "WORKER_UPSTREAM_URL",
      "service": "budibase-proxy",
      "description": "Worker service upstream",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "COUCHDB_UPSTREAM_URL",
      "service": "budibase-proxy",
      "description": "CouchDB upstream",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PROXY_TIMEOUT_SECONDS",
      "service": "budibase-proxy",
      "description": "Upstream read, connect and send timeout",
      "secret": false,
      "strategy": "default",
      "default": "120"
    },
    {
      "key": "PROXY_RATE_LIMIT_API_PER_SECOND",
      "service": "budibase-proxy",
      "description": "API requests per second per IP",
      "secret": false,
      "strategy": "default",
      "default": "50"
    },
    {
      "key": "PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND",
      "service": "budibase-proxy",
      "description": "Webhook requests per second per IP",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "PORT",
      "service": "budibase-worker",
      "description": "HTTP server listening port",
      "secret": false,
      "strategy": "default",
      "default": "4003"
    },
    {
      "key": "APPS_URL",
      "service": "budibase-worker",
      "description": "Apps service base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "LOG_LEVEL",
      "service": "budibase-worker",
      "description": "Application log verbosity",
      "secret": false,
      "strategy": "default",
      "default": "info"
    },
    {
      "key": "MINIO_URL",
      "service": "budibase-worker",
      "description": "Private object storage endpoint",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_URL",
      "service": "budibase-worker",
      "description": "Redis connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "JWT_SECRET",
      "service": "budibase-worker",
      "description": "Must match the apps service",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SELF_HOSTED",
      "service": "budibase-worker",
      "description": "Enables self-hosted mode",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "CLUSTER_PORT",
      "service": "budibase-worker",
      "description": "Public port the platform is reached on",
      "secret": false,
      "strategy": "default",
      "default": "443"
    },
    {
      "key": "COUCH_DB_URL",
      "service": "budibase-worker",
      "description": "CouchDB connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PLATFORM_URL",
      "service": "budibase-worker",
      "description": "Public URL used in generated links",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "COUCH_DB_USER",
      "service": "budibase-worker",
      "description": "CouchDB admin username",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "COUCH_DB_SQL_URL",
      "service": "budibase-worker",
      "description": "SQLite search service endpoint",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ENABLE_ANALYTICS",
      "service": "budibase-worker",
      "description": "Product telemetry, off by default",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "INTERNAL_API_KEY",
      "service": "budibase-worker",
      "description": "Must match the apps service",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MINIO_ACCESS_KEY",
      "service": "budibase-worker",
      "description": "Object storage access key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MINIO_SECRET_KEY",
      "service": "budibase-worker",
      "description": "Object storage secret key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "COUCH_DB_PASSWORD",
      "service": "budibase-worker",
      "description": "CouchDB admin password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "COUCH_DB_USERNAME",
      "service": "budibase-worker",
      "description": "Alias the worker also reads",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "API_ENCRYPTION_KEY",
      "service": "budibase-worker",
      "description": "Must match the apps service",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "BUDIBASE_ENVIRONMENT",
      "service": "budibase-worker",
      "description": "Runtime environment label",
      "secret": false,
      "strategy": "default",
      "default": "PRODUCTION"
    },
    {
      "key": "PORT",
      "service": "budibase-apps",
      "description": "HTTP server listening port",
      "secret": false,
      "strategy": "default",
      "default": "4002"
    },
    {
      "key": "LOG_LEVEL",
      "service": "budibase-apps",
      "description": "Application log verbosity",
      "secret": false,
      "strategy": "default",
      "default": "info"
    },
    {
      "key": "MINIO_URL",
      "service": "budibase-apps",
      "description": "Private object storage endpoint",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_URL",
      "service": "budibase-apps",
      "description": "Redis connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "JWT_SECRET",
      "service": "budibase-apps",
      "description": "Signs session tokens",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "WORKER_URL",
      "service": "budibase-apps",
      "description": "Worker service base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SELF_HOSTED",
      "service": "budibase-apps",
      "description": "Enables self-hosted mode",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "APP_FEATURES",
      "service": "budibase-apps",
      "description": "Serve API only; automations run elsewhere",
      "secret": false,
      "strategy": "default",
      "default": "api"
    },
    {
      "key": "COUCH_DB_URL",
      "service": "budibase-apps",
      "description": "CouchDB connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PLATFORM_URL",
      "service": "budibase-apps",
      "description": "Public URL used in generated links",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "COUCH_DB_USER",
      "service": "budibase-apps",
      "description": "CouchDB admin username",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "COUCH_DB_SQL_URL",
      "service": "budibase-apps",
      "description": "SQLite search service endpoint",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ENABLE_ANALYTICS",
      "service": "budibase-apps",
      "description": "Product telemetry, off by default",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "INTERNAL_API_KEY",
      "service": "budibase-apps",
      "description": "Authenticates service-to-service calls",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "MINIO_ACCESS_KEY",
      "service": "budibase-apps",
      "description": "Object storage access key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MINIO_SECRET_KEY",
      "service": "budibase-apps",
      "description": "Object storage secret key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "COUCH_DB_PASSWORD",
      "service": "budibase-apps",
      "description": "CouchDB admin password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "API_ENCRYPTION_KEY",
      "service": "budibase-apps",
      "description": "Encrypts stored datasource credentials",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "BB_ADMIN_USER_EMAIL",
      "service": "budibase-apps",
      "description": "First admin account email",
      "secret": false,
      "strategy": "default",
      "default": "admin@example.dev"
    },
    {
      "key": "BUDIBASE_ENVIRONMENT",
      "service": "budibase-apps",
      "description": "Runtime environment label",
      "secret": false,
      "strategy": "default",
      "default": "PRODUCTION"
    },
    {
      "key": "BB_ADMIN_USER_PASSWORD",
      "service": "budibase-apps",
      "description": "First admin account password",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PORT",
      "service": "minio",
      "description": "S3 API port used for the health check",
      "secret": false,
      "strategy": "default",
      "default": "9000"
    },
    {
      "key": "MINIO_BROWSER",
      "service": "minio",
      "description": "Disables the MinIO web console",
      "secret": false,
      "strategy": "default",
      "default": "off"
    },
    {
      "key": "MINIO_ROOT_USER",
      "service": "minio",
      "description": "Root access key, read by the server",
      "secret": false,
      "strategy": "default",
      "default": "budibase"
    },
    {
      "key": "MINIO_ACCESS_KEY",
      "service": "minio",
      "description": "Legacy alias Budibase clients use",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MINIO_SECRET_KEY",
      "service": "minio",
      "description": "Legacy alias Budibase clients use",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MINIO_ROOT_PASSWORD",
      "service": "minio",
      "description": "Root secret key, read by the server",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PORT",
      "service": "couchdb",
      "description": "HTTP port used for the health check",
      "secret": false,
      "strategy": "default",
      "default": "5984"
    },
    {
      "key": "DATA_DIR",
      "service": "couchdb",
      "description": "Volume path for databases and search indexes",
      "secret": false,
      "strategy": "default",
      "default": "/data"
    },
    {
      "key": "TARGETBUILD",
      "service": "couchdb",
      "description": "Selects the multi-container data layout",
      "secret": false,
      "strategy": "default",
      "default": "docker-compose"
    },
    {
      "key": "COUCHDB_USER",
      "service": "couchdb",
      "description": "CouchDB admin username, read by the entrypoint",
      "secret": false,
      "strategy": "default",
      "default": "budibase"
    },
    {
      "key": "COUCHDB_PASSWORD",
      "service": "couchdb",
      "description": "CouchDB admin password, read by the entrypoint",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PORT",
      "service": "budibase-automation-worker",
      "description": "HTTP server listening port",
      "secret": false,
      "strategy": "default",
      "default": "4002"
    },
    {
      "key": "LOG_LEVEL",
      "service": "budibase-automation-worker",
      "description": "Application log verbosity",
      "secret": false,
      "strategy": "default",
      "default": "info"
    },
    {
      "key": "MINIO_URL",
      "service": "budibase-automation-worker",
      "description": "Private object storage endpoint",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_URL",
      "service": "budibase-automation-worker",
      "description": "Redis connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "JWT_SECRET",
      "service": "budibase-automation-worker",
      "description": "Must match the apps service",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "WORKER_URL",
      "service": "budibase-automation-worker",
      "description": "Worker service base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SELF_HOSTED",
      "service": "budibase-automation-worker",
      "description": "Enables self-hosted mode",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "APP_FEATURES",
      "service": "budibase-automation-worker",
      "description": "Run automation jobs only",
      "secret": false,
      "strategy": "default",
      "default": "automations"
    },
    {
      "key": "COUCH_DB_URL",
      "service": "budibase-automation-worker",
      "description": "CouchDB connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PLATFORM_URL",
      "service": "budibase-automation-worker",
      "description": "Public URL used in generated links",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "COUCH_DB_USER",
      "service": "budibase-automation-worker",
      "description": "CouchDB admin username",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "COUCH_DB_SQL_URL",
      "service": "budibase-automation-worker",
      "description": "SQLite search service endpoint",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ENABLE_ANALYTICS",
      "service": "budibase-automation-worker",
      "description": "Product telemetry, off by default",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "INTERNAL_API_KEY",
      "service": "budibase-automation-worker",
      "description": "Must match the apps service",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MINIO_ACCESS_KEY",
      "service": "budibase-automation-worker",
      "description": "Object storage access key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MINIO_SECRET_KEY",
      "service": "budibase-automation-worker",
      "description": "Object storage secret key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "COUCH_DB_PASSWORD",
      "service": "budibase-automation-worker",
      "description": "CouchDB admin password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "API_ENCRYPTION_KEY",
      "service": "budibase-automation-worker",
      "description": "Must match the apps service",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "BUDIBASE_ENVIRONMENT",
      "service": "budibase-automation-worker",
      "description": "Runtime environment label",
      "secret": false,
      "strategy": "default",
      "default": "PRODUCTION"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "budibase-platform"
      }
    },
    "cli": "railway deploy --template budibase-platform",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "0b346307-078f-4e19-b4ec-6a23a99f81fd",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "2f38d662-96d8-407b-9107-4b3cf59348ea": {
                  "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": {
                    "2f38d662-96d8-407b-9107-4b3cf59348ea": {
                      "mountPath": "/data"
                    }
                  }
                },
                "39a54a3f-3654-403a-8ec3-aed56c9f2210": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/nginx.svg",
                  "name": "budibase-proxy",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/health",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "repo": "https://github.com/gridalpha/budibase-railway",
                    "rootDirectory": "proxy"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Port nginx listens on",
                      "defaultValue": "10000"
                    },
                    "APPS_UPSTREAM_URL": {
                      "isOptional": false,
                      "description": "Apps service upstream",
                      "defaultValue": "http://${{budibase-apps.RAILWAY_PRIVATE_DOMAIN}}:4002"
                    },
                    "MINIO_UPSTREAM_URL": {
                      "isOptional": false,
                      "description": "Object storage upstream",
                      "defaultValue": "http://${{minio.RAILWAY_PRIVATE_DOMAIN}}:9000"
                    },
                    "WORKER_UPSTREAM_URL": {
                      "isOptional": false,
                      "description": "Worker service upstream",
                      "defaultValue": "http://${{budibase-worker.RAILWAY_PRIVATE_DOMAIN}}:4003"
                    },
                    "COUCHDB_UPSTREAM_URL": {
                      "isOptional": false,
                      "description": "CouchDB upstream",
                      "defaultValue": "http://${{couchdb.RAILWAY_PRIVATE_DOMAIN}}:5984"
                    },
                    "PROXY_TIMEOUT_SECONDS": {
                      "isOptional": false,
                      "description": "Upstream read, connect and send timeout",
                      "defaultValue": "120"
                    },
                    "PROXY_RATE_LIMIT_API_PER_SECOND": {
                      "isOptional": false,
                      "description": "API requests per second per IP",
                      "defaultValue": "50"
                    },
                    "PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND": {
                      "isOptional": false,
                      "description": "Webhook requests per second per IP",
                      "defaultValue": "10"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:10000": {
                        "port": 10000
                      }
                    }
                  }
                },
                "53e35f1b-53b2-466e-ba2e-bab5eeb884a2": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/budibase.svg",
                  "name": "budibase-worker",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/health",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "budibase/worker:v3.43.0"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "HTTP server listening port",
                      "defaultValue": "4003"
                    },
                    "APPS_URL": {
                      "isOptional": false,
                      "description": "Apps service base URL",
                      "defaultValue": "http://${{budibase-apps.RAILWAY_PRIVATE_DOMAIN}}:4002"
                    },
                    "LOG_LEVEL": {
                      "isOptional": false,
                      "description": "Application log verbosity",
                      "defaultValue": "info"
                    },
                    "MINIO_URL": {
                      "isOptional": false,
                      "description": "Private object storage endpoint",
                      "defaultValue": "http://${{minio.RAILWAY_PRIVATE_DOMAIN}}:9000"
                    },
                    "REDIS_URL": {
                      "isOptional": false,
                      "description": "Redis connection string",
                      "defaultValue": "${{Redis.REDIS_URL}}"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "description": "Must match the apps service",
                      "defaultValue": "${{budibase-apps.JWT_SECRET}}"
                    },
                    "SELF_HOSTED": {
                      "isOptional": false,
                      "description": "Enables self-hosted mode",
                      "defaultValue": "1"
                    },
                    "CLUSTER_PORT": {
                      "isOptional": false,
                      "description": "Public port the platform is reached on",
                      "defaultValue": "443"
                    },
                    "COUCH_DB_URL": {
                      "isOptional": false,
                      "description": "CouchDB connection string",
                      "defaultValue": "http://${{couchdb.COUCHDB_USER}}:${{couchdb.COUCHDB_PASSWORD}}@${{couchdb.RAILWAY_PRIVATE_DOMAIN}}:5984"
                    },
                    "PLATFORM_URL": {
                      "isOptional": false,
                      "description": "Public URL used in generated links",
                      "defaultValue": "https://${{budibase-proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "COUCH_DB_USER": {
                      "isOptional": false,
                      "description": "CouchDB admin username",
                      "defaultValue": "${{couchdb.COUCHDB_USER}}"
                    },
                    "COUCH_DB_SQL_URL": {
                      "isOptional": false,
                      "description": "SQLite search service endpoint",
                      "defaultValue": "http://${{couchdb.RAILWAY_PRIVATE_DOMAIN}}:4984"
                    },
                    "ENABLE_ANALYTICS": {
                      "isOptional": false,
                      "description": "Product telemetry, off by default",
                      "defaultValue": "false"
                    },
                    "INTERNAL_API_KEY": {
                      "isOptional": false,
                      "description": "Must match the apps service",
                      "defaultValue": "${{budibase-apps.INTERNAL_API_KEY}}"
                    },
                    "MINIO_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Object storage access key",
                      "defaultValue": "${{minio.MINIO_ROOT_USER}}"
                    },
                    "MINIO_SECRET_KEY": {
                      "isOptional": false,
                      "description": "Object storage secret key",
                      "defaultValue": "${{minio.MINIO_ROOT_PASSWORD}}"
                    },
                    "COUCH_DB_PASSWORD": {
                      "isOptional": false,
                      "description": "CouchDB admin password",
                      "defaultValue": "${{couchdb.COUCHDB_PASSWORD}}"
                    },
                    "COUCH_DB_USERNAME": {
                      "isOptional": false,
                      "description": "Alias the worker also reads",
                      "defaultValue": "${{couchdb.COUCHDB_USER}}"
                    },
                    "API_ENCRYPTION_KEY": {
                      "isOptional": false,
                      "description": "Must match the apps service",
                      "defaultValue": "${{budibase-apps.API_ENCRYPTION_KEY}}"
                    },
                    "BUDIBASE_ENVIRONMENT": {
                      "isOptional": false,
                      "description": "Runtime environment label",
                      "defaultValue": "PRODUCTION"
                    }
                  }
                },
                "670411f8-9688-4cbe-bacb-c9ec98a7f747": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/budibase.svg",
                  "name": "budibase-apps",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/health",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "budibase/apps:v3.43.0"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "HTTP server listening port",
                      "defaultValue": "4002"
                    },
                    "LOG_LEVEL": {
                      "isOptional": false,
                      "description": "Application log verbosity",
                      "defaultValue": "info"
                    },
                    "MINIO_URL": {
                      "isOptional": false,
                      "description": "Private object storage endpoint",
                      "defaultValue": "http://${{minio.RAILWAY_PRIVATE_DOMAIN}}:9000"
                    },
                    "REDIS_URL": {
                      "isOptional": false,
                      "description": "Redis connection string",
                      "defaultValue": "${{Redis.REDIS_URL}}"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "description": "Signs session tokens",
                      "defaultValue": "{{JWT_SECRET}}"
                    },
                    "WORKER_URL": {
                      "isOptional": false,
                      "description": "Worker service base URL",
                      "defaultValue": "http://${{budibase-worker.RAILWAY_PRIVATE_DOMAIN}}:4003"
                    },
                    "SELF_HOSTED": {
                      "isOptional": false,
                      "description": "Enables self-hosted mode",
                      "defaultValue": "1"
                    },
                    "APP_FEATURES": {
                      "isOptional": false,
                      "description": "Serve API only; automations run elsewhere",
                      "defaultValue": "api"
                    },
                    "COUCH_DB_URL": {
                      "isOptional": false,
                      "description": "CouchDB connection string",
                      "defaultValue": "http://${{couchdb.COUCHDB_USER}}:${{couchdb.COUCHDB_PASSWORD}}@${{couchdb.RAILWAY_PRIVATE_DOMAIN}}:5984"
                    },
                    "PLATFORM_URL": {
                      "isOptional": false,
                      "description": "Public URL used in generated links",
                      "defaultValue": "https://${{budibase-proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "COUCH_DB_USER": {
                      "isOptional": false,
                      "description": "CouchDB admin username",
                      "defaultValue": "${{couchdb.COUCHDB_USER}}"
                    },
                    "COUCH_DB_SQL_URL": {
                      "isOptional": false,
                      "description": "SQLite search service endpoint",
                      "defaultValue": "http://${{couchdb.RAILWAY_PRIVATE_DOMAIN}}:4984"
                    },
                    "ENABLE_ANALYTICS": {
                      "isOptional": false,
                      "description": "Product telemetry, off by default",
                      "defaultValue": "false"
                    },
                    "INTERNAL_API_KEY": {
                      "isOptional": false,
                      "description": "Authenticates service-to-service calls",
                      "defaultValue": "{{INTERNAL_API_KEY}}"
                    },
                    "MINIO_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Object storage access key",
                      "defaultValue": "${{minio.MINIO_ROOT_USER}}"
                    },
                    "MINIO_SECRET_KEY": {
                      "isOptional": false,
                      "description": "Object storage secret key",
                      "defaultValue": "${{minio.MINIO_ROOT_PASSWORD}}"
                    },
                    "COUCH_DB_PASSWORD": {
                      "isOptional": false,
                      "description": "CouchDB admin password",
                      "defaultValue": "${{couchdb.COUCHDB_PASSWORD}}"
                    },
                    "API_ENCRYPTION_KEY": {
                      "isOptional": false,
                      "description": "Encrypts stored datasource credentials",
                      "defaultValue": "{{API_ENCRYPTION_KEY}}"
                    },
                    "BB_ADMIN_USER_EMAIL": {
                      "isOptional": false,
                      "description": "First admin account email",
                      "defaultValue": "admin@example.dev"
                    },
                    "BUDIBASE_ENVIRONMENT": {
                      "isOptional": false,
                      "description": "Runtime environment label",
                      "defaultValue": "PRODUCTION"
                    },
                    "BB_ADMIN_USER_PASSWORD": {
                      "isOptional": false,
                      "description": "First admin account password",
                      "defaultValue": "{{BB_ADMIN_USER_PASSWORD}}"
                    }
                  }
                },
                "baaddd84-b0cc-4a02-bc8e-de8fee9ec543": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/minio-light.svg",
                  "name": "minio",
                  "deploy": {
                    "startCommand": "/usr/bin/docker-entrypoint.sh minio server /data --address :9000",
                    "healthcheckPath": "/minio/health/live",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "minio/minio:RELEASE.2025-09-07T16-13-09Z"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "S3 API port used for the health check",
                      "defaultValue": "9000"
                    },
                    "MINIO_BROWSER": {
                      "isOptional": false,
                      "description": "Disables the MinIO web console",
                      "defaultValue": "off"
                    },
                    "MINIO_ROOT_USER": {
                      "isOptional": false,
                      "description": "Root access key, read by the server",
                      "defaultValue": "budibase"
                    },
                    "MINIO_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Legacy alias Budibase clients use",
                      "defaultValue": "${{MINIO_ROOT_USER}}"
                    },
                    "MINIO_SECRET_KEY": {
                      "isOptional": false,
                      "description": "Legacy alias Budibase clients use",
                      "defaultValue": "${{MINIO_ROOT_PASSWORD}}"
                    },
                    "MINIO_ROOT_PASSWORD": {
                      "isOptional": false,
                      "description": "Root secret key, read by the server",
                      "defaultValue": "{{MINIO_ROOT_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "baaddd84-b0cc-4a02-bc8e-de8fee9ec543": {
                      "mountPath": "/data"
                    }
                  }
                },
                "f55a43f6-42ee-40d4-b5ce-23e5d5b82633": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/couchdb.svg",
                  "name": "couchdb",
                  "deploy": {
                    "startCommand": "/bin/bash -c 'set -e; printf \"[chttpd]\\nbind_address = ::\\n\" > /opt/couchdb/etc/local.d/zz-railway.ini; sed -i \"s/--bind-address=0.0.0.0/--bind-address=::/\" /bbcouch-runner.sh; grep -q -- \"--bind-address=::\" /bbcouch-runner.sh || { echo \"FATAL: sqs bind patch missed\"; exit 1; }; exec tini -s -- /docker-entrypoint.sh /bbcouch-runner.sh'",
                    "healthcheckPath": "/_up",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "budibase/database:2.1.0"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "HTTP port used for the health check",
                      "defaultValue": "5984"
                    },
                    "DATA_DIR": {
                      "isOptional": false,
                      "description": "Volume path for databases and search indexes",
                      "defaultValue": "/data"
                    },
                    "TARGETBUILD": {
                      "isOptional": false,
                      "description": "Selects the multi-container data layout",
                      "defaultValue": "docker-compose"
                    },
                    "COUCHDB_USER": {
                      "isOptional": false,
                      "description": "CouchDB admin username, read by the entrypoint",
                      "defaultValue": "budibase"
                    },
                    "COUCHDB_PASSWORD": {
                      "isOptional": false,
                      "description": "CouchDB admin password, read by the entrypoint",
                      "defaultValue": "{{COUCHDB_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "f55a43f6-42ee-40d4-b5ce-23e5d5b82633": {
                      "mountPath": "/data"
                    }
                  }
                },
                "f8f53594-4155-4ca7-9d51-c032ae854993": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/budibase.svg",
                  "name": "budibase-automation-worker",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/health",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "budibase/apps:v3.43.0"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "HTTP server listening port",
                      "defaultValue": "4002"
                    },
                    "LOG_LEVEL": {
                      "isOptional": false,
                      "description": "Application log verbosity",
                      "defaultValue": "info"
                    },
                    "MINIO_URL": {
                      "isOptional": false,
                      "description": "Private object storage endpoint",
                      "defaultValue": "http://${{minio.RAILWAY_PRIVATE_DOMAIN}}:9000"
                    },
                    "REDIS_URL": {
                      "isOptional": false,
                      "description": "Redis connection string",
                      "defaultValue": "${{Redis.REDIS_URL}}"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "description": "Must match the apps service",
                      "defaultValue": "${{budibase-apps.JWT_SECRET}}"
                    },
                    "WORKER_URL": {
                      "isOptional": false,
                      "description": "Worker service base URL",
                      "defaultValue": "http://${{budibase-worker.RAILWAY_PRIVATE_DOMAIN}}:4003"
                    },
                    "SELF_HOSTED": {
                      "isOptional": false,
                      "description": "Enables self-hosted mode",
                      "defaultValue": "1"
                    },
                    "APP_FEATURES": {
                      "isOptional": false,
                      "description": "Run automation jobs only",
                      "defaultValue": "automations"
                    },
                    "COUCH_DB_URL": {
                      "isOptional": false,
                      "description": "CouchDB connection string",
                      "defaultValue": "http://${{couchdb.COUCHDB_USER}}:${{couchdb.COUCHDB_PASSWORD}}@${{couchdb.RAILWAY_PRIVATE_DOMAIN}}:5984"
                    },
                    "PLATFORM_URL": {
                      "isOptional": false,
                      "description": "Public URL used in generated links",
                      "defaultValue": "https://${{budibase-proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "COUCH_DB_USER": {
                      "isOptional": false,
                      "description": "CouchDB admin username",
                      "defaultValue": "${{couchdb.COUCHDB_USER}}"
                    },
                    "COUCH_DB_SQL_URL": {
                      "isOptional": false,
                      "description": "SQLite search service endpoint",
                      "defaultValue": "http://${{couchdb.RAILWAY_PRIVATE_DOMAIN}}:4984"
                    },
                    "ENABLE_ANALYTICS": {
                      "isOptional": false,
                      "description": "Product telemetry, off by default",
                      "defaultValue": "false"
                    },
                    "INTERNAL_API_KEY": {
                      "isOptional": false,
                      "description": "Must match the apps service",
                      "defaultValue": "${{budibase-apps.INTERNAL_API_KEY}}"
                    },
                    "MINIO_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Object storage access key",
                      "defaultValue": "${{minio.MINIO_ROOT_USER}}"
                    },
                    "MINIO_SECRET_KEY": {
                      "isOptional": false,
                      "description": "Object storage secret key",
                      "defaultValue": "${{minio.MINIO_ROOT_PASSWORD}}"
                    },
                    "COUCH_DB_PASSWORD": {
                      "isOptional": false,
                      "description": "CouchDB admin password",
                      "defaultValue": "${{couchdb.COUCHDB_PASSWORD}}"
                    },
                    "API_ENCRYPTION_KEY": {
                      "isOptional": false,
                      "description": "Must match the apps service",
                      "defaultValue": "${{budibase-apps.API_ENCRYPTION_KEY}}"
                    },
                    "BUDIBASE_ENVIRONMENT": {
                      "isOptional": false,
                      "description": "Runtime environment label",
                      "defaultValue": "PRODUCTION"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "budibase-proxy",
      "method": "GET",
      "path": "/health",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 7,
    "needs_volume": true
  },
  "generated_at": "2026-09-20T16:14:49.616Z",
  "generator_version": "0.1.0",
  "status": "degraded",
  "validated_at": "2026-09-19T13:55:18.779Z",
  "success_rate_30d": 0.3333,
  "validation": {
    "last_run_id": "run_f082137628c64b9ab531",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": false,
        "detail": "BUILDING,DEPLOYING,QUEUED,QUEUED,FAILED,QUEUED,SUCCESS"
      }
    ],
    "typical_ready_seconds": 126,
    "typical_build_seconds": 0,
    "typical_start_seconds": 20,
    "slowest_service": "budibase-automation-worker"
  }
}
