{
  "manifest_version": "1.0.0",
  "template": {
    "id": "ea9efe6a-e984-48bb-bcbc-44b9d6070cda",
    "slug": "Z-5ubo",
    "name": "ZeroSync",
    "description": "Rocicorp's ZeroSync engine for local-first apps",
    "url": "https://railway.com/deploy/Z-5ubo",
    "upstream": {
      "image": "rocicorp/zero:0.15.2025021402"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "ZeroSync",
      "source": {
        "image": "rocicorp/zero:0.15.2025021402"
      },
      "needs_volume": true,
      "volume_mount_path": "/zero-data",
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "ZERO_PORT",
      "service": "ZeroSync",
      "description": "The main port for client connections.",
      "secret": false,
      "strategy": "default",
      "default": "4848"
    },
    {
      "key": "ZERO_CVR_DB",
      "service": "ZeroSync",
      "description": "A separate Postgres database used to store CVRs.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PG_DATABSE_URL",
      "service": "ZeroSync",
      "description": "Postgres connection URL.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "ZERO_CHANGE_DB",
      "service": "ZeroSync",
      "description": "Another Postgres database used to store a replication log.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ZERO_LOG_LEVEL",
      "service": "ZeroSync",
      "description": "Sets the logging level for the application.",
      "secret": false,
      "strategy": "default",
      "default": "info"
    },
    {
      "key": "ZERO_LOG_FORMAT",
      "service": "ZeroSync",
      "description": "Sets the log output format.",
      "secret": false,
      "strategy": "default",
      "default": "text"
    },
    {
      "key": "ZERO_PUBLIC_URL",
      "service": "ZeroSync",
      "description": "URL to be used with the Zero client.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "ZERO_UPSTREAM_DB",
      "service": "ZeroSync",
      "description": "The \"upstream\" authoritative Postgres database.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ZERO_REPLICA_FILE",
      "service": "ZeroSync",
      "description": "File path to the SQLite replica that zero-cache maintains.",
      "secret": false,
      "strategy": "default",
      "default": "/zero-data/zstart_replica.db"
    },
    {
      "key": "ZERO_CVR_MAX_CONNS",
      "service": "ZeroSync",
      "description": "The maximum number of connections to open to the CVR database.",
      "secret": false,
      "strategy": "default",
      "default": "30"
    },
    {
      "key": "ZERO_CHANGE_MAX_CONNS",
      "service": "ZeroSync",
      "description": "The maximum number of connections to open to the change database.",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "ZERO_NUM_SYNC_WORKERS",
      "service": "ZeroSync",
      "description": "The number of processes to use for view syncing.",
      "secret": false,
      "strategy": "default",
      "default": "20"
    },
    {
      "key": "ZERO_UPSTREAM_MAX_CONNS",
      "service": "ZeroSync",
      "description": "The maximum number of connections to open to the upstream database for committing mutations.",
      "secret": false,
      "strategy": "default",
      "default": "20"
    },
    {
      "key": "ZERO_CHANGE_STREAMER_PORT",
      "service": "ZeroSync",
      "description": "The port on which the change-streamer runs.",
      "secret": false,
      "strategy": "default",
      "default": "4849"
    },
    {
      "key": "ZERO_HEARTBEAT_MONITOR_PORT",
      "service": "ZeroSync",
      "description": "The port on which the heartbeat monitor listens for health checks.",
      "secret": false,
      "strategy": "default",
      "default": "4850"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "Z-5ubo"
      }
    },
    "cli": "railway deploy --template Z-5ubo",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "ea9efe6a-e984-48bb-bcbc-44b9d6070cda",
            "serializedConfig": {
              "services": {
                "f5326e26-da0e-4bb0-b7e2-4807612a55c4": {
                  "icon": "https://iili.io/2pbxEhu.png",
                  "name": "ZeroSync",
                  "source": {
                    "image": "rocicorp/zero:0.15.2025021402"
                  },
                  "variables": {
                    "ZERO_PORT": {
                      "isOptional": false,
                      "description": "The main port for client connections.",
                      "defaultValue": "4848"
                    },
                    "ZERO_CVR_DB": {
                      "isOptional": false,
                      "description": "A separate Postgres database used to store CVRs.",
                      "defaultValue": "${{ZeroSync.PG_DATABSE_URL}}_cvr"
                    },
                    "ZERO_AUTH_JWK": {
                      "isOptional": true,
                      "description": "A public key in JWK format used to verify JWTs. Only one of ZERO_AUTH_JWK, ZERO_AUTH_JWKS_URL and ZERO_AUTH_SECRET may be set.",
                      "defaultValue": ""
                    },
                    "PG_DATABSE_URL": {
                      "isOptional": false,
                      "description": "Postgres connection URL.",
                      "defaultValue": "{{PG_DATABSE_URL}}"
                    },
                    "ZERO_CHANGE_DB": {
                      "isOptional": false,
                      "description": "Another Postgres database used to store a replication log.",
                      "defaultValue": "${{ZeroSync.PG_DATABSE_URL}}_cdb"
                    },
                    "ZERO_LOG_LEVEL": {
                      "isOptional": true,
                      "description": "Sets the logging level for the application.",
                      "defaultValue": "info"
                    },
                    "ZERO_LOG_FORMAT": {
                      "isOptional": true,
                      "description": "Sets the log output format.",
                      "defaultValue": "text"
                    },
                    "ZERO_PUBLIC_URL": {
                      "description": "URL to be used with the Zero client.",
                      "defaultValue": "${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "ZERO_AUTH_SECRET": {
                      "isOptional": true,
                      "description": "A symmetric key used to verify JWTs. Only one of ZERO_AUTH_JWK, ZERO_AUTH_JWKS_URL and ZERO_AUTH_SECRET may be set.",
                      "defaultValue": ""
                    },
                    "ZERO_UPSTREAM_DB": {
                      "isOptional": false,
                      "description": "The \"upstream\" authoritative Postgres database.",
                      "defaultValue": "${{ZeroSync.PG_DATABSE_URL}}"
                    },
                    "ZERO_REPLICA_FILE": {
                      "isOptional": false,
                      "description": "File path to the SQLite replica that zero-cache maintains.",
                      "defaultValue": "/zero-data/zstart_replica.db"
                    },
                    "ZERO_AUTH_JWKS_URL": {
                      "isOptional": true,
                      "description": "A URL that returns a JWK set used to verify JWTs. Only one of ZERO_AUTH_JWK, ZERO_AUTH_JWKS_URL and ZERO_AUTH_SECRET may be set.",
                      "defaultValue": ""
                    },
                    "ZERO_CVR_MAX_CONNS": {
                      "isOptional": true,
                      "description": "The maximum number of connections to open to the CVR database.",
                      "defaultValue": "30"
                    },
                    "ZERO_CHANGE_MAX_CONNS": {
                      "isOptional": true,
                      "description": "The maximum number of connections to open to the change database.",
                      "defaultValue": "1"
                    },
                    "ZERO_NUM_SYNC_WORKERS": {
                      "isOptional": false,
                      "description": "The number of processes to use for view syncing.",
                      "defaultValue": "20"
                    },
                    "ZERO_UPSTREAM_MAX_CONNS": {
                      "isOptional": true,
                      "description": "The maximum number of connections to open to the upstream database for committing mutations.",
                      "defaultValue": "20"
                    },
                    "ZERO_LOG_TRACE_COLLECTOR": {
                      "isOptional": true,
                      "description": "The URL of the trace collector to which to send trace data. Traces are sent over HTTP.",
                      "defaultValue": ""
                    },
                    "ZERO_CHANGE_STREAMER_PORT": {
                      "isOptional": false,
                      "description": "The port on which the change-streamer runs.",
                      "defaultValue": "4849"
                    },
                    "ZERO_HEARTBEAT_MONITOR_PORT": {
                      "isOptional": false,
                      "description": "The port on which the heartbeat monitor listens for health checks.",
                      "defaultValue": "4850"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  },
                  "volumeMounts": {
                    "f5326e26-da0e-4bb0-b7e2-4807612a55c4": {
                      "mountPath": "/zero-data"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 1,
    "needs_volume": true
  },
  "generated_at": "2026-09-21T22:14:44.200Z",
  "generator_version": "0.1.0"
}
