{
  "manifest_version": "1.0.0",
  "template": {
    "id": "74c56afb-f555-407d-a212-274f5537c7f0",
    "slug": "zincsearch",
    "name": "ZincSearch",
    "description": "ZincSearch a lightweight alternative to elasticsearch written in Go.",
    "url": "https://railway.com/deploy/zincsearch",
    "upstream": {
      "image": "public.ecr.aws/zinclabs/zincsearch:latest"
    }
  },
  "services": [
    {
      "name": "zincsearch",
      "source": {
        "image": "public.ecr.aws/zinclabs/zincsearch:latest"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "ZINC_SENTRY",
      "service": "zincsearch",
      "description": "Send anonymous error reports for debugging",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "ZINC_PROFILER",
      "service": "zincsearch",
      "description": "Default is false, ZinCsearch uses pyroscope server to profiling",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "ZINC_DATA_PATH",
      "service": "zincsearch",
      "description": "Defaults to \"data\" folder in current working directory if not provided.",
      "secret": false,
      "strategy": "default",
      "default": "/data"
    },
    {
      "key": "ZINC_SHARD_NUM",
      "service": "zincsearch",
      "description": "We use shards to improve performance",
      "secret": false,
      "strategy": "default",
      "default": "3"
    },
    {
      "key": "ZINC_TELEMETRY",
      "service": "zincsearch",
      "description": "Send anonymous telemetry info for improving ZincSearch. enabled or disabled.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "zincsearch",
      "description": "Required for creating volume. Learn more about this configuration: https://docs.railway.com/reference/variables#user-provided-configuration-variables",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "ZINC_BATCH_SIZE",
      "service": "zincsearch",
      "description": "Internal batch size for batching records when bulk indexing is done.",
      "secret": false,
      "strategy": "default",
      "default": "1024"
    },
    {
      "key": "ZINC_MAX_RESULTS",
      "service": "zincsearch",
      "description": "Maximum results to be returned from server. Defaults to 100",
      "secret": false,
      "strategy": "default",
      "default": "100"
    },
    {
      "key": "ZINC_SERVER_PORT",
      "service": "zincsearch",
      "description": "ZincSearch server listen http port",
      "secret": false,
      "strategy": "default",
      "default": "4080"
    },
    {
      "key": "ZINC_ICE_COMPRESSOR",
      "service": "zincsearch",
      "description": "Algorithm of compress segment file, default is: zstd, supports: snappy, s2, zstd",
      "secret": false,
      "strategy": "default",
      "default": "zstd"
    },
    {
      "key": "ZINC_SERVER_ADDRESS",
      "service": "zincsearch",
      "description": "ZincSearch server IP address to bind to",
      "secret": false,
      "strategy": "default",
      "default": "0.0.0.0"
    },
    {
      "key": "ZINC_SHARD_MAX_SIZE",
      "service": "zincsearch",
      "description": "We use multiple backend indexes for one big index, limit one shard size default is 1GB",
      "secret": false,
      "strategy": "default",
      "default": "1073741824"
    },
    {
      "key": "ZINC_SWAGGER_ENABLE",
      "service": "zincsearch",
      "description": "Default is true, Enable swagger api document",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "ZINC_FIRST_ADMIN_USER",
      "service": "zincsearch",
      "description": "Provide a value for ZINC_FIRST_ADMIN_USER.",
      "secret": false,
      "strategy": "default",
      "default": "admin"
    },
    {
      "key": "ZINC_PLUGIN_GSE_ENABLE",
      "service": "zincsearch",
      "description": "plugin, GSE support Chinese analysis",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "ZINC_PROMETHEUS_ENABLE",
      "service": "zincsearch",
      "description": "Enables prometheus metrics on /metrics endpoint",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "ZINC_READ_GORUTINE_NUM",
      "service": "zincsearch",
      "description": "control parallelsim thread num for shard reads",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "ZINC_WAL_SYNC_INTERVAL",
      "service": "zincsearch",
      "description": "ZinCsearch uses WAL to ensure no loss data, and asynchorous write to backend index. defaults every 1s sync to storage",
      "secret": false,
      "strategy": "default",
      "default": "1s"
    },
    {
      "key": "ZINC_WAL_REDOLOG_NO_SYNC",
      "service": "zincsearch",
      "description": "ZinCsearch uses REDO log to ensure asynchorous is correct, but redo log do a sync to disk every time, we can disable SYNC to have better performance, but it has a risk duplicated documents with a ZINC_BATCH_SIZE",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "ZINC_FIRST_ADMIN_PASSWORD",
      "service": "zincsearch",
      "description": "Provide a value for ZINC_FIRST_ADMIN_PASSWORD.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "ZINC_PLUGIN_GSE_DICT_EMBED",
      "service": "zincsearch",
      "description": "plugin, GSE which size dict need to load, small or big",
      "secret": false,
      "strategy": "default",
      "default": "small"
    },
    {
      "key": "ZINC_PLUGIN_GSE_DICT_PATH\t",
      "service": "zincsearch",
      "description": "plugin, GSE where to load user custom dictionary",
      "secret": false,
      "strategy": "default",
      "default": "./plugins/gse/dict"
    },
    {
      "key": "ZINC_PLUGIN_GSE_ENABLE_HMM",
      "service": "zincsearch",
      "description": "plugin, GSE analyzer default enable HMM for search, you can disable it.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "ZINC_AGGREGATION_TERMS_SIZE",
      "service": "zincsearch",
      "description": "terms aggregation returns max bucket size",
      "secret": false,
      "strategy": "default",
      "default": "1000"
    },
    {
      "key": "ZINC_PLUGIN_GSE_ENABLE_STOP",
      "service": "zincsearch",
      "description": "plugin, GSE analyzer default load stop dictionary, you can disable it.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "ZINC_ENABLE_TEXT_KEYWORD_MAPPING",
      "service": "zincsearch",
      "description": "create a keyword field for text field. named field.keyword",
      "secret": true,
      "strategy": "default",
      "default": "false"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "zincsearch"
      }
    },
    "cli": "railway deploy --template zincsearch",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "74c56afb-f555-407d-a212-274f5537c7f0",
            "serializedConfig": {
              "services": {
                "400d50d4-2e3b-477d-9a54-11948fcd0744": {
                  "name": "zincsearch",
                  "source": {
                    "image": "public.ecr.aws/zinclabs/zincsearch:latest"
                  },
                  "variables": {
                    "GIN_MODE": {
                      "isOptional": true,
                      "description": "if the value is release then gin will run in production mode.",
                      "defaultValue": ""
                    },
                    "ZINC_SENTRY": {
                      "isOptional": true,
                      "description": "Send anonymous error reports for debugging",
                      "defaultValue": "true"
                    },
                    "ZINC_PROFILER": {
                      "isOptional": true,
                      "description": "Default is false, ZinCsearch uses pyroscope server to profiling",
                      "defaultValue": "false"
                    },
                    "ZINC_DATA_PATH": {
                      "isOptional": false,
                      "description": "Defaults to \"data\" folder in current working directory if not provided.",
                      "defaultValue": "/data"
                    },
                    "ZINC_SHARD_NUM": {
                      "isOptional": true,
                      "description": "We use shards to improve performance",
                      "defaultValue": "3"
                    },
                    "ZINC_TELEMETRY": {
                      "isOptional": true,
                      "description": "Send anonymous telemetry info for improving ZincSearch. enabled or disabled.",
                      "defaultValue": "true"
                    },
                    "RAILWAY_RUN_UID": {
                      "isOptional": false,
                      "description": "Required for creating volume. Learn more about this configuration: https://docs.railway.com/reference/variables#user-provided-configuration-variables",
                      "defaultValue": "0"
                    },
                    "ZINC_BATCH_SIZE": {
                      "isOptional": true,
                      "description": "Internal batch size for batching records when bulk indexing is done.",
                      "defaultValue": "1024"
                    },
                    "ZINC_SENTRY_DSN": {
                      "isOptional": true,
                      "description": "Entry DNS, default is: https://15b6d9b8be824b44896f32b0234c32b7@o1218932.ingest.sentry.io/6360942",
                      "defaultValue": ""
                    },
                    "ZINC_MAX_RESULTS": {
                      "isOptional": true,
                      "description": "Maximum results to be returned from server. Defaults to 100",
                      "defaultValue": "100"
                    },
                    "ZINC_SERVER_PORT": {
                      "isOptional": true,
                      "description": "ZincSearch server listen http port",
                      "defaultValue": "4080"
                    },
                    "ZINC_ICE_COMPRESSOR": {
                      "isOptional": true,
                      "description": "Algorithm of compress segment file, default is: zstd, supports: snappy, s2, zstd",
                      "defaultValue": "zstd"
                    },
                    "ZINC_SERVER_ADDRESS": {
                      "isOptional": true,
                      "description": "ZincSearch server IP address to bind to",
                      "defaultValue": "0.0.0.0"
                    },
                    "ZINC_SHARD_MAX_SIZE": {
                      "isOptional": true,
                      "description": "We use multiple backend indexes for one big index, limit one shard size default is 1GB",
                      "defaultValue": "1073741824"
                    },
                    "ZINC_SWAGGER_ENABLE": {
                      "isOptional": true,
                      "description": "Default is true, Enable swagger api document",
                      "defaultValue": "true"
                    },
                    "ZINC_PROFILER_SERVER": {
                      "isOptional": true,
                      "description": "default pyroscope server is: https://pyroscope.dev.zincsearch.com",
                      "defaultValue": ""
                    },
                    "ZINC_FIRST_ADMIN_USER": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "admin"
                    },
                    "ZINC_PROFILER_API_KEY": {
                      "isOptional": true,
                      "description": "pyroscope server api key",
                      "defaultValue": ""
                    },
                    "ZINC_PLUGIN_ES_VERSION": {
                      "isOptional": true,
                      "description": "es version, for compatible elasticsearch",
                      "defaultValue": ""
                    },
                    "ZINC_PLUGIN_GSE_ENABLE": {
                      "isOptional": true,
                      "description": "plugin, GSE support Chinese analysis",
                      "defaultValue": "false"
                    },
                    "ZINC_PROMETHEUS_ENABLE": {
                      "isOptional": true,
                      "description": "Enables prometheus metrics on /metrics endpoint",
                      "defaultValue": "false"
                    },
                    "ZINC_READ_GORUTINE_NUM": {
                      "isOptional": true,
                      "description": "control parallelsim thread num for shard reads",
                      "defaultValue": "10"
                    },
                    "ZINC_WAL_SYNC_INTERVAL": {
                      "isOptional": true,
                      "description": "ZinCsearch uses WAL to ensure no loss data, and asynchorous write to backend index. defaults every 1s sync to storage",
                      "defaultValue": "1s"
                    },
                    "ZINC_WAL_REDOLOG_NO_SYNC": {
                      "isOptional": true,
                      "description": "ZinCsearch uses REDO log to ensure asynchorous is correct, but redo log do a sync to disk every time, we can disable SYNC to have better performance, but it has a risk duplicated documents with a ZINC_BATCH_SIZE",
                      "defaultValue": "false"
                    },
                    "ZINC_FIRST_ADMIN_PASSWORD": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "{{ZINC_FIRST_ADMIN_PASSWORD}}"
                    },
                    "ZINC_PLUGIN_GSE_DICT_EMBED": {
                      "isOptional": true,
                      "description": "plugin, GSE which size dict need to load, small or big",
                      "defaultValue": "small"
                    },
                    "ZINC_PLUGIN_GSE_DICT_PATH\t": {
                      "isOptional": true,
                      "description": "plugin, GSE where to load user custom dictionary",
                      "defaultValue": "./plugins/gse/dict"
                    },
                    "ZINC_PLUGIN_GSE_ENABLE_HMM": {
                      "isOptional": true,
                      "description": "plugin, GSE analyzer default enable HMM for search, you can disable it.",
                      "defaultValue": "true"
                    },
                    "ZINC_AGGREGATION_TERMS_SIZE": {
                      "isOptional": true,
                      "description": "terms aggregation returns max bucket size",
                      "defaultValue": "1000"
                    },
                    "ZINC_PLUGIN_GSE_ENABLE_STOP": {
                      "isOptional": true,
                      "description": "plugin, GSE analyzer default load stop dictionary, you can disable it.",
                      "defaultValue": "true"
                    },
                    "ZINC_ENABLE_TEXT_KEYWORD_MAPPING": {
                      "isOptional": true,
                      "description": "create a keyword field for text field. named field.keyword",
                      "defaultValue": "false"
                    },
                    "ZINC_PROFILER_FRIENDLY_PROFILE_ID": {
                      "isOptional": true,
                      "description": "pyroscope identifier id, example: zinc-alex",
                      "defaultValue": ""
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:4080": {
                        "port": 4080
                      }
                    }
                  },
                  "volumeMounts": {
                    "400d50d4-2e3b-477d-9a54-11948fcd0744": {
                      "mountPath": "/data"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 1,
    "needs_volume": true
  },
  "generated_at": "2026-09-13T10:14:32.962Z",
  "generator_version": "0.1.0",
  "status": "validated",
  "validated_at": "2026-09-11T23:50:06.531Z",
  "success_rate_30d": 1,
  "validation": {
    "last_run_id": "run_74456b9123734c338c6f",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": true
      },
      {
        "name": "stays_up",
        "passed": true
      }
    ],
    "typical_ready_seconds": 49,
    "typical_build_seconds": 0,
    "typical_start_seconds": 0,
    "slowest_service": "zincsearch"
  }
}
