{
  "manifest_version": "1.0.0",
  "template": {
    "id": "e00b90f5-df7f-450f-a36d-3fbb1f03c31d",
    "slug": "falkordb-graph",
    "name": "FalkorDB",
    "description": "Graph database for storing and querying connected data",
    "url": "https://railway.com/deploy/falkordb-graph",
    "upstream": {
      "image": "falkordb/falkordb:v4.20.4"
    }
  },
  "services": [
    {
      "name": "falkordb",
      "source": {
        "image": "falkordb/falkordb:v4.20.4"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/falkordb/data",
      "tcp_ports": [
        6379
      ],
      "http": true
    },
    {
      "name": "falkordb-replica",
      "source": {
        "image": "falkordb/falkordb-server:v4.20.4"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/falkordb/data",
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "PORT",
      "service": "falkordb",
      "description": "FalkorDB Browser HTTP port",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "AUTH_URL",
      "service": "falkordb",
      "description": "Public Browser URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "AUTH_SECRET",
      "service": "falkordb",
      "description": "Browser session signing key",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "NEXTAUTH_URL",
      "service": "falkordb",
      "description": "Legacy alias of AUTH_URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "FALKORDB_HOST",
      "service": "falkordb",
      "description": "Private hostname for peers",
      "secret": false,
      "strategy": "default",
      "default": "falkordb.railway.internal"
    },
    {
      "key": "FALKORDB_PORT",
      "service": "falkordb",
      "description": "Database protocol port",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "ENCRYPTION_KEY",
      "service": "falkordb",
      "description": "Encrypts stored Browser credentials",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "ALLOWED_ORIGINS",
      "service": "falkordb",
      "description": "CORS allow-list for the Browser API",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "AUTH_TRUST_HOST",
      "service": "falkordb",
      "description": "Trust Railway's proxy headers",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "FALKORDB_PASSWORD",
      "service": "falkordb",
      "description": "Database password and Browser login",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "FALKORDB_PUBLIC_URL",
      "service": "falkordb",
      "description": "Public TCP proxy connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "FALKORDB_PRIVATE_URL",
      "service": "falkordb",
      "description": "Private connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "RAILWAY_DEPLOYMENT_DRAINING_SECONDS",
      "service": "falkordb",
      "description": "Clean shutdown window",
      "secret": false,
      "strategy": "default",
      "default": "30"
    },
    {
      "key": "FALKORDB_PASSWORD",
      "service": "falkordb-replica",
      "description": "Must match the primary's password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "FALKORDB_REPLICAOF",
      "service": "falkordb-replica",
      "description": "Primary to replicate from",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "FALKORDB_REPLICA_PRIVATE_URL",
      "service": "falkordb-replica",
      "description": "Read-only connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "RAILWAY_DEPLOYMENT_DRAINING_SECONDS",
      "service": "falkordb-replica",
      "description": "Clean shutdown window",
      "secret": false,
      "strategy": "default",
      "default": "30"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "falkordb-graph"
      }
    },
    "cli": "railway deploy --template falkordb-graph",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "e00b90f5-df7f-450f-a36d-3fbb1f03c31d",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "67c982c9-79df-486f-a32c-3176843df1c8": {
                  "icon": "https://cdn.jsdelivr.net/gh/FalkorDB/falkordb-browser@main/public/icons/F-light.svg",
                  "name": "falkordb",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'if [ -r /sys/fs/cgroup/cpu.max ]; then read CQ CP < /sys/fs/cgroup/cpu.max; else CQ=max; CP=100000; fi; if [ \"$CQ\" = \"max\" ]; then N=4; else N=$((CQ/CP)); fi; if [ \"$N\" -lt 1 ]; then N=1; fi; MM=; if [ -r /sys/fs/cgroup/memory.max ]; then read MB < /sys/fs/cgroup/memory.max; if [ \"$MB\" != \"max\" ]; then MM=$((MB/10*7)); fi; fi; case \"$FALKORDB_ARGS\" in \"\"|\"MAX_QUEUED_QUERIES 25 TIMEOUT 1000 RESULTSET_SIZE 10000\") FALKORDB_ARGS=\"THREAD_COUNT $N OMP_THREAD_COUNT $N MAX_QUEUED_QUERIES 100 RESULTSET_SIZE 10000\";; esac; if [ -z \"$REDIS_ARGS\" ]; then REDIS_ARGS=\"--requirepass $FALKORDB_PASSWORD --appendonly yes --appendfsync everysec\"; if [ -n \"$MM\" ]; then REDIS_ARGS=\"$REDIS_ARGS --maxmemory $MM --maxmemory-policy noeviction\"; fi; if [ -n \"$FALKORDB_REPLICAOF\" ]; then REDIS_ARGS=\"$REDIS_ARGS --replicaof $FALKORDB_REPLICAOF --masterauth $FALKORDB_PASSWORD --replica-read-only yes\"; fi; fi; export FALKORDB_ARGS REDIS_ARGS; echo \"[railway] THREAD_COUNT=$N MAXMEMORY=${MM:-unset} REPLICAOF=${FALKORDB_REPLICAOF:-none}\"; exec /var/lib/falkordb/bin/run.sh'",
                    "healthcheckPath": "/",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "falkordb/falkordb:v4.20.4"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "FalkorDB Browser HTTP port",
                      "defaultValue": "3000"
                    },
                    "AUTH_URL": {
                      "isOptional": false,
                      "description": "Public Browser URL",
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "AUTH_SECRET": {
                      "isOptional": false,
                      "description": "Browser session signing key",
                      "defaultValue": "{{AUTH_SECRET}}"
                    },
                    "NEXTAUTH_URL": {
                      "isOptional": false,
                      "description": "Legacy alias of AUTH_URL",
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "FALKORDB_HOST": {
                      "isOptional": false,
                      "description": "Private hostname for peers",
                      "defaultValue": "falkordb.railway.internal"
                    },
                    "FALKORDB_PORT": {
                      "isOptional": false,
                      "description": "Database protocol port",
                      "defaultValue": "6379"
                    },
                    "ENCRYPTION_KEY": {
                      "isOptional": false,
                      "description": "Encrypts stored Browser credentials",
                      "defaultValue": "{{ENCRYPTION_KEY}}"
                    },
                    "ALLOWED_ORIGINS": {
                      "isOptional": false,
                      "description": "CORS allow-list for the Browser API",
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "AUTH_TRUST_HOST": {
                      "isOptional": false,
                      "description": "Trust Railway's proxy headers",
                      "defaultValue": "true"
                    },
                    "FALKORDB_PASSWORD": {
                      "isOptional": false,
                      "description": "Database password and Browser login",
                      "defaultValue": "{{FALKORDB_PASSWORD}}"
                    },
                    "FALKORDB_PUBLIC_URL": {
                      "isOptional": false,
                      "description": "Public TCP proxy connection string",
                      "defaultValue": "redis://default:${{FALKORDB_PASSWORD}}@${{RAILWAY_TCP_PROXY_DOMAIN}}:${{RAILWAY_TCP_PROXY_PORT}}"
                    },
                    "FALKORDB_PRIVATE_URL": {
                      "isOptional": false,
                      "description": "Private connection string",
                      "defaultValue": "redis://default:${{FALKORDB_PASSWORD}}@falkordb.railway.internal:6379"
                    },
                    "RAILWAY_DEPLOYMENT_DRAINING_SECONDS": {
                      "isOptional": false,
                      "description": "Clean shutdown window",
                      "defaultValue": "30"
                    }
                  },
                  "networking": {
                    "tcpProxies": {
                      "6379": {}
                    },
                    "serviceDomains": {
                      "<hasDomain>:3000": {
                        "port": 3000
                      }
                    }
                  },
                  "volumeMounts": {
                    "67c982c9-79df-486f-a32c-3176843df1c8": {
                      "mountPath": "/var/lib/falkordb/data"
                    }
                  }
                },
                "7fef8fad-25ac-46e8-9c6f-35065cccb400": {
                  "icon": "https://cdn.jsdelivr.net/gh/FalkorDB/falkordb-browser@main/public/icons/F-light.svg",
                  "name": "falkordb-replica",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'if [ -r /sys/fs/cgroup/cpu.max ]; then read CQ CP < /sys/fs/cgroup/cpu.max; else CQ=max; CP=100000; fi; if [ \"$CQ\" = \"max\" ]; then N=4; else N=$((CQ/CP)); fi; if [ \"$N\" -lt 1 ]; then N=1; fi; MM=; if [ -r /sys/fs/cgroup/memory.max ]; then read MB < /sys/fs/cgroup/memory.max; if [ \"$MB\" != \"max\" ]; then MM=$((MB/10*7)); fi; fi; case \"$FALKORDB_ARGS\" in \"\"|\"MAX_QUEUED_QUERIES 25 TIMEOUT 1000 RESULTSET_SIZE 10000\") FALKORDB_ARGS=\"THREAD_COUNT $N OMP_THREAD_COUNT $N MAX_QUEUED_QUERIES 100 RESULTSET_SIZE 10000\";; esac; if [ -z \"$REDIS_ARGS\" ]; then REDIS_ARGS=\"--requirepass $FALKORDB_PASSWORD --appendonly yes --appendfsync everysec\"; if [ -n \"$MM\" ]; then REDIS_ARGS=\"$REDIS_ARGS --maxmemory $MM --maxmemory-policy noeviction\"; fi; if [ -n \"$FALKORDB_REPLICAOF\" ]; then REDIS_ARGS=\"$REDIS_ARGS --replicaof $FALKORDB_REPLICAOF --masterauth $FALKORDB_PASSWORD --replica-read-only yes\"; fi; fi; export FALKORDB_ARGS REDIS_ARGS; echo \"[railway] THREAD_COUNT=$N MAXMEMORY=${MM:-unset} REPLICAOF=${FALKORDB_REPLICAOF:-none}\"; exec /var/lib/falkordb/bin/run.sh'",
                    "healthcheckPath": null,
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "falkordb/falkordb-server:v4.20.4"
                  },
                  "variables": {
                    "FALKORDB_PASSWORD": {
                      "isOptional": false,
                      "description": "Must match the primary's password",
                      "defaultValue": "${{falkordb.FALKORDB_PASSWORD}}"
                    },
                    "FALKORDB_REPLICAOF": {
                      "isOptional": false,
                      "description": "Primary to replicate from",
                      "defaultValue": "${{falkordb.FALKORDB_HOST}} ${{falkordb.FALKORDB_PORT}}"
                    },
                    "FALKORDB_REPLICA_PRIVATE_URL": {
                      "isOptional": false,
                      "description": "Read-only connection string",
                      "defaultValue": "redis://default:${{falkordb.FALKORDB_PASSWORD}}@falkordb-replica.railway.internal:6379"
                    },
                    "RAILWAY_DEPLOYMENT_DRAINING_SECONDS": {
                      "isOptional": false,
                      "description": "Clean shutdown window",
                      "defaultValue": "30"
                    }
                  },
                  "volumeMounts": {
                    "7fef8fad-25ac-46e8-9c6f-35065cccb400": {
                      "mountPath": "/var/lib/falkordb/data"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "falkordb",
      "method": "GET",
      "path": "/",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 2,
    "needs_volume": true
  },
  "generated_at": "2026-09-15T22:14:40.394Z",
  "generator_version": "0.1.0",
  "status": "validated",
  "validated_at": "2026-09-15T19:23:23.537Z",
  "success_rate_30d": 1,
  "validation": {
    "last_run_id": "run_9fbec90dd8b642a7ae11",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": true
      },
      {
        "name": "healthcheck",
        "passed": true
      },
      {
        "name": "stays_up",
        "passed": true
      }
    ],
    "typical_ready_seconds": 62,
    "typical_build_seconds": 0,
    "typical_start_seconds": 10,
    "slowest_service": "falkordb-replica"
  }
}
