All Code Search configuration can be set via environment variables. This page provides a complete reference.
Environment variables follow this pattern:
Prefix: CS_
Nested keys: separated by _
All uppercase
Example: server.addr → CS_SERVER_ADDR
Variable Description Default CS_SERVER_ADDRListen address (host:port) :8080CS_SERVER_READ_TIMEOUTHTTP read timeout 15sCS_SERVER_WRITE_TIMEOUTHTTP write timeout 60s
Variable Description Default CS_DATABASE_URLPostgreSQL connection string - CS_DATABASE_MAX_OPEN_CONNSMaximum open connections 25CS_DATABASE_MAX_IDLE_CONNSMaximum idle connections 5CS_DATABASE_CONN_MAX_LIFETIMEConnection max lifetime 5m
Variable Description Default CS_REDIS_ADDRRedis address (host:port) localhost:6379CS_REDIS_PASSWORDRedis password - CS_REDIS_DBRedis database number 0
Variable Description Default CS_ZOEKT_URLZoekt server URL http://localhost:6070CS_ZOEKT_INDEX_PATHIndex directory path - CS_ZOEKT_SHARDSNumber of shards (0=auto) 0
Variable Description Default CS_INDEXER_CONCURRENCYConcurrent indexing jobs 2CS_INDEXER_INDEX_PATHIndex directory path - CS_INDEXER_REPOS_PATHRepositories directory path - CS_INDEXER_REINDEX_INTERVALReindex interval 1hCS_INDEXER_ZOEKT_BINZoekt indexer binary zoekt-git-index
Variable Description Default CS_REPOS_BASE_PATHBase path for repo clones - CS_REPOS_READONLYDisable repo delete via UI false
Variable Description Default CS_SCHEDULER_ENABLEDEnable auto-scheduling trueCS_SCHEDULER_POLL_INTERVALDefault sync interval 6hCS_SCHEDULER_CHECK_INTERVALCheck interval 5mCS_SCHEDULER_STALE_THRESHOLDStale repo threshold 24hCS_SCHEDULER_MAX_CONCURRENT_CHECKSParallel checks 5CS_SCHEDULER_JOB_RETENTIONJob retention period 1h
Variable Description Default CS_REPLACE_CONCURRENCYParallel repo processing 3CS_REPLACE_CLONE_TIMEOUTGit clone timeout 10mCS_REPLACE_PUSH_TIMEOUTGit push timeout 5mCS_REPLACE_MAX_FILE_SIZEMax file size (bytes) 10485760
Variable Description Default CS_RATE_LIMIT_ENABLEDEnable rate limiting falseCS_RATE_LIMIT_REQUESTS_PER_SECONDRequests per second per IP 10CS_RATE_LIMIT_BURST_SIZEMaximum burst size 20
Variable Description Default CS_METRICS_ENABLEDEnable Prometheus metrics trueCS_METRICS_PATHMetrics endpoint path /metrics
Variable Description Default CS_TRACING_ENABLEDEnable OpenTelemetry tracing falseCS_TRACING_SERVICE_NAMEService name for traces code-searchCS_TRACING_SERVICE_VERSIONService version 1.0.0CS_TRACING_ENVIRONMENTDeployment environment developmentCS_TRACING_ENDPOINTOTLP endpoint localhost:4317CS_TRACING_PROTOCOLProtocol (grpc/http) grpcCS_TRACING_SAMPLE_RATESampling rate (0.0-1.0) 1.0CS_TRACING_INSECUREDisable TLS true
Also supports standard OpenTelemetry and Datadog environment variables:
OTEL_SERVICE_NAME, OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_PROTOCOL
DD_SERVICE, DD_VERSION, DD_ENV, DD_TRACE_ENABLED
Variable Description Default CS_SHARDING_ENABLEDEnable hash-based sharding falseCS_SHARDING_TOTAL_SHARDSNumber of indexer shards 1CS_SHARDING_INDEXER_API_PORTHTTP API port for federated access 8081CS_SHARDING_INDEXER_SERVICEHeadless service for pod discovery code-search-indexer-headlessCS_SHARDING_FEDERATED_ACCESSEnable federated file browsing/replace false
Variable Description Default CS_SEARCH_ENABLE_STREAMINGEnable true streaming from Zoekt false
When streaming is enabled, search results are sent to the client as they arrive from Zoekt, rather than waiting for all results. This provides faster time-to-first-result, especially for large result sets.
Variable Description Default CS_UI_HIDE_READONLY_BANNERHide read-only mode banner falseCS_UI_HIDE_FILE_NAVIGATORHide browse links in search results falseCS_UI_DISABLE_BROWSE_APIDisable browse API endpoints false
Variable Description Default CS_CONNECTIONS_READONLYLock connections to config false
Variable Description Default CS_CONFIG_FILEPath to config file Auto-discovered
image : ghcr.io/techquestsdev/code-search-api:latest
CS_DATABASE_URL : postgres://user:pass@postgres:5432/codesearch?sslmode=disable
CS_REDIS_ADDR : redis:6379
CS_ZOEKT_URL : http://zoekt:6070
CS_SCHEDULER_ENABLED : "true"
CS_SCHEDULER_POLL_INTERVAL : "6h"
image : ghcr.io/techquestsdev/code-search-indexer:latest
CS_DATABASE_URL : postgres://user:pass@postgres:5432/codesearch?sslmode=disable
CS_REDIS_ADDR : redis:6379
CS_INDEXER_INDEX_PATH : /data/index
CS_INDEXER_REPOS_PATH : /data/repos
CS_INDEXER_CONCURRENCY : "2"
name : code-search-secrets
CS_DATABASE_URL : "postgres://user:pass@postgres:5432/codesearch"
CS_REDIS_ADDR : "redis:6379"
CS_ZOEKT_URL : "http://zoekt:6070"
CS_INDEXER_CONCURRENCY : "2"
CS_SCHEDULER_ENABLED : "true"
CS_SCHEDULER_POLL_INTERVAL : "6h"
export CS_DATABASE_URL = "postgres://user:pass@localhost:5432/codesearch?sslmode=disable"
export CS_REDIS_ADDR = "localhost:6379"
export CS_SERVER_ADDR = ":8080"
export CS_SERVER_READ_TIMEOUT = "15s"
export CS_SERVER_WRITE_TIMEOUT = "60s"
export CS_ZOEKT_URL = "http://localhost:6070"
export CS_INDEXER_INDEX_PATH = "./data/index"
export CS_INDEXER_REPOS_PATH = "./data/repos"
export CS_INDEXER_CONCURRENCY = "2"
export CS_INDEXER_REINDEX_INTERVAL = "1h"
export CS_SCHEDULER_ENABLED = "true"
export CS_SCHEDULER_POLL_INTERVAL = "6h"
export CS_SCHEDULER_CHECK_INTERVAL = "5m"
export CS_SCHEDULER_STALE_THRESHOLD = "24h"
export CS_REPOS_READONLY = "false"
export CS_CONNECTIONS_READONLY = "false"
Duration values use Go’s duration format:
Suffix Meaning Example sSeconds 30smMinutes 10mhHours 6h
Combine for complex durations: 1h30m, 2h45m30s
Boolean environment variables accept:
True: true, 1, yes, on
False: false, 0, no, off