{
  "manifest_version": "1.0.0",
  "template": {
    "id": "73621515-56bf-4385-a0d0-9aac57a83a77",
    "slug": "centrifugo-on-railway",
    "name": "Centrifugo",
    "description": "Single-node Centrifugo with private API access and generated secrets.",
    "url": "https://railway.com/deploy/centrifugo-on-railway",
    "upstream": {
      "repo_url": "https://github.com/l4time/railway-centrifugo-template"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "centrifugo",
      "source": {
        "repo": "https://github.com/l4time/railway-centrifugo-template"
      },
      "needs_volume": false,
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "PORT",
      "service": "centrifugo",
      "description": "Required Railway public and health port. Fixed at 8000.",
      "secret": false,
      "strategy": "default",
      "default": "8000"
    },
    {
      "key": "CENTRIFUGO_ADMIN_SECRET",
      "service": "centrifugo",
      "description": "Generated secret for signing admin sessions. Keep private.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "CENTRIFUGO_HTTP_API_KEY",
      "service": "centrifugo",
      "description": "Generated key for trusted-backend private API calls. Keep private.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "CENTRIFUGO_INIT_ENABLED",
      "service": "centrifugo",
      "description": "Enables the public-safe /connection/init health endpoint. Fixed true.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "CENTRIFUGO_ADMIN_ENABLED",
      "service": "centrifugo",
      "description": "Enables admin on the private internal listener only. Fixed true.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "CENTRIFUGO_ADMIN_EXTERNAL",
      "service": "centrifugo",
      "description": "Keeps admin off the public listener. Must remain false.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "CENTRIFUGO_ADMIN_INSECURE",
      "service": "centrifugo",
      "description": "Requires secure admin authentication. Must remain false.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "CENTRIFUGO_ADMIN_PASSWORD",
      "service": "centrifugo",
      "description": "Generated password for private admin login. Keep private.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "CENTRIFUGO_HEALTH_ENABLED",
      "service": "centrifugo",
      "description": "Enables true health on private port 9000. Fixed true.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "CENTRIFUGO_HTTP_SERVER_PORT",
      "service": "centrifugo",
      "description": "Public client transport listener. Fixed at 8000.",
      "secret": false,
      "strategy": "default",
      "default": "8000"
    },
    {
      "key": "CENTRIFUGO_HTTP_API_EXTERNAL",
      "service": "centrifugo",
      "description": "Keeps the publish API off the public listener. Must remain false.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "CENTRIFUGO_HTTP_API_INSECURE",
      "service": "centrifugo",
      "description": "Requires the HTTP API key. Must remain false.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "CENTRIFUGO_CLIENT_ALLOWED_ORIGINS",
      "service": "centrifugo",
      "description": "Exact HTTPS client origin(s), space-separated. Never use *.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "CENTRIFUGO_HTTP_SERVER_INTERNAL_PORT",
      "service": "centrifugo",
      "description": "Private API, admin, and health listener. Fixed at 9000; do not expose.",
      "secret": false,
      "strategy": "default",
      "default": "9000"
    },
    {
      "key": "CENTRIFUGO_CLIENT_TOKEN_HMAC_SECRET_KEY",
      "service": "centrifugo",
      "description": "Generated HMAC secret used by the trusted backend to sign client JWTs. Keep private.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "CENTRIFUGO_CHANNEL_WITHOUT_NAMESPACE_ALLOW_SUBSCRIBE_FOR_CLIENT",
      "service": "centrifugo",
      "description": "Allows authenticated base-namespace subscriptions; not channel authorization.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "centrifugo-on-railway"
      }
    },
    "cli": "railway deploy --template centrifugo-on-railway",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "73621515-56bf-4385-a0d0-9aac57a83a77",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "4d215e75-e3bb-4a3d-87b2-96beb8e9c3f3": {
                  "icon": null,
                  "name": "centrifugo",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/connection/init",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "repo": "https://github.com/l4time/railway-centrifugo-template",
                    "rootDirectory": null
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Required Railway public and health port. Fixed at 8000.",
                      "defaultValue": "8000"
                    },
                    "CENTRIFUGO_ADMIN_SECRET": {
                      "isOptional": false,
                      "description": "Generated secret for signing admin sessions. Keep private.",
                      "defaultValue": "{{CENTRIFUGO_ADMIN_SECRET}}"
                    },
                    "CENTRIFUGO_HTTP_API_KEY": {
                      "isOptional": false,
                      "description": "Generated key for trusted-backend private API calls. Keep private.",
                      "defaultValue": "{{CENTRIFUGO_HTTP_API_KEY}}"
                    },
                    "CENTRIFUGO_INIT_ENABLED": {
                      "isOptional": false,
                      "description": "Enables the public-safe /connection/init health endpoint. Fixed true.",
                      "defaultValue": "true"
                    },
                    "CENTRIFUGO_ADMIN_ENABLED": {
                      "isOptional": false,
                      "description": "Enables admin on the private internal listener only. Fixed true.",
                      "defaultValue": "true"
                    },
                    "CENTRIFUGO_ADMIN_EXTERNAL": {
                      "isOptional": false,
                      "description": "Keeps admin off the public listener. Must remain false.",
                      "defaultValue": "false"
                    },
                    "CENTRIFUGO_ADMIN_INSECURE": {
                      "isOptional": false,
                      "description": "Requires secure admin authentication. Must remain false.",
                      "defaultValue": "false"
                    },
                    "CENTRIFUGO_ADMIN_PASSWORD": {
                      "isOptional": false,
                      "description": "Generated password for private admin login. Keep private.",
                      "defaultValue": "{{CENTRIFUGO_ADMIN_PASSWORD}}"
                    },
                    "CENTRIFUGO_HEALTH_ENABLED": {
                      "isOptional": false,
                      "description": "Enables true health on private port 9000. Fixed true.",
                      "defaultValue": "true"
                    },
                    "CENTRIFUGO_HTTP_SERVER_PORT": {
                      "isOptional": false,
                      "description": "Public client transport listener. Fixed at 8000.",
                      "defaultValue": "8000"
                    },
                    "CENTRIFUGO_HTTP_API_EXTERNAL": {
                      "isOptional": false,
                      "description": "Keeps the publish API off the public listener. Must remain false.",
                      "defaultValue": "false"
                    },
                    "CENTRIFUGO_HTTP_API_INSECURE": {
                      "isOptional": false,
                      "description": "Requires the HTTP API key. Must remain false.",
                      "defaultValue": "false"
                    },
                    "CENTRIFUGO_CLIENT_ALLOWED_ORIGINS": {
                      "isOptional": false,
                      "description": "Exact HTTPS client origin(s), space-separated. Never use *.",
                      "defaultValue": "{{CENTRIFUGO_CLIENT_ALLOWED_ORIGINS}}"
                    },
                    "CENTRIFUGO_HTTP_SERVER_INTERNAL_PORT": {
                      "isOptional": false,
                      "description": "Private API, admin, and health listener. Fixed at 9000; do not expose.",
                      "defaultValue": "9000"
                    },
                    "CENTRIFUGO_CLIENT_TOKEN_HMAC_SECRET_KEY": {
                      "isOptional": false,
                      "description": "Generated HMAC secret used by the trusted backend to sign client JWTs. Keep private.",
                      "defaultValue": "{{CENTRIFUGO_CLIENT_TOKEN_HMAC_SECRET_KEY}}"
                    },
                    "CENTRIFUGO_CHANNEL_WITHOUT_NAMESPACE_ALLOW_SUBSCRIBE_FOR_CLIENT": {
                      "isOptional": false,
                      "description": "Allows authenticated base-namespace subscriptions; not channel authorization.",
                      "defaultValue": "true"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8000": {
                        "port": 8000
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "centrifugo",
      "method": "GET",
      "path": "/connection/init",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 1,
    "needs_volume": false
  },
  "generated_at": "2026-09-20T22:14:37.505Z",
  "generator_version": "0.1.0"
}
