{
  "manifest_version": "1.0.0",
  "template": {
    "id": "fb5fee86-8751-4aa4-a531-7f62f9e9bbdf",
    "slug": "weaviate-db",
    "name": "Weaviate",
    "description": "Pinecone Alternative. Open-source vector database for semantic search & RAG",
    "url": "https://railway.com/deploy/weaviate-db",
    "upstream": {
      "image": "semitechnologies/weaviate:1.38.9"
    }
  },
  "services": [
    {
      "name": "t2v-transformers",
      "source": {
        "image": "semitechnologies/transformers-inference:sentence-transformers-all-MiniLM-L6-v2-onnx"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "weaviate",
      "source": {
        "image": "semitechnologies/weaviate:1.38.9"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/weaviate",
      "tcp_ports": [
        50051
      ],
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "PORT",
      "service": "t2v-transformers",
      "description": "Inference server port",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "LOG_LEVEL",
      "service": "t2v-transformers",
      "description": "Log verbosity",
      "secret": false,
      "strategy": "default",
      "default": "info"
    },
    {
      "key": "ENABLE_CUDA",
      "service": "t2v-transformers",
      "description": "Run inference on CPU",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "PORT",
      "service": "weaviate",
      "description": "Port Railway health-checks",
      "secret": false,
      "strategy": "default",
      "default": "2112"
    },
    {
      "key": "AWS_REGION",
      "service": "weaviate",
      "description": "Bucket region",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOMAXPROCS",
      "service": "weaviate",
      "description": "Cap Go threads to the CPU quota",
      "secret": false,
      "strategy": "default",
      "default": "8"
    },
    {
      "key": "GOMEMLIMIT",
      "service": "weaviate",
      "description": "Go heap ceiling below the RAM limit",
      "secret": false,
      "strategy": "default",
      "default": "6GiB"
    },
    {
      "key": "BACKUP_S3_PATH",
      "service": "weaviate",
      "description": "Key prefix inside the bucket",
      "secret": false,
      "strategy": "default",
      "default": "backups"
    },
    {
      "key": "ENABLE_MODULES",
      "service": "weaviate",
      "description": "Vectorizer and backup modules",
      "secret": false,
      "strategy": "default",
      "default": "text2vec-transformers,backup-s3"
    },
    {
      "key": "BACKUP_S3_BUCKET",
      "service": "weaviate",
      "description": "Backup bucket name",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CLUSTER_HOSTNAME",
      "service": "weaviate",
      "description": "Stable node name across redeploys",
      "secret": false,
      "strategy": "default",
      "default": "node1"
    },
    {
      "key": "AWS_ACCESS_KEY_ID",
      "service": "weaviate",
      "description": "Bucket access key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "BACKUP_S3_USE_SSL",
      "service": "weaviate",
      "description": "Use TLS to the bucket",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "BACKUP_S3_ENDPOINT",
      "service": "weaviate",
      "description": "Bare host, no scheme",
      "secret": false,
      "strategy": "default",
      "default": "t3.storageapi.dev"
    },
    {
      "key": "QUERY_DEFAULTS_LIMIT",
      "service": "weaviate",
      "description": "Default result count per query",
      "secret": false,
      "strategy": "default",
      "default": "25"
    },
    {
      "key": "AWS_SECRET_ACCESS_KEY",
      "service": "weaviate",
      "description": "Bucket secret key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PERSISTENCE_DATA_PATH",
      "service": "weaviate",
      "description": "Data directory on the volume",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/weaviate"
    },
    {
      "key": "DEFAULT_VECTORIZER_MODULE",
      "service": "weaviate",
      "description": "Vectorizer for new collections",
      "secret": false,
      "strategy": "default",
      "default": "text2vec-transformers"
    },
    {
      "key": "AUTHORIZATION_RBAC_ENABLED",
      "service": "weaviate",
      "description": "Enable role-based access control",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PROMETHEUS_MONITORING_PORT",
      "service": "weaviate",
      "description": "Metrics port",
      "secret": false,
      "strategy": "default",
      "default": "2112"
    },
    {
      "key": "TRANSFORMERS_INFERENCE_API",
      "service": "weaviate",
      "description": "Private inference endpoint",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "AUTHENTICATION_APIKEY_USERS",
      "service": "weaviate",
      "description": "Users matched to those keys",
      "secret": true,
      "strategy": "default",
      "default": "admin-user,readonly-user"
    },
    {
      "key": "DISK_USE_WARNING_PERCENTAGE",
      "service": "weaviate",
      "description": "Warn at this disk usage",
      "secret": false,
      "strategy": "default",
      "default": "80"
    },
    {
      "key": "AUTHENTICATION_APIKEY_ENABLED",
      "service": "weaviate",
      "description": "Enable API key authentication",
      "secret": true,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "AUTHORIZATION_RBAC_ROOT_USERS",
      "service": "weaviate",
      "description": "User granted the root role",
      "secret": false,
      "strategy": "default",
      "default": "admin-user"
    },
    {
      "key": "PROMETHEUS_MONITORING_ENABLED",
      "service": "weaviate",
      "description": "Expose Prometheus metrics",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "RAFT_ENABLE_ONE_NODE_RECOVERY",
      "service": "weaviate",
      "description": "Recover single node after IP change",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "AUTHENTICATION_DB_USERS_ENABLED",
      "service": "weaviate",
      "description": "Allow managing users via the API",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "AUTHENTICATION_APIKEY_ALLOWED_KEYS",
      "service": "weaviate",
      "description": "Admin key, read-only key",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED",
      "service": "weaviate",
      "description": "Require an API key",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "EXPERIMENTAL_AUTHORIZATION_RBAC_READONLY_USERS",
      "service": "weaviate",
      "description": "User granted the viewer role",
      "secret": false,
      "strategy": "default",
      "default": "readonly-user"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "weaviate-db"
      }
    },
    "cli": "railway deploy --template weaviate-db",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "fb5fee86-8751-4aa4-a531-7f62f9e9bbdf",
            "serializedConfig": {
              "buckets": {
                "486e5d0f-4745-46e2-a943-dc55836d127e": {
                  "name": "weaviate-backups"
                }
              },
              "services": {
                "a568c401-73f5-4adc-b21c-e3b6c1b8044e": {
                  "icon": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/weaviate.svg",
                  "name": "t2v-transformers",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/meta",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "semitechnologies/transformers-inference:sentence-transformers-all-MiniLM-L6-v2-onnx"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Inference server port",
                      "defaultValue": "8080"
                    },
                    "LOG_LEVEL": {
                      "isOptional": false,
                      "description": "Log verbosity",
                      "defaultValue": "info"
                    },
                    "ENABLE_CUDA": {
                      "isOptional": false,
                      "description": "Run inference on CPU",
                      "defaultValue": "0"
                    }
                  }
                },
                "f8db4bea-a01a-4cab-961d-bc2de24029f0": {
                  "icon": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/weaviate.svg",
                  "name": "weaviate",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/metrics",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "semitechnologies/weaviate:1.38.9"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Port Railway health-checks",
                      "defaultValue": "2112"
                    },
                    "AWS_REGION": {
                      "isOptional": false,
                      "description": "Bucket region",
                      "defaultValue": "${{weaviate-backups.REGION}}"
                    },
                    "GOMAXPROCS": {
                      "isOptional": false,
                      "description": "Cap Go threads to the CPU quota",
                      "defaultValue": "8"
                    },
                    "GOMEMLIMIT": {
                      "isOptional": false,
                      "description": "Go heap ceiling below the RAM limit",
                      "defaultValue": "6GiB"
                    },
                    "BACKUP_S3_PATH": {
                      "isOptional": false,
                      "description": "Key prefix inside the bucket",
                      "defaultValue": "backups"
                    },
                    "ENABLE_MODULES": {
                      "isOptional": false,
                      "description": "Vectorizer and backup modules",
                      "defaultValue": "text2vec-transformers,backup-s3"
                    },
                    "BACKUP_S3_BUCKET": {
                      "isOptional": false,
                      "description": "Backup bucket name",
                      "defaultValue": "${{weaviate-backups.BUCKET}}"
                    },
                    "CLUSTER_HOSTNAME": {
                      "isOptional": false,
                      "description": "Stable node name across redeploys",
                      "defaultValue": "node1"
                    },
                    "AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "description": "Bucket access key",
                      "defaultValue": "${{weaviate-backups.ACCESS_KEY_ID}}"
                    },
                    "BACKUP_S3_USE_SSL": {
                      "isOptional": false,
                      "description": "Use TLS to the bucket",
                      "defaultValue": "true"
                    },
                    "BACKUP_S3_ENDPOINT": {
                      "isOptional": false,
                      "description": "Bare host, no scheme",
                      "defaultValue": "t3.storageapi.dev"
                    },
                    "QUERY_DEFAULTS_LIMIT": {
                      "isOptional": false,
                      "description": "Default result count per query",
                      "defaultValue": "25"
                    },
                    "AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Bucket secret key",
                      "defaultValue": "${{weaviate-backups.SECRET_ACCESS_KEY}}"
                    },
                    "PERSISTENCE_DATA_PATH": {
                      "isOptional": false,
                      "description": "Data directory on the volume",
                      "defaultValue": "/var/lib/weaviate"
                    },
                    "DEFAULT_VECTORIZER_MODULE": {
                      "isOptional": false,
                      "description": "Vectorizer for new collections",
                      "defaultValue": "text2vec-transformers"
                    },
                    "AUTHORIZATION_RBAC_ENABLED": {
                      "isOptional": false,
                      "description": "Enable role-based access control",
                      "defaultValue": "true"
                    },
                    "PROMETHEUS_MONITORING_PORT": {
                      "isOptional": false,
                      "description": "Metrics port",
                      "defaultValue": "2112"
                    },
                    "TRANSFORMERS_INFERENCE_API": {
                      "isOptional": false,
                      "description": "Private inference endpoint",
                      "defaultValue": "http://${{t2v-transformers.RAILWAY_PRIVATE_DOMAIN}}:8080"
                    },
                    "AUTHENTICATION_APIKEY_USERS": {
                      "isOptional": false,
                      "description": "Users matched to those keys",
                      "defaultValue": "admin-user,readonly-user"
                    },
                    "DISK_USE_WARNING_PERCENTAGE": {
                      "isOptional": false,
                      "description": "Warn at this disk usage",
                      "defaultValue": "80"
                    },
                    "AUTHENTICATION_APIKEY_ENABLED": {
                      "isOptional": false,
                      "description": "Enable API key authentication",
                      "defaultValue": "true"
                    },
                    "AUTHORIZATION_RBAC_ROOT_USERS": {
                      "isOptional": false,
                      "description": "User granted the root role",
                      "defaultValue": "admin-user"
                    },
                    "PROMETHEUS_MONITORING_ENABLED": {
                      "isOptional": false,
                      "description": "Expose Prometheus metrics",
                      "defaultValue": "true"
                    },
                    "RAFT_ENABLE_ONE_NODE_RECOVERY": {
                      "isOptional": false,
                      "description": "Recover single node after IP change",
                      "defaultValue": "true"
                    },
                    "AUTHENTICATION_DB_USERS_ENABLED": {
                      "isOptional": false,
                      "description": "Allow managing users via the API",
                      "defaultValue": "true"
                    },
                    "AUTHENTICATION_APIKEY_ALLOWED_KEYS": {
                      "isOptional": false,
                      "description": "Admin key, read-only key",
                      "defaultValue": "{{AUTHENTICATION_APIKEY_ALLOWED_KEYS}}"
                    },
                    "AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED": {
                      "isOptional": false,
                      "description": "Require an API key",
                      "defaultValue": "false"
                    },
                    "EXPERIMENTAL_AUTHORIZATION_RBAC_READONLY_USERS": {
                      "isOptional": false,
                      "description": "User granted the viewer role",
                      "defaultValue": "readonly-user"
                    }
                  },
                  "networking": {
                    "tcpProxies": {
                      "50051": {}
                    },
                    "serviceDomains": {
                      "<hasDomain>:8080": {
                        "port": 8080
                      }
                    }
                  },
                  "volumeMounts": {
                    "f8db4bea-a01a-4cab-961d-bc2de24029f0": {
                      "mountPath": "/var/lib/weaviate"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "weaviate",
      "method": "GET",
      "path": "/metrics",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 2,
    "needs_volume": true
  },
  "generated_at": "2026-09-11T10:14:37.526Z",
  "generator_version": "0.1.0",
  "status": "degraded",
  "validated_at": "2026-09-10T17:48:37.427Z",
  "success_rate_30d": 0,
  "validation": {
    "last_run_id": "run_5d5e0f0809ae41f490a1",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": false,
        "detail": "Your workspace has been restricted. Please contact support to resolve this."
      }
    ]
  }
}
