{
  "manifest_version": "1.0.0",
  "template": {
    "id": "7f30f3bf-215d-40c9-adc0-3c188c64ab11",
    "slug": "walrus-publisheraggregator",
    "name": "Walrus Publisher/Aggregator",
    "description": "Template to run your own Walrus Publisher and/or Aggregator",
    "url": "https://railway.com/deploy/walrus-publisheraggregator",
    "upstream": {
      "image": "cmdoss/walrus"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "cmdoss/walrus",
      "source": {
        "image": "cmdoss/walrus"
      },
      "needs_volume": true,
      "volume_mount_path": "/wallets",
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "MODE",
      "service": "cmdoss/walrus",
      "description": "Service mode: `publisher`, `aggregator`, `daemon`, or unset for CLI mode",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "NETWORK",
      "service": "cmdoss/walrus",
      "description": "**Required** Network to use (`testnet`, `mainnet`)",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "SUI_KEYSTORE",
      "service": "cmdoss/walrus",
      "description": "**Required for publisher/daemon modes** Private key from `~/.sui/sui_config/sui.keystore`",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "walrus-publisheraggregator"
      }
    },
    "cli": "railway deploy --template walrus-publisheraggregator",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "7f30f3bf-215d-40c9-adc0-3c188c64ab11",
            "serializedConfig": {
              "services": {
                "ff03c6a2-d1dd-4a49-ad3e-ae46be64bb29": {
                  "icon": "https://docs.wal.app/img/logo.svg",
                  "name": "cmdoss/walrus",
                  "source": {
                    "image": "cmdoss/walrus"
                  },
                  "variables": {
                    "MODE": {
                      "isOptional": false,
                      "description": "Service mode: `publisher`, `aggregator`, `daemon`, or unset for CLI mode",
                      "defaultValue": "{{MODE}}"
                    },
                    "NETWORK": {
                      "isOptional": false,
                      "description": "**Required** Network to use (`testnet`, `mainnet`)",
                      "defaultValue": "{{NETWORK}}"
                    },
                    "BLOCKLIST": {
                      "isOptional": true,
                      "description": "Path to blocklist file (YAML)",
                      "defaultValue": ""
                    },
                    "N_CLIENTS": {
                      "isOptional": true,
                      "description": "Number of Walrus clients",
                      "defaultValue": ""
                    },
                    "BIND_ADDRESS": {
                      "isOptional": true,
                      "description": "HTTP server bind address (default `[::]:31415`)",
                      "defaultValue": ""
                    },
                    "SUI_KEYSTORE": {
                      "isOptional": false,
                      "description": "**Required for publisher/daemon modes** Private key from `~/.sui/sui_config/sui.keystore`",
                      "defaultValue": "{{SUI_KEYSTORE}}"
                    },
                    "JWT_ALGORITHM": {
                      "isOptional": true,
                      "description": "JWT algorithm (e.g., `HS256`)",
                      "defaultValue": ""
                    },
                    "MAX_BLOB_SIZE": {
                      "isOptional": true,
                      "description": "Maximum blob size in bytes",
                      "defaultValue": ""
                    },
                    "MAX_BODY_SIZE": {
                      "isOptional": true,
                      "description": "Maximum upload body size (KB)",
                      "defaultValue": ""
                    },
                    "JWT_CACHE_SIZE": {
                      "isOptional": true,
                      "description": "JWT cache size",
                      "defaultValue": ""
                    },
                    "ALLOWED_HEADERS": {
                      "isOptional": true,
                      "description": "Space-separated list of allowed response headers",
                      "defaultValue": ""
                    },
                    "METRICS_ADDRESS": {
                      "isOptional": true,
                      "description": "Metrics endpoint address (default `[::]:27182`)",
                      "defaultValue": ""
                    },
                    "REFILL_INTERVAL": {
                      "isOptional": true,
                      "description": "Wallet refill interval",
                      "defaultValue": ""
                    },
                    "BURN_AFTER_STORE": {
                      "isOptional": true,
                      "description": "Burn WAL tokens after store (1=yes, 0=no)",
                      "defaultValue": ""
                    },
                    "JWT_EXPIRING_SEC": {
                      "isOptional": true,
                      "description": "JWT expiration time (seconds)",
                      "defaultValue": ""
                    },
                    "GAS_REFILL_AMOUNT": {
                      "isOptional": true,
                      "description": "SUI gas refill amount (MIST)",
                      "defaultValue": ""
                    },
                    "JWT_DECODE_SECRET": {
                      "isOptional": true,
                      "description": "JWT secret for verification",
                      "defaultValue": ""
                    },
                    "JWT_VERIFY_UPLOAD": {
                      "isOptional": true,
                      "description": "Verify JWT on upload (1=yes, 0=no)",
                      "defaultValue": ""
                    },
                    "WAL_REFILL_AMOUNT": {
                      "isOptional": true,
                      "description": "WAL token refill amount",
                      "defaultValue": ""
                    },
                    "ALLOW_QUILT_PATCH_TAGS": {
                      "isOptional": true,
                      "description": "Allow quilt patch tags in response (1=yes, 0=no)",
                      "defaultValue": ""
                    },
                    "SUB_WALLETS_MIN_BALANCE": {
                      "isOptional": true,
                      "description": "Minimum sub-wallet balance",
                      "defaultValue": ""
                    },
                    "PUBLISHER_MAX_BUFFER_SIZE": {
                      "isOptional": true,
                      "description": "Publisher max buffer size",
                      "defaultValue": ""
                    },
                    "AGGREGATOR_MAX_BUFFER_SIZE": {
                      "isOptional": true,
                      "description": "Aggregator max buffer size",
                      "defaultValue": ""
                    },
                    "JWT_CACHE_REFRESH_INTERVAL": {
                      "isOptional": true,
                      "description": "JWT cache refresh interval",
                      "defaultValue": ""
                    },
                    "PUBLISHER_MAX_CONCURRENT_REQUESTS": {
                      "isOptional": true,
                      "description": "Publisher max concurrent requests",
                      "defaultValue": ""
                    },
                    "AGGREGATOR_MAX_CONCURRENT_REQUESTS": {
                      "isOptional": true,
                      "description": "Aggregator max concurrent requests",
                      "defaultValue": ""
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:31415": {
                        "port": 31415
                      }
                    }
                  },
                  "volumeMounts": {
                    "ff03c6a2-d1dd-4a49-ad3e-ae46be64bb29": {
                      "mountPath": "/wallets"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 1,
    "needs_volume": true
  },
  "generated_at": "2026-09-20T16:14:49.616Z",
  "generator_version": "0.1.0"
}
