{
  "manifest_version": "1.0.0",
  "template": {
    "id": "6266e574-3a43-453a-b4d7-05f7e8245fa3",
    "slug": "librechat",
    "name": "LibreChat | Self-Hosted AI Chat with Multi-Provider Support",
    "description": "1-Click LibreChat deploy (OpenAI, Anthropic, Google, Ollama, RAG API)",
    "url": "https://railway.com/deploy/librechat",
    "upstream": {
      "image": "pgvector/pgvector:pg18"
    }
  },
  "services": [
    {
      "name": "pg_vector",
      "source": {
        "image": "pgvector/pgvector:pg18"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/postgresql",
      "http": true
    },
    {
      "name": "MongoDB",
      "source": {
        "image": "mongo"
      },
      "needs_volume": true,
      "volume_mount_path": "/data/db",
      "http": false
    },
    {
      "name": "RAG",
      "source": {
        "image": "ghcr.io/danny-avila/librechat-rag-api-dev-lite"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "Meilisearch",
      "source": {
        "image": "getmeili/meilisearch:v1.11.3"
      },
      "needs_volume": true,
      "volume_mount_path": "/meili_data",
      "http": false
    },
    {
      "name": "LibreChat",
      "source": {
        "image": "ghcr.io/danny-avila/librechat-dev:latest"
      },
      "needs_volume": false,
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "PGDATA",
      "service": "pg_vector",
      "description": "Directory storing database data",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/postgresql/data/pgdata"
    },
    {
      "key": "PGHOST",
      "service": "pg_vector",
      "description": "Public Postgres hostname",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGPORT",
      "service": "pg_vector",
      "description": "Public Postgres connection port",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGUSER",
      "service": "pg_vector",
      "description": "Postgres database username",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGDATABASE",
      "service": "pg_vector",
      "description": "Default Postgres database name",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGPASSWORD",
      "service": "pg_vector",
      "description": "Password for Postgres authentication",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_DB",
      "service": "pg_vector",
      "description": "Database created on initialization",
      "secret": false,
      "strategy": "default",
      "default": "railway"
    },
    {
      "key": "DATABASE_URL",
      "service": "pg_vector",
      "description": "Public Postgres connection URI",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_USER",
      "service": "pg_vector",
      "description": "Default Postgres admin username",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "SSL_CERT_DAYS",
      "service": "pg_vector",
      "description": "SSL certificate validity duration",
      "secret": false,
      "strategy": "default",
      "default": "820"
    },
    {
      "key": "PGHOST_PRIVATE",
      "service": "pg_vector",
      "description": "Internal Postgres hostname",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PGPORT_PRIVATE",
      "service": "pg_vector",
      "description": "Internal Postgres server port",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "pg_vector",
      "description": "Postgres user authentication password",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "DATABASE_URL_PRIVATE",
      "service": "pg_vector",
      "description": "Internal Postgres connection URI",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "RAILWAY_DEPLOYMENT_DRAINING_SECONDS",
      "service": "pg_vector",
      "description": "Grace period before shutdown",
      "secret": false,
      "strategy": "default",
      "default": "60"
    },
    {
      "key": "MONGOHOST",
      "service": "MongoDB",
      "description": "Internal MongoDB hostname",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "MONGOPORT",
      "service": "MongoDB",
      "description": "Default MongoDB server port",
      "secret": false,
      "strategy": "default",
      "default": "27017"
    },
    {
      "key": "MONGOUSER",
      "service": "MongoDB",
      "description": "MongoDB authentication username",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MONGO_URL",
      "service": "MongoDB",
      "description": "External MongoDB connection URI",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MONGOPASSWORD",
      "service": "MongoDB",
      "description": "MongoDB authentication password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MONGO_PRIVATE_URL",
      "service": "MongoDB",
      "description": "Internal MongoDB connection URI",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "MONGO_INITDB_ROOT_PASSWORD",
      "service": "MongoDB",
      "description": "Root password for MongoDB",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "MONGO_INITDB_ROOT_USERNAME",
      "service": "MongoDB",
      "description": "Root admin username",
      "secret": false,
      "strategy": "default",
      "default": "mongo"
    },
    {
      "key": "PORT",
      "service": "RAG",
      "description": "RAG API server listening port",
      "secret": false,
      "strategy": "default",
      "default": "8000"
    },
    {
      "key": "DB_HOST",
      "service": "RAG",
      "description": "Postgres host for vector database",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DB_PORT",
      "service": "RAG",
      "description": "Postgres server listening port",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "JWT_SECRET",
      "service": "RAG",
      "description": "Shared authentication JWT secret",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_DB",
      "service": "RAG",
      "description": "Database storing vector embeddings",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DEBUG_RAG_API",
      "service": "RAG",
      "description": "Disable RAG API debug logs",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "POSTGRES_USER",
      "service": "RAG",
      "description": "Postgres database username",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "OPENAI_API_KEY",
      "service": "RAG",
      "description": "API key for embeddings provider",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "RAG",
      "description": "Password for Postgres user",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "EMBEDDINGS_PROVIDER",
      "service": "RAG",
      "description": "Embedding model provider used",
      "secret": false,
      "strategy": "default",
      "default": "openai"
    },
    {
      "key": "MEILI_ENV",
      "service": "Meilisearch",
      "description": "Run Meilisearch in production mode",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "MEILI_DB_PATH",
      "service": "Meilisearch",
      "description": "Path storing Meilisearch index data",
      "secret": false,
      "strategy": "default",
      "default": "/meili_data/data.ms"
    },
    {
      "key": "MEILI_HTTP_ADDR",
      "service": "Meilisearch",
      "description": "Network address Meilisearch listens on",
      "secret": false,
      "strategy": "default",
      "default": ":::7700"
    },
    {
      "key": "MEILI_MASTER_KEY",
      "service": "Meilisearch",
      "description": "Master API key for search",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MEILI_NO_ANALYTICS",
      "service": "Meilisearch",
      "description": "Disable Meilisearch usage analytics",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "HOST",
      "service": "LibreChat",
      "description": "Bind server to all interfaces",
      "secret": false,
      "strategy": "default",
      "default": "0.0.0.0"
    },
    {
      "key": "SEARCH",
      "service": "LibreChat",
      "description": "Enable internal search feature",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "CREDS_IV",
      "service": "LibreChat",
      "description": "Initialization vector for encryption",
      "secret": false,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "NO_INDEX",
      "service": "LibreChat",
      "description": "Disable indexing by search engines",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "APP_TITLE",
      "service": "LibreChat",
      "description": "Application display title",
      "secret": false,
      "strategy": "default",
      "default": "LibreChat"
    },
    {
      "key": "CREDS_KEY",
      "service": "LibreChat",
      "description": "Encryption key for stored credentials",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "ENDPOINTS",
      "service": "LibreChat",
      "description": "Enabled AI provider endpoints",
      "secret": false,
      "strategy": "default",
      "default": "openAI,agents,assistants,azureOpenAI,google,anthropic,custom"
    },
    {
      "key": "LOGIN_MAX",
      "service": "LibreChat",
      "description": "Maximum login attempts allowed",
      "secret": false,
      "strategy": "default",
      "default": "7"
    },
    {
      "key": "MONGO_URI",
      "service": "LibreChat",
      "description": "MongoDB connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOOGLE_KEY",
      "service": "LibreChat",
      "description": "API key for Google models",
      "secret": true,
      "strategy": "default",
      "default": "user_provided"
    },
    {
      "key": "JWT_SECRET",
      "service": "LibreChat",
      "description": "Secret for JWT authentication",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "MEILI_HOST",
      "service": "LibreChat",
      "description": "Meilisearch internal endpoint",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "CONFIG_PATH",
      "service": "LibreChat",
      "description": "External LibreChat configuration file",
      "secret": false,
      "strategy": "default",
      "default": "https://raw.githubusercontent.com/LibreChat-AI/librechat-config-yaml/main/librechat-up-l.yaml"
    },
    {
      "key": "RAG_API_URL",
      "service": "LibreChat",
      "description": "Public endpoint of RAG pipeline",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "TITLE_CONVO",
      "service": "LibreChat",
      "description": "Automatically title conversations",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "BAN_DURATION",
      "service": "LibreChat",
      "description": "Duration of temporary bans",
      "secret": false,
      "strategy": "default",
      "default": "1000 * 60 * 60 * 2"
    },
    {
      "key": "BAN_INTERVAL",
      "service": "LibreChat",
      "description": "Interval tracking violation frequency",
      "secret": false,
      "strategy": "default",
      "default": "20"
    },
    {
      "key": "DEBUG_OPENAI",
      "service": "LibreChat",
      "description": "Disable OpenAI debug output",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "GROQ_API_KEY",
      "service": "LibreChat",
      "description": "API key for Groq models",
      "secret": true,
      "strategy": "default",
      "default": "user_provided"
    },
    {
      "key": "LOGIN_WINDOW",
      "service": "LibreChat",
      "description": "Time window tracking logins",
      "secret": false,
      "strategy": "default",
      "default": "5"
    },
    {
      "key": "REGISTER_MAX",
      "service": "LibreChat",
      "description": "Max registration attempts allowed",
      "secret": false,
      "strategy": "default",
      "default": "5"
    },
    {
      "key": "CHECK_BALANCE",
      "service": "LibreChat",
      "description": "Disable API balance checking",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "DEBUG_CONSOLE",
      "service": "LibreChat",
      "description": "Disable debug console output",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "DEBUG_LOGGING",
      "service": "LibreChat",
      "description": "Enable server debug logging",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "DEBUG_PLUGINS",
      "service": "LibreChat",
      "description": "Enable plugin debug logging",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "GOOGLE_MODELS",
      "service": "LibreChat",
      "description": "Allowed Google Gemini models",
      "secret": false,
      "strategy": "default",
      "default": "gemini-2.5-pro,gemini-2.5-pro-preview-06-05,gemini-2.5-pro-preview-05-06,gemini-2.5-pro-preview-03-25,gemini-2.5-flash,gemini-2.5-flash-preview-05-20,gemini-2.5-flash-lite-preview-06-17,gemini-2.0-flash,gemini-2.0-flash-exp,gemini-2.0-flash-lite-preview-02-05,gemini-2.0-flash-thinking-exp,gemini-2.0-flash-thinking-exp-1219,gemini-2.0-pro-exp-02-05,gemini-exp-1206,gemini-1.5-flash-001,gemini-1.5-flash-002,gemini-1.5-flash-latest,gemini-1.5-pro-001,gemini-1.5-pro-002,gemini-1.5-pro-latest"
    },
    {
      "key": "OPENAI_MODELS",
      "service": "LibreChat",
      "description": "Allowed OpenAI model list",
      "secret": false,
      "strategy": "default",
      "default": "gpt-3.5-turbo,gpt-4,gpt-4o,gpt-4.1,gpt-5,chatgpt-4o-latest"
    },
    {
      "key": "BAN_VIOLATIONS",
      "service": "LibreChat",
      "description": "Enable automatic banning system",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "MESSAGE_IP_MAX",
      "service": "LibreChat",
      "description": "Max messages per IP",
      "secret": false,
      "strategy": "default",
      "default": "40"
    },
    {
      "key": "OPENAI_API_KEY",
      "service": "LibreChat",
      "description": "API key for OpenAI models",
      "secret": true,
      "strategy": "default",
      "default": "user_provided"
    },
    {
      "key": "OPENROUTER_KEY",
      "service": "LibreChat",
      "description": "API key for OpenRouter gateway",
      "secret": true,
      "strategy": "default",
      "default": "user_provided"
    },
    {
      "key": "SESSION_EXPIRY",
      "service": "LibreChat",
      "description": "User session expiration time",
      "secret": false,
      "strategy": "default",
      "default": "1000 * 60 * 15"
    },
    {
      "key": "MISTRAL_API_KEY",
      "service": "LibreChat",
      "description": "API key for Mistral models",
      "secret": true,
      "strategy": "default",
      "default": "user_provided"
    },
    {
      "key": "REGISTER_WINDOW",
      "service": "LibreChat",
      "description": "Registration attempt tracking window",
      "secret": false,
      "strategy": "default",
      "default": "60"
    },
    {
      "key": "ANYSCALE_API_KEY",
      "service": "LibreChat",
      "description": "API key for Anyscale inference",
      "secret": true,
      "strategy": "default",
      "default": "user_provided"
    },
    {
      "key": "LIMIT_MESSAGE_IP",
      "service": "LibreChat",
      "description": "Limit messages per IP",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "MEILI_MASTER_KEY",
      "service": "LibreChat",
      "description": "Shared Meilisearch authentication key",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "MESSAGE_USER_MAX",
      "service": "LibreChat",
      "description": "Max messages per user",
      "secret": false,
      "strategy": "default",
      "default": "40"
    },
    {
      "key": "ALLOW_EMAIL_LOGIN",
      "service": "LibreChat",
      "description": "Allow users to login via email",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "ANTHROPIC_API_KEY",
      "service": "LibreChat",
      "description": "API key for Anthropic models",
      "secret": true,
      "strategy": "default",
      "default": "user_provided"
    },
    {
      "key": "FIREWORKS_API_KEY",
      "service": "LibreChat",
      "description": "API key for Fireworks models",
      "secret": true,
      "strategy": "default",
      "default": "user_provided"
    },
    {
      "key": "MESSAGE_IP_WINDOW",
      "service": "LibreChat",
      "description": "Time window for IP limit",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "OPENAI_MODERATION",
      "service": "LibreChat",
      "description": "Disable OpenAI moderation endpoint",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "ALLOW_REGISTRATION",
      "service": "LibreChat",
      "description": "Allow new user registrations",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "ALLOW_SOCIAL_LOGIN",
      "service": "LibreChat",
      "description": "Disable social provider login",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "JWT_REFRESH_SECRET",
      "service": "LibreChat",
      "description": "Secret for refresh tokens",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "LIMIT_MESSAGE_USER",
      "service": "LibreChat",
      "description": "Disable user message limit",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "MEILI_NO_ANALYTICS",
      "service": "LibreChat",
      "description": "Disable Meilisearch analytics",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PERPLEXITY_API_KEY",
      "service": "LibreChat",
      "description": "API key for Perplexity AI",
      "secret": true,
      "strategy": "default",
      "default": "user_provided"
    },
    {
      "key": "TOGETHERAI_API_KEY",
      "service": "LibreChat",
      "description": "API key for TogetherAI models",
      "secret": true,
      "strategy": "default",
      "default": "user_provided"
    },
    {
      "key": "GITHUB_CALLBACK_URL",
      "service": "LibreChat",
      "description": "GitHub OAuth callback path",
      "secret": false,
      "strategy": "default",
      "default": "/oauth/github/callback"
    },
    {
      "key": "GOOGLE_CALLBACK_URL",
      "service": "LibreChat",
      "description": "Google OAuth callback path",
      "secret": false,
      "strategy": "default",
      "default": "/oauth/google/callback"
    },
    {
      "key": "MESSAGE_USER_WINDOW",
      "service": "LibreChat",
      "description": "Time window for user limit",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "DISCORD_CALLBACK_URL",
      "service": "LibreChat",
      "description": "Discord OAuth callback path",
      "secret": false,
      "strategy": "default",
      "default": "/oauth/discord/callback"
    },
    {
      "key": "REFRESH_TOKEN_EXPIRY",
      "service": "LibreChat",
      "description": "Refresh token expiry duration",
      "secret": true,
      "strategy": "default",
      "default": "(1000 * 60 * 60 * 24) * 7"
    },
    {
      "key": "FACEBOOK_CALLBACK_URL",
      "service": "LibreChat",
      "description": "Facebook OAuth callback path",
      "secret": false,
      "strategy": "default",
      "default": "/oauth/facebook/callback"
    },
    {
      "key": "LOGIN_VIOLATION_SCORE",
      "service": "LibreChat",
      "description": "Score added on login violation",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "CONCURRENT_MESSAGE_MAX",
      "service": "LibreChat",
      "description": "Max simultaneous messages per user",
      "secret": false,
      "strategy": "default",
      "default": "2"
    },
    {
      "key": "MESSAGE_VIOLATION_SCORE",
      "service": "LibreChat",
      "description": "Score added on message violations",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "ALLOW_SOCIAL_REGISTRATION",
      "service": "LibreChat",
      "description": "Disable social account registration",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "LIMIT_CONCURRENT_MESSAGES",
      "service": "LibreChat",
      "description": "Enable concurrency message limits",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "CONCURRENT_VIOLATION_SCORE",
      "service": "LibreChat",
      "description": "Score added on concurrency violation",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "NON_BROWSER_VIOLATION_SCORE",
      "service": "LibreChat",
      "description": "Score added for non-browser access",
      "secret": false,
      "strategy": "default",
      "default": "20"
    },
    {
      "key": "REGISTRATION_VIOLATION_SCORE",
      "service": "LibreChat",
      "description": "Score added on registration violations",
      "secret": false,
      "strategy": "default",
      "default": "1"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "librechat"
      }
    },
    "cli": "railway deploy --template librechat",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "6266e574-3a43-453a-b4d7-05f7e8245fa3",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "136be286-5d3e-420f-a8c6-072bedd9b320": {
                  "icon": "https://devicons.railway.app/postgres",
                  "name": "pg_vector",
                  "deploy": {
                    "startCommand": "/bin/sh -c \"unset PGPORT; docker-entrypoint.sh postgres --port=5432\"",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "pgvector/pgvector:pg18"
                  },
                  "variables": {
                    "PGDATA": {
                      "isOptional": false,
                      "description": "Directory storing database data",
                      "defaultValue": "/var/lib/postgresql/data/pgdata"
                    },
                    "PGHOST": {
                      "isOptional": false,
                      "description": "Public Postgres hostname",
                      "defaultValue": "${{RAILWAY_TCP_PROXY_DOMAIN}}"
                    },
                    "PGPORT": {
                      "isOptional": false,
                      "description": "Public Postgres connection port",
                      "defaultValue": "${{RAILWAY_TCP_PROXY_PORT}}"
                    },
                    "PGUSER": {
                      "isOptional": false,
                      "description": "Postgres database username",
                      "defaultValue": "${{POSTGRES_USER}}"
                    },
                    "PGDATABASE": {
                      "isOptional": false,
                      "description": "Default Postgres database name",
                      "defaultValue": "${{POSTGRES_DB}}"
                    },
                    "PGPASSWORD": {
                      "isOptional": false,
                      "description": "Password for Postgres authentication",
                      "defaultValue": "${{POSTGRES_PASSWORD}}"
                    },
                    "POSTGRES_DB": {
                      "isOptional": false,
                      "description": "Database created on initialization",
                      "defaultValue": "railway"
                    },
                    "DATABASE_URL": {
                      "isOptional": false,
                      "description": "Public Postgres connection URI",
                      "defaultValue": "postgres://${{PGUSER}}:${{PGPASSWORD}}@${{PGHOST}}:${{PGPORT}}/${{PGDATABASE}}"
                    },
                    "POSTGRES_USER": {
                      "isOptional": false,
                      "description": "Default Postgres admin username",
                      "defaultValue": "postgres"
                    },
                    "SSL_CERT_DAYS": {
                      "isOptional": false,
                      "description": "SSL certificate validity duration",
                      "defaultValue": "820"
                    },
                    "PGHOST_PRIVATE": {
                      "isOptional": false,
                      "description": "Internal Postgres hostname",
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PGPORT_PRIVATE": {
                      "isOptional": false,
                      "description": "Internal Postgres server port",
                      "defaultValue": "5432"
                    },
                    "POSTGRES_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres user authentication password",
                      "defaultValue": "{{POSTGRES_PASSWORD}}"
                    },
                    "DATABASE_URL_PRIVATE": {
                      "isOptional": false,
                      "description": "Internal Postgres connection URI",
                      "defaultValue": "postgres://${{PGUSER}}:${{PGPASSWORD}}@${{PGHOST_PRIVATE}}:${{PGPORT_PRIVATE}}/${{PGDATABASE}}"
                    },
                    "RAILWAY_DEPLOYMENT_DRAINING_SECONDS": {
                      "isOptional": false,
                      "description": "Grace period before shutdown",
                      "defaultValue": "60"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  },
                  "volumeMounts": {
                    "136be286-5d3e-420f-a8c6-072bedd9b320": {
                      "mountPath": "/var/lib/postgresql"
                    }
                  }
                },
                "5c2e3908-ea31-4d67-9e26-1d07dedeef63": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mongodb.svg",
                  "name": "MongoDB",
                  "deploy": {
                    "startCommand": "docker-entrypoint.sh mongod --ipv6 --bind_ip ::,0.0.0.0",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "mongo"
                  },
                  "variables": {
                    "MONGOHOST": {
                      "isOptional": false,
                      "description": "Internal MongoDB hostname",
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "MONGOPORT": {
                      "isOptional": false,
                      "description": "Default MongoDB server port",
                      "defaultValue": "27017"
                    },
                    "MONGOUSER": {
                      "isOptional": false,
                      "description": "MongoDB authentication username",
                      "defaultValue": "${{MONGO_INITDB_ROOT_USERNAME}}"
                    },
                    "MONGO_URL": {
                      "isOptional": false,
                      "description": "External MongoDB connection URI",
                      "defaultValue": "mongodb://${{MONGO_INITDB_ROOT_USERNAME}}:${{MONGO_INITDB_ROOT_PASSWORD}}@${{RAILWAY_TCP_PROXY_DOMAIN}}:${{RAILWAY_TCP_PROXY_PORT}}"
                    },
                    "MONGOPASSWORD": {
                      "isOptional": false,
                      "description": "MongoDB authentication password",
                      "defaultValue": "${{MONGO_INITDB_ROOT_PASSWORD}}"
                    },
                    "MONGO_PRIVATE_URL": {
                      "isOptional": false,
                      "description": "Internal MongoDB connection URI",
                      "defaultValue": "mongodb://${{MONGO_INITDB_ROOT_USERNAME}}:${{MONGO_INITDB_ROOT_PASSWORD}}@${{RAILWAY_PRIVATE_DOMAIN}}:27017"
                    },
                    "MONGO_INITDB_ROOT_PASSWORD": {
                      "isOptional": false,
                      "description": "Root password for MongoDB",
                      "defaultValue": "{{MONGO_INITDB_ROOT_PASSWORD}}"
                    },
                    "MONGO_INITDB_ROOT_USERNAME": {
                      "isOptional": false,
                      "description": "Root admin username",
                      "defaultValue": "mongo"
                    }
                  },
                  "volumeMounts": {
                    "5c2e3908-ea31-4d67-9e26-1d07dedeef63": {
                      "mountPath": "/data/db"
                    }
                  }
                },
                "b7cea0df-db23-42d3-92db-3882c817f554": {
                  "icon": null,
                  "name": "RAG",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/danny-avila/librechat-rag-api-dev-lite"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "RAG API server listening port",
                      "defaultValue": "8000"
                    },
                    "DB_HOST": {
                      "isOptional": false,
                      "description": "Postgres host for vector database",
                      "defaultValue": "${{pg_vector.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "DB_PORT": {
                      "isOptional": false,
                      "description": "Postgres server listening port",
                      "defaultValue": "5432"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "description": "Shared authentication JWT secret",
                      "defaultValue": "${{LibreChat.JWT_SECRET}}"
                    },
                    "POSTGRES_DB": {
                      "isOptional": false,
                      "description": "Database storing vector embeddings",
                      "defaultValue": "${{pg_vector.POSTGRES_DB}}"
                    },
                    "DEBUG_RAG_API": {
                      "isOptional": false,
                      "description": "Disable RAG API debug logs",
                      "defaultValue": "false"
                    },
                    "POSTGRES_USER": {
                      "isOptional": false,
                      "description": "Postgres database username",
                      "defaultValue": "${{pg_vector.POSTGRES_USER}}"
                    },
                    "OPENAI_API_KEY": {
                      "isOptional": false,
                      "description": "API key for embeddings provider",
                      "defaultValue": "{{OPENAI_API_KEY}}"
                    },
                    "POSTGRES_PASSWORD": {
                      "isOptional": false,
                      "description": "Password for Postgres user",
                      "defaultValue": "${{pg_vector.POSTGRES_PASSWORD}}"
                    },
                    "EMBEDDINGS_PROVIDER": {
                      "isOptional": false,
                      "description": "Embedding model provider used",
                      "defaultValue": "openai"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  }
                },
                "cd396b38-5b3f-4cfd-88e8-10d5a5c25382": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/meilisearch.svg",
                  "name": "Meilisearch",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "getmeili/meilisearch:v1.11.3"
                  },
                  "variables": {
                    "MEILI_ENV": {
                      "isOptional": false,
                      "description": "Run Meilisearch in production mode",
                      "defaultValue": "production"
                    },
                    "MEILI_DB_PATH": {
                      "isOptional": false,
                      "description": "Path storing Meilisearch index data",
                      "defaultValue": "/meili_data/data.ms"
                    },
                    "MEILI_HTTP_ADDR": {
                      "isOptional": false,
                      "description": "Network address Meilisearch listens on",
                      "defaultValue": ":::7700"
                    },
                    "MEILI_MASTER_KEY": {
                      "isOptional": false,
                      "description": "Master API key for search",
                      "defaultValue": "${{LibreChat.MEILI_MASTER_KEY}}"
                    },
                    "MEILI_NO_ANALYTICS": {
                      "isOptional": false,
                      "description": "Disable Meilisearch usage analytics",
                      "defaultValue": "true"
                    }
                  },
                  "volumeMounts": {
                    "cd396b38-5b3f-4cfd-88e8-10d5a5c25382": {
                      "mountPath": "/meili_data"
                    }
                  }
                },
                "f8b8ea5a-50c3-48f3-8854-cb5fc7bcf4ae": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/librechat.svg",
                  "name": "LibreChat",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/danny-avila/librechat-dev:latest"
                  },
                  "variables": {
                    "HOST": {
                      "isOptional": false,
                      "description": "Bind server to all interfaces",
                      "defaultValue": "0.0.0.0"
                    },
                    "SEARCH": {
                      "isOptional": false,
                      "description": "Enable internal search feature",
                      "defaultValue": "true"
                    },
                    "CREDS_IV": {
                      "isOptional": false,
                      "description": "Initialization vector for encryption",
                      "defaultValue": "{{CREDS_IV}}"
                    },
                    "NO_INDEX": {
                      "isOptional": false,
                      "description": "Disable indexing by search engines",
                      "defaultValue": "true"
                    },
                    "APP_TITLE": {
                      "isOptional": false,
                      "description": "Application display title",
                      "defaultValue": "LibreChat"
                    },
                    "CREDS_KEY": {
                      "isOptional": false,
                      "description": "Encryption key for stored credentials",
                      "defaultValue": "{{CREDS_KEY}}"
                    },
                    "ENDPOINTS": {
                      "isOptional": false,
                      "description": "Enabled AI provider endpoints",
                      "defaultValue": "openAI,agents,assistants,azureOpenAI,google,anthropic,custom"
                    },
                    "LOGIN_MAX": {
                      "isOptional": false,
                      "description": "Maximum login attempts allowed",
                      "defaultValue": "7"
                    },
                    "MONGO_URI": {
                      "isOptional": false,
                      "description": "MongoDB connection string",
                      "defaultValue": "${{MongoDB.MONGO_PRIVATE_URL}}"
                    },
                    "GOOGLE_KEY": {
                      "isOptional": false,
                      "description": "API key for Google models",
                      "defaultValue": "user_provided"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "description": "Secret for JWT authentication",
                      "defaultValue": "{{JWT_SECRET}}"
                    },
                    "MEILI_HOST": {
                      "isOptional": false,
                      "description": "Meilisearch internal endpoint",
                      "defaultValue": "http://${{Meilisearch.RAILWAY_PRIVATE_DOMAIN}}:7700"
                    },
                    "CONFIG_PATH": {
                      "isOptional": false,
                      "description": "External LibreChat configuration file",
                      "defaultValue": "https://raw.githubusercontent.com/LibreChat-AI/librechat-config-yaml/main/librechat-up-l.yaml"
                    },
                    "RAG_API_URL": {
                      "isOptional": false,
                      "description": "Public endpoint of RAG pipeline",
                      "defaultValue": "https://${{RAG.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "TITLE_CONVO": {
                      "isOptional": false,
                      "description": "Automatically title conversations",
                      "defaultValue": "true"
                    },
                    "BAN_DURATION": {
                      "isOptional": false,
                      "description": "Duration of temporary bans",
                      "defaultValue": "1000 * 60 * 60 * 2"
                    },
                    "BAN_INTERVAL": {
                      "isOptional": false,
                      "description": "Interval tracking violation frequency",
                      "defaultValue": "20"
                    },
                    "DEBUG_OPENAI": {
                      "isOptional": false,
                      "description": "Disable OpenAI debug output",
                      "defaultValue": "false"
                    },
                    "GROQ_API_KEY": {
                      "isOptional": false,
                      "description": "API key for Groq models",
                      "defaultValue": "user_provided"
                    },
                    "LOGIN_WINDOW": {
                      "isOptional": false,
                      "description": "Time window tracking logins",
                      "defaultValue": "5"
                    },
                    "REGISTER_MAX": {
                      "isOptional": false,
                      "description": "Max registration attempts allowed",
                      "defaultValue": "5"
                    },
                    "CHECK_BALANCE": {
                      "isOptional": false,
                      "description": "Disable API balance checking",
                      "defaultValue": "false"
                    },
                    "DEBUG_CONSOLE": {
                      "isOptional": false,
                      "description": "Disable debug console output",
                      "defaultValue": "false"
                    },
                    "DEBUG_LOGGING": {
                      "isOptional": false,
                      "description": "Enable server debug logging",
                      "defaultValue": "true"
                    },
                    "DEBUG_PLUGINS": {
                      "isOptional": false,
                      "description": "Enable plugin debug logging",
                      "defaultValue": "true"
                    },
                    "GOOGLE_MODELS": {
                      "isOptional": false,
                      "description": "Allowed Google Gemini models",
                      "defaultValue": "gemini-2.5-pro,gemini-2.5-pro-preview-06-05,gemini-2.5-pro-preview-05-06,gemini-2.5-pro-preview-03-25,gemini-2.5-flash,gemini-2.5-flash-preview-05-20,gemini-2.5-flash-lite-preview-06-17,gemini-2.0-flash,gemini-2.0-flash-exp,gemini-2.0-flash-lite-preview-02-05,gemini-2.0-flash-thinking-exp,gemini-2.0-flash-thinking-exp-1219,gemini-2.0-pro-exp-02-05,gemini-exp-1206,gemini-1.5-flash-001,gemini-1.5-flash-002,gemini-1.5-flash-latest,gemini-1.5-pro-001,gemini-1.5-pro-002,gemini-1.5-pro-latest"
                    },
                    "OPENAI_MODELS": {
                      "isOptional": false,
                      "description": "Allowed OpenAI model list",
                      "defaultValue": "gpt-3.5-turbo,gpt-4,gpt-4o,gpt-4.1,gpt-5,chatgpt-4o-latest"
                    },
                    "BAN_VIOLATIONS": {
                      "isOptional": false,
                      "description": "Enable automatic banning system",
                      "defaultValue": "true"
                    },
                    "MESSAGE_IP_MAX": {
                      "isOptional": false,
                      "description": "Max messages per IP",
                      "defaultValue": "40"
                    },
                    "OPENAI_API_KEY": {
                      "isOptional": false,
                      "description": "API key for OpenAI models",
                      "defaultValue": "user_provided"
                    },
                    "OPENROUTER_KEY": {
                      "isOptional": false,
                      "description": "API key for OpenRouter gateway",
                      "defaultValue": "user_provided"
                    },
                    "SESSION_EXPIRY": {
                      "isOptional": false,
                      "description": "User session expiration time",
                      "defaultValue": "1000 * 60 * 15"
                    },
                    "MISTRAL_API_KEY": {
                      "isOptional": false,
                      "description": "API key for Mistral models",
                      "defaultValue": "user_provided"
                    },
                    "REGISTER_WINDOW": {
                      "isOptional": false,
                      "description": "Registration attempt tracking window",
                      "defaultValue": "60"
                    },
                    "ANYSCALE_API_KEY": {
                      "isOptional": false,
                      "description": "API key for Anyscale inference",
                      "defaultValue": "user_provided"
                    },
                    "LIMIT_MESSAGE_IP": {
                      "isOptional": false,
                      "description": "Limit messages per IP",
                      "defaultValue": "true"
                    },
                    "MEILI_MASTER_KEY": {
                      "isOptional": false,
                      "description": "Shared Meilisearch authentication key",
                      "defaultValue": "{{MEILI_MASTER_KEY}}"
                    },
                    "MESSAGE_USER_MAX": {
                      "isOptional": false,
                      "description": "Max messages per user",
                      "defaultValue": "40"
                    },
                    "ALLOW_EMAIL_LOGIN": {
                      "isOptional": false,
                      "description": "Allow users to login via email",
                      "defaultValue": "true"
                    },
                    "ANTHROPIC_API_KEY": {
                      "isOptional": false,
                      "description": "API key for Anthropic models",
                      "defaultValue": "user_provided"
                    },
                    "FIREWORKS_API_KEY": {
                      "isOptional": false,
                      "description": "API key for Fireworks models",
                      "defaultValue": "user_provided"
                    },
                    "MESSAGE_IP_WINDOW": {
                      "isOptional": false,
                      "description": "Time window for IP limit",
                      "defaultValue": "1"
                    },
                    "OPENAI_MODERATION": {
                      "isOptional": false,
                      "description": "Disable OpenAI moderation endpoint",
                      "defaultValue": "false"
                    },
                    "ALLOW_REGISTRATION": {
                      "isOptional": false,
                      "description": "Allow new user registrations",
                      "defaultValue": "true"
                    },
                    "ALLOW_SOCIAL_LOGIN": {
                      "isOptional": false,
                      "description": "Disable social provider login",
                      "defaultValue": "false"
                    },
                    "JWT_REFRESH_SECRET": {
                      "isOptional": false,
                      "description": "Secret for refresh tokens",
                      "defaultValue": "{{JWT_REFRESH_SECRET}}"
                    },
                    "LIMIT_MESSAGE_USER": {
                      "isOptional": false,
                      "description": "Disable user message limit",
                      "defaultValue": "false"
                    },
                    "MEILI_NO_ANALYTICS": {
                      "isOptional": false,
                      "description": "Disable Meilisearch analytics",
                      "defaultValue": "${{Meilisearch.MEILI_NO_ANALYTICS}}"
                    },
                    "PERPLEXITY_API_KEY": {
                      "isOptional": false,
                      "description": "API key for Perplexity AI",
                      "defaultValue": "user_provided"
                    },
                    "TOGETHERAI_API_KEY": {
                      "isOptional": false,
                      "description": "API key for TogetherAI models",
                      "defaultValue": "user_provided"
                    },
                    "GITHUB_CALLBACK_URL": {
                      "isOptional": false,
                      "description": "GitHub OAuth callback path",
                      "defaultValue": "/oauth/github/callback"
                    },
                    "GOOGLE_CALLBACK_URL": {
                      "isOptional": false,
                      "description": "Google OAuth callback path",
                      "defaultValue": "/oauth/google/callback"
                    },
                    "MESSAGE_USER_WINDOW": {
                      "isOptional": false,
                      "description": "Time window for user limit",
                      "defaultValue": "1"
                    },
                    "DISCORD_CALLBACK_URL": {
                      "isOptional": false,
                      "description": "Discord OAuth callback path",
                      "defaultValue": "/oauth/discord/callback"
                    },
                    "REFRESH_TOKEN_EXPIRY": {
                      "isOptional": false,
                      "description": "Refresh token expiry duration",
                      "defaultValue": "(1000 * 60 * 60 * 24) * 7"
                    },
                    "FACEBOOK_CALLBACK_URL": {
                      "isOptional": false,
                      "description": "Facebook OAuth callback path",
                      "defaultValue": "/oauth/facebook/callback"
                    },
                    "LOGIN_VIOLATION_SCORE": {
                      "isOptional": false,
                      "description": "Score added on login violation",
                      "defaultValue": "1"
                    },
                    "CONCURRENT_MESSAGE_MAX": {
                      "isOptional": false,
                      "description": "Max simultaneous messages per user",
                      "defaultValue": "2"
                    },
                    "MESSAGE_VIOLATION_SCORE": {
                      "isOptional": false,
                      "description": "Score added on message violations",
                      "defaultValue": "1"
                    },
                    "ALLOW_SOCIAL_REGISTRATION": {
                      "isOptional": false,
                      "description": "Disable social account registration",
                      "defaultValue": "false"
                    },
                    "LIMIT_CONCURRENT_MESSAGES": {
                      "isOptional": false,
                      "description": "Enable concurrency message limits",
                      "defaultValue": "true"
                    },
                    "CONCURRENT_VIOLATION_SCORE": {
                      "isOptional": false,
                      "description": "Score added on concurrency violation",
                      "defaultValue": "1"
                    },
                    "NON_BROWSER_VIOLATION_SCORE": {
                      "isOptional": false,
                      "description": "Score added for non-browser access",
                      "defaultValue": "20"
                    },
                    "REGISTRATION_VIOLATION_SCORE": {
                      "isOptional": false,
                      "description": "Score added on registration violations",
                      "defaultValue": "1"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8080": {
                        "port": 8080
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 5,
    "needs_volume": true
  },
  "generated_at": "2026-09-18T22:14:40.474Z",
  "generator_version": "0.1.0",
  "status": "validated",
  "validated_at": "2026-09-18T09:55:50.032Z",
  "success_rate_30d": 1,
  "validation": {
    "last_run_id": "run_44f1acdfd7a94bef9c59",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": true
      },
      {
        "name": "stays_up",
        "passed": true
      }
    ],
    "typical_ready_seconds": 95,
    "typical_build_seconds": 0,
    "typical_start_seconds": 40,
    "slowest_service": "LibreChat"
  }
}
