{
  "manifest_version": "1.0.0",
  "template": {
    "id": "933898cb-396b-42dc-be3b-bfadf5ebc994",
    "slug": "lightrag-neo4j",
    "name": "LightRAG + Neo4j",
    "description": "Graph RAG with Neo4j and Open WebUI: chat with your documents",
    "url": "https://railway.com/deploy/lightrag-neo4j",
    "upstream": {
      "image": "ghcr.io/open-webui/open-webui:v0.12.4"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "Postgres",
      "source": {
        "image": "ghcr.io/railwayapp-templates/postgres-ssl:18"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/postgresql/data",
      "http": false
    },
    {
      "name": "Neo4j",
      "source": {
        "image": "neo4j:5.26-community"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    },
    {
      "name": "LightRAG",
      "source": {
        "image": "ghcr.io/hkuds/lightrag:v1.5.7"
      },
      "needs_volume": true,
      "volume_mount_path": "/app/data",
      "http": false
    },
    {
      "name": "openwebui",
      "source": {
        "image": "ghcr.io/open-webui/open-webui:v0.12.4"
      },
      "needs_volume": false,
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "PGDATA",
      "service": "Postgres",
      "description": "Data directory inside the volume; Postgres needs a subfolder, not the volume root",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/postgresql/data/pgdata"
    },
    {
      "key": "PGHOST",
      "service": "Postgres",
      "description": "Host on Railway's private network, used by other services in the project",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PGPORT",
      "service": "Postgres",
      "description": "Port Postgres listens on",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "PGUSER",
      "service": "Postgres",
      "description": "Username for connecting, mirrors POSTGRES_USER",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGDATABASE",
      "service": "Postgres",
      "description": "Database name for connecting, mirrors POSTGRES_DB",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGPASSWORD",
      "service": "Postgres",
      "description": "Password for connecting, mirrors POSTGRES_PASSWORD",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_DB",
      "service": "Postgres",
      "description": "Database created on first start",
      "secret": false,
      "strategy": "default",
      "default": "railway"
    },
    {
      "key": "DATABASE_URL",
      "service": "Postgres",
      "description": "Full connection string over the private network",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "POSTGRES_USER",
      "service": "Postgres",
      "description": "Superuser created on first start",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "SSL_CERT_DAYS",
      "service": "Postgres",
      "description": "Validity in days of the self-signed SSL certificate Postgres generates",
      "secret": false,
      "strategy": "default",
      "default": "820"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "Postgres",
      "description": "Superuser password, 32 random letters generated per deploy",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "RAILWAY_DEPLOYMENT_DRAINING_SECONDS",
      "service": "Postgres",
      "description": "Seconds Railway waits after stopping the old deployment, so Postgres can shut down cleanly",
      "secret": false,
      "strategy": "default",
      "default": "60"
    },
    {
      "key": "NEO4J_AUTH",
      "service": "Neo4j",
      "description": "Initial credentials in user/password format, built from DB_PASSWORD. Do not edit.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_PASSWORD",
      "service": "Neo4j",
      "description": "Password for the neo4j user. Generated at deploy time and applied only on first boot.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "NEO4J_PLUGINS",
      "service": "Neo4j",
      "description": "Plugins installed at startup. APOC speeds up LightRAG's graph traversal queries.",
      "secret": false,
      "strategy": "default",
      "default": "[\"apoc\"]"
    },
    {
      "key": "NEO4J_server_memory_heap_max__size",
      "service": "Neo4j",
      "description": "Maximum JVM heap size. Raise for large knowledge graphs (e.g. 1g, 2g).",
      "secret": false,
      "strategy": "default",
      "default": "512m"
    },
    {
      "key": "NEO4J_server_memory_pagecache_size",
      "service": "Neo4j",
      "description": "Memory used to cache graph data. Ideally close to the graph's size on disk.",
      "secret": false,
      "strategy": "default",
      "default": "512m"
    },
    {
      "key": "NEO4J_server_memory_heap_initial__size",
      "service": "Neo4j",
      "description": "Initial JVM heap size for Neo4j.",
      "secret": false,
      "strategy": "default",
      "default": "512m"
    },
    {
      "key": "HOST",
      "service": "LightRAG",
      "description": "Interface the server listens on. Do not change.",
      "secret": false,
      "strategy": "default",
      "default": "0.0.0.0"
    },
    {
      "key": "PORT",
      "service": "LightRAG",
      "description": "Port for the LightRAG API and Web UI. Must match the public domain's port.",
      "secret": false,
      "strategy": "default",
      "default": "9621"
    },
    {
      "key": "LLM_MODEL",
      "service": "LightRAG",
      "description": "Model used for entity extraction during indexing and for answering queries.",
      "secret": false,
      "strategy": "default",
      "default": "gpt-5.4-mini"
    },
    {
      "key": "NEO4J_URI",
      "service": "LightRAG",
      "description": "Neo4j Bolt address on the private network. Do not edit.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "LLM_BINDING",
      "service": "LightRAG",
      "description": "LLM provider type. openai works with any OpenAI-compatible API (OpenRouter, Azure OpenAI, vLLM).",
      "secret": false,
      "strategy": "default",
      "default": "openai"
    },
    {
      "key": "WEBUI_TITLE",
      "service": "LightRAG",
      "description": "Name shown in the Web UI header, login page and browser tab.",
      "secret": false,
      "strategy": "default",
      "default": "LightRAG"
    },
    {
      "key": "TOKEN_SECRET",
      "service": "LightRAG",
      "description": "Secret used to sign login tokens (JWT). Changing it logs everyone out.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "AUTH_ACCOUNTS",
      "service": "LightRAG",
      "description": "Web UI accounts as comma-separated user:password pairs, e.g. admin:pass1,alice:pass2",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "EMBEDDING_DIM",
      "service": "LightRAG",
      "description": "Vector size of the embedding model. Must match EMBEDDING_MODEL and cannot change after indexing.",
      "secret": false,
      "strategy": "default",
      "default": "1536"
    },
    {
      "key": "POSTGRES_HOST",
      "service": "LightRAG",
      "description": "Postgres host on the private network. Do not edit.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_PORT",
      "service": "LightRAG",
      "description": "Postgres port. Do not edit.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_USER",
      "service": "LightRAG",
      "description": "Postgres user. Do not edit.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ADMIN_PASSWORD",
      "service": "LightRAG",
      "description": "Password for the admin account of the LightRAG Web UI. Copy it from here to sign in.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "NEO4J_DATABASE",
      "service": "LightRAG",
      "description": "Neo4j database name. Community Edition supports only neo4j.",
      "secret": false,
      "strategy": "default",
      "default": "neo4j"
    },
    {
      "key": "NEO4J_PASSWORD",
      "service": "LightRAG",
      "description": "Neo4j password, taken from the Neo4j service. Do not edit.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "NEO4J_USERNAME",
      "service": "LightRAG",
      "description": "Neo4j user. Do not edit.",
      "secret": false,
      "strategy": "default",
      "default": "neo4j"
    },
    {
      "key": "EMBEDDING_MODEL",
      "service": "LightRAG",
      "description": "Embedding model. Change it only before uploading your first document.",
      "secret": false,
      "strategy": "default",
      "default": "text-embedding-3-small"
    },
    {
      "key": "WHITELIST_PATHS",
      "service": "LightRAG",
      "description": "Paths reachable without auth. Keep as /health so the /api/* routes that call your LLM are not public.",
      "secret": false,
      "strategy": "default",
      "default": "/health"
    },
    {
      "key": "LIGHTRAG_API_KEY",
      "service": "LightRAG",
      "description": "API key for programmatic access, sent in the X-API-Key header. Open WebUI uses it too.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "LLM_BINDING_HOST",
      "service": "LightRAG",
      "description": "Base URL of the LLM API. Change it to use another OpenAI-compatible provider.",
      "secret": false,
      "strategy": "default",
      "default": "https://api.openai.com/v1"
    },
    {
      "key": "EMBEDDING_BINDING",
      "service": "LightRAG",
      "description": "Embedding provider type.",
      "secret": false,
      "strategy": "default",
      "default": "openai"
    },
    {
      "key": "POSTGRES_DATABASE",
      "service": "LightRAG",
      "description": "Postgres database name. Do not edit.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "LightRAG",
      "description": "Postgres password. Do not edit.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "LIGHTRAG_KV_STORAGE",
      "service": "LightRAG",
      "description": "Key-value storage (text chunks, LLM cache), stored in Postgres.",
      "secret": false,
      "strategy": "default",
      "default": "PGKVStorage"
    },
    {
      "key": "EMBEDDING_BINDING_HOST",
      "service": "LightRAG",
      "description": "Base URL of the embedding API.",
      "secret": false,
      "strategy": "default",
      "default": "https://api.openai.com/v1"
    },
    {
      "key": "LIGHTRAG_GRAPH_STORAGE",
      "service": "LightRAG",
      "description": "Knowledge graph of entities and relationships, stored in Neo4j.",
      "secret": false,
      "strategy": "default",
      "default": "Neo4JStorage"
    },
    {
      "key": "LIGHTRAG_VECTOR_STORAGE",
      "service": "LightRAG",
      "description": "Vector embeddings, stored in Postgres with pgvector.",
      "secret": false,
      "strategy": "default",
      "default": "PGVectorStorage"
    },
    {
      "key": "EMBEDDING_BINDING_API_KEY",
      "service": "LightRAG",
      "description": "API key for embeddings. Reuses the LLM key by default.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "LIGHTRAG_DOC_STATUS_STORAGE",
      "service": "LightRAG",
      "description": "Document processing status, stored in Postgres.",
      "secret": false,
      "strategy": "default",
      "default": "PGDocStatusStorage"
    },
    {
      "key": "PORT",
      "service": "openwebui",
      "description": "Port for the Open WebUI interface. Must match the public domain's port.",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "WEBUI_NAME",
      "service": "openwebui",
      "description": "Name shown in the Open WebUI interface.",
      "secret": false,
      "strategy": "default",
      "default": "LightRAG Chat"
    },
    {
      "key": "DEFAULT_MODELS",
      "service": "openwebui",
      "description": "Model selected by default in new chats.",
      "secret": false,
      "strategy": "default",
      "default": "lightrag:latest"
    },
    {
      "key": "OLLAMA_BASE_URL",
      "service": "openwebui",
      "description": "LightRAG's Ollama-compatible API on the private network. LightRAG appears as lightrag:latest. Do not edit.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "WEBUI_SECRET_KEY",
      "service": "openwebui",
      "description": "Secret used to sign Open WebUI sessions. Generated at deploy time.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "ENABLE_OPENAI_API",
      "service": "openwebui",
      "description": "Hides OpenAI models so only LightRAG appears. Set to true to also chat with OpenAI models directly.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "OLLAMA_API_CONFIGS",
      "service": "openwebui",
      "description": "Sends LightRAG's API key with every request. Read only on first boot. Do not edit.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "lightrag-neo4j"
      }
    },
    "cli": "railway deploy --template lightrag-neo4j",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "933898cb-396b-42dc-be3b-bfadf5ebc994",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "1ab55e41-7016-45f2-959c-4dee834e1b70": {
                  "icon": "https://devicons.railway.app/i/postgresql.svg",
                  "name": "Postgres",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/railwayapp-templates/postgres-ssl:18"
                  },
                  "variables": {
                    "PGDATA": {
                      "isOptional": false,
                      "description": "Data directory inside the volume; Postgres needs a subfolder, not the volume root",
                      "defaultValue": "/var/lib/postgresql/data/pgdata"
                    },
                    "PGHOST": {
                      "isOptional": false,
                      "description": "Host on Railway's private network, used by other services in the project",
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PGPORT": {
                      "isOptional": false,
                      "description": "Port Postgres listens on",
                      "defaultValue": "5432"
                    },
                    "PGUSER": {
                      "isOptional": false,
                      "description": "Username for connecting, mirrors POSTGRES_USER",
                      "defaultValue": "${{POSTGRES_USER}}"
                    },
                    "PGDATABASE": {
                      "isOptional": false,
                      "description": "Database name for connecting, mirrors POSTGRES_DB",
                      "defaultValue": "${{POSTGRES_DB}}"
                    },
                    "PGPASSWORD": {
                      "isOptional": false,
                      "description": "Password for connecting, mirrors POSTGRES_PASSWORD",
                      "defaultValue": "${{POSTGRES_PASSWORD}}"
                    },
                    "POSTGRES_DB": {
                      "isOptional": false,
                      "description": "Database created on first start",
                      "defaultValue": "railway"
                    },
                    "DATABASE_URL": {
                      "isOptional": false,
                      "description": "Full connection string over the private network",
                      "defaultValue": "postgresql://${{PGUSER}}:${{POSTGRES_PASSWORD}}@${{RAILWAY_PRIVATE_DOMAIN}}:5432/${{PGDATABASE}}"
                    },
                    "POSTGRES_USER": {
                      "isOptional": false,
                      "description": "Superuser created on first start",
                      "defaultValue": "postgres"
                    },
                    "SSL_CERT_DAYS": {
                      "isOptional": false,
                      "description": "Validity in days of the self-signed SSL certificate Postgres generates",
                      "defaultValue": "820"
                    },
                    "POSTGRES_PASSWORD": {
                      "isOptional": false,
                      "description": "Superuser password, 32 random letters generated per deploy",
                      "defaultValue": "{{POSTGRES_PASSWORD}}"
                    },
                    "RAILWAY_DEPLOYMENT_DRAINING_SECONDS": {
                      "isOptional": false,
                      "description": "Seconds Railway waits after stopping the old deployment, so Postgres can shut down cleanly",
                      "defaultValue": "60"
                    }
                  },
                  "volumeMounts": {
                    "1ab55e41-7016-45f2-959c-4dee834e1b70": {
                      "mountPath": "/var/lib/postgresql/data"
                    }
                  }
                },
                "844f32a9-18d4-45c7-b990-dbc2f847c218": {
                  "icon": null,
                  "name": "Neo4j",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "neo4j:5.26-community"
                  },
                  "variables": {
                    "NEO4J_AUTH": {
                      "isOptional": false,
                      "description": "Initial credentials in user/password format, built from DB_PASSWORD. Do not edit.",
                      "defaultValue": "neo4j/${{DB_PASSWORD}}"
                    },
                    "DB_PASSWORD": {
                      "isOptional": false,
                      "description": "Password for the neo4j user. Generated at deploy time and applied only on first boot.",
                      "defaultValue": "{{DB_PASSWORD}}"
                    },
                    "NEO4J_PLUGINS": {
                      "isOptional": false,
                      "description": "Plugins installed at startup. APOC speeds up LightRAG's graph traversal queries.",
                      "defaultValue": "[\"apoc\"]"
                    },
                    "NEO4J_server_memory_heap_max__size": {
                      "isOptional": false,
                      "description": "Maximum JVM heap size. Raise for large knowledge graphs (e.g. 1g, 2g).",
                      "defaultValue": "512m"
                    },
                    "NEO4J_server_memory_pagecache_size": {
                      "isOptional": false,
                      "description": "Memory used to cache graph data. Ideally close to the graph's size on disk.",
                      "defaultValue": "512m"
                    },
                    "NEO4J_server_memory_heap_initial__size": {
                      "isOptional": false,
                      "description": "Initial JVM heap size for Neo4j.",
                      "defaultValue": "512m"
                    }
                  },
                  "volumeMounts": {
                    "844f32a9-18d4-45c7-b990-dbc2f847c218": {
                      "mountPath": "/data"
                    }
                  }
                },
                "ebc1f46f-fc67-45eb-b169-f749ef18a69f": {
                  "icon": null,
                  "name": "LightRAG",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/hkuds/lightrag:v1.5.7"
                  },
                  "variables": {
                    "HOST": {
                      "isOptional": false,
                      "description": "Interface the server listens on. Do not change.",
                      "defaultValue": "0.0.0.0"
                    },
                    "PORT": {
                      "isOptional": false,
                      "description": "Port for the LightRAG API and Web UI. Must match the public domain's port.",
                      "defaultValue": "9621"
                    },
                    "LLM_MODEL": {
                      "isOptional": false,
                      "description": "Model used for entity extraction during indexing and for answering queries.",
                      "defaultValue": "gpt-5.4-mini"
                    },
                    "NEO4J_URI": {
                      "isOptional": false,
                      "description": "Neo4j Bolt address on the private network. Do not edit.",
                      "defaultValue": "bolt://${{Neo4j.RAILWAY_PRIVATE_DOMAIN}}:7687"
                    },
                    "LLM_BINDING": {
                      "isOptional": false,
                      "description": "LLM provider type. openai works with any OpenAI-compatible API (OpenRouter, Azure OpenAI, vLLM).",
                      "defaultValue": "openai"
                    },
                    "WEBUI_TITLE": {
                      "isOptional": false,
                      "description": "Name shown in the Web UI header, login page and browser tab.",
                      "defaultValue": "LightRAG"
                    },
                    "TOKEN_SECRET": {
                      "isOptional": false,
                      "description": "Secret used to sign login tokens (JWT). Changing it logs everyone out.",
                      "defaultValue": "{{TOKEN_SECRET}}"
                    },
                    "AUTH_ACCOUNTS": {
                      "isOptional": false,
                      "description": "Web UI accounts as comma-separated user:password pairs, e.g. admin:pass1,alice:pass2",
                      "defaultValue": "admin:${{ADMIN_PASSWORD}}"
                    },
                    "EMBEDDING_DIM": {
                      "isOptional": false,
                      "description": "Vector size of the embedding model. Must match EMBEDDING_MODEL and cannot change after indexing.",
                      "defaultValue": "1536"
                    },
                    "POSTGRES_HOST": {
                      "isOptional": false,
                      "description": "Postgres host on the private network. Do not edit.",
                      "defaultValue": "${{Postgres.PGHOST}}"
                    },
                    "POSTGRES_PORT": {
                      "isOptional": false,
                      "description": "Postgres port. Do not edit.",
                      "defaultValue": "${{Postgres.PGPORT}}"
                    },
                    "POSTGRES_USER": {
                      "isOptional": false,
                      "description": "Postgres user. Do not edit.",
                      "defaultValue": "${{Postgres.PGUSER}}"
                    },
                    "ADMIN_PASSWORD": {
                      "isOptional": false,
                      "description": "Password for the admin account of the LightRAG Web UI. Copy it from here to sign in.",
                      "defaultValue": "{{ADMIN_PASSWORD}}"
                    },
                    "NEO4J_DATABASE": {
                      "isOptional": false,
                      "description": "Neo4j database name. Community Edition supports only neo4j.",
                      "defaultValue": "neo4j"
                    },
                    "NEO4J_PASSWORD": {
                      "isOptional": false,
                      "description": "Neo4j password, taken from the Neo4j service. Do not edit.",
                      "defaultValue": "${{Neo4j.DB_PASSWORD}}"
                    },
                    "NEO4J_USERNAME": {
                      "isOptional": false,
                      "description": "Neo4j user. Do not edit.",
                      "defaultValue": "neo4j"
                    },
                    "EMBEDDING_MODEL": {
                      "isOptional": false,
                      "description": "Embedding model. Change it only before uploading your first document.",
                      "defaultValue": "text-embedding-3-small"
                    },
                    "WHITELIST_PATHS": {
                      "isOptional": false,
                      "description": "Paths reachable without auth. Keep as /health so the /api/* routes that call your LLM are not public.",
                      "defaultValue": "/health"
                    },
                    "LIGHTRAG_API_KEY": {
                      "isOptional": false,
                      "description": "API key for programmatic access, sent in the X-API-Key header. Open WebUI uses it too.",
                      "defaultValue": "{{LIGHTRAG_API_KEY}}"
                    },
                    "LLM_BINDING_HOST": {
                      "isOptional": false,
                      "description": "Base URL of the LLM API. Change it to use another OpenAI-compatible provider.",
                      "defaultValue": "https://api.openai.com/v1"
                    },
                    "EMBEDDING_BINDING": {
                      "isOptional": false,
                      "description": "Embedding provider type.",
                      "defaultValue": "openai"
                    },
                    "POSTGRES_DATABASE": {
                      "isOptional": false,
                      "description": "Postgres database name. Do not edit.",
                      "defaultValue": "${{Postgres.PGDATABASE}}"
                    },
                    "POSTGRES_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password. Do not edit.",
                      "defaultValue": "${{Postgres.PGPASSWORD}}"
                    },
                    "LIGHTRAG_KV_STORAGE": {
                      "isOptional": false,
                      "description": "Key-value storage (text chunks, LLM cache), stored in Postgres.",
                      "defaultValue": "PGKVStorage"
                    },
                    "LLM_BINDING_API_KEY": {
                      "isOptional": true,
                      "description": "Your OpenAI API key. Used for both the LLM and embeddings.",
                      "defaultValue": ""
                    },
                    "EMBEDDING_BINDING_HOST": {
                      "isOptional": false,
                      "description": "Base URL of the embedding API.",
                      "defaultValue": "https://api.openai.com/v1"
                    },
                    "LIGHTRAG_GRAPH_STORAGE": {
                      "isOptional": false,
                      "description": "Knowledge graph of entities and relationships, stored in Neo4j.",
                      "defaultValue": "Neo4JStorage"
                    },
                    "LIGHTRAG_VECTOR_STORAGE": {
                      "isOptional": false,
                      "description": "Vector embeddings, stored in Postgres with pgvector.",
                      "defaultValue": "PGVectorStorage"
                    },
                    "EMBEDDING_BINDING_API_KEY": {
                      "isOptional": false,
                      "description": "API key for embeddings. Reuses the LLM key by default.",
                      "defaultValue": "${{LLM_BINDING_API_KEY}}"
                    },
                    "LIGHTRAG_DOC_STATUS_STORAGE": {
                      "isOptional": false,
                      "description": "Document processing status, stored in Postgres.",
                      "defaultValue": "PGDocStatusStorage"
                    }
                  },
                  "volumeMounts": {
                    "ebc1f46f-fc67-45eb-b169-f749ef18a69f": {
                      "mountPath": "/app/data"
                    }
                  }
                },
                "fe878e1c-6bac-4742-984c-2ab495b92d95": {
                  "icon": null,
                  "name": "openwebui",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/open-webui/open-webui:v0.12.4"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Port for the Open WebUI interface. Must match the public domain's port.",
                      "defaultValue": "8080"
                    },
                    "WEBUI_NAME": {
                      "isOptional": false,
                      "description": "Name shown in the Open WebUI interface.",
                      "defaultValue": "LightRAG Chat"
                    },
                    "DEFAULT_MODELS": {
                      "isOptional": false,
                      "description": "Model selected by default in new chats.",
                      "defaultValue": "lightrag:latest"
                    },
                    "OLLAMA_BASE_URL": {
                      "isOptional": false,
                      "description": "LightRAG's Ollama-compatible API on the private network. LightRAG appears as lightrag:latest. Do not edit.",
                      "defaultValue": "http://${{LightRAG.RAILWAY_PRIVATE_DOMAIN}}:9621"
                    },
                    "WEBUI_SECRET_KEY": {
                      "isOptional": false,
                      "description": "Secret used to sign Open WebUI sessions. Generated at deploy time.",
                      "defaultValue": "{{WEBUI_SECRET_KEY}}"
                    },
                    "ENABLE_OPENAI_API": {
                      "isOptional": false,
                      "description": "Hides OpenAI models so only LightRAG appears. Set to true to also chat with OpenAI models directly.",
                      "defaultValue": "false"
                    },
                    "OLLAMA_API_CONFIGS": {
                      "isOptional": false,
                      "description": "Sends LightRAG's API key with every request. Read only on first boot. Do not edit.",
                      "defaultValue": "{\"0\":{\"auth_type\":\"none\",\"headers\":{\"X-API-Key\":\"${{LightRAG.LIGHTRAG_API_KEY}}\"}}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8080": {
                        "port": 8080
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 4,
    "needs_volume": true
  },
  "generated_at": "2026-10-27T10:14:46.328Z",
  "generator_version": "0.1.0"
}
