Skip to content

Environment Variables

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.addrCS_SERVER_ADDR

VariableDescriptionDefault
CS_SERVER_ADDRListen address (host:port):8080
CS_SERVER_READ_TIMEOUTHTTP read timeout15s
CS_SERVER_WRITE_TIMEOUTHTTP write timeout60s
VariableDescriptionDefault
CS_DATABASE_URLPostgreSQL connection string-
CS_DATABASE_MAX_OPEN_CONNSMaximum open connections25
CS_DATABASE_MAX_IDLE_CONNSMaximum idle connections5
CS_DATABASE_CONN_MAX_LIFETIMEConnection max lifetime5m
VariableDescriptionDefault
CS_REDIS_ADDRRedis address (host:port)localhost:6379
CS_REDIS_PASSWORDRedis password-
CS_REDIS_DBRedis database number0
VariableDescriptionDefault
CS_ZOEKT_URLZoekt server URLhttp://localhost:6070
CS_ZOEKT_INDEX_PATHIndex directory path-
CS_ZOEKT_SHARDSNumber of shards (0=auto)0
VariableDescriptionDefault
CS_INDEXER_CONCURRENCYConcurrent indexing jobs2
CS_INDEXER_INDEX_PATHIndex directory path-
CS_INDEXER_REPOS_PATHRepositories directory path-
CS_INDEXER_REINDEX_INTERVALReindex interval1h
CS_INDEXER_ZOEKT_BINZoekt indexer binaryzoekt-git-index
VariableDescriptionDefault
CS_REPOS_BASE_PATHBase path for repo clones-
CS_REPOS_READONLYDisable repo delete via UIfalse
VariableDescriptionDefault
CS_SCHEDULER_ENABLEDEnable auto-schedulingtrue
CS_SCHEDULER_POLL_INTERVALDefault sync interval6h
CS_SCHEDULER_CHECK_INTERVALCheck interval5m
CS_SCHEDULER_STALE_THRESHOLDStale repo threshold24h
CS_SCHEDULER_MAX_CONCURRENT_CHECKSParallel checks5
CS_SCHEDULER_JOB_RETENTIONJob retention period1h
VariableDescriptionDefault
CS_REPLACE_CONCURRENCYParallel repo processing3
CS_REPLACE_CLONE_TIMEOUTGit clone timeout10m
CS_REPLACE_PUSH_TIMEOUTGit push timeout5m
CS_REPLACE_MAX_FILE_SIZEMax file size (bytes)10485760
VariableDescriptionDefault
CS_RATE_LIMIT_ENABLEDEnable rate limitingfalse
CS_RATE_LIMIT_REQUESTS_PER_SECONDRequests per second per IP10
CS_RATE_LIMIT_BURST_SIZEMaximum burst size20
VariableDescriptionDefault
CS_METRICS_ENABLEDEnable Prometheus metricstrue
CS_METRICS_PATHMetrics endpoint path/metrics
VariableDescriptionDefault
CS_TRACING_ENABLEDEnable OpenTelemetry tracingfalse
CS_TRACING_SERVICE_NAMEService name for tracescode-search
CS_TRACING_SERVICE_VERSIONService version1.0.0
CS_TRACING_ENVIRONMENTDeployment environmentdevelopment
CS_TRACING_ENDPOINTOTLP endpointlocalhost:4317
CS_TRACING_PROTOCOLProtocol (grpc/http)grpc
CS_TRACING_SAMPLE_RATESampling rate (0.0-1.0)1.0
CS_TRACING_INSECUREDisable TLStrue

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

Sharding Configuration (Horizontal Scaling)

Section titled “Sharding Configuration (Horizontal Scaling)”
VariableDescriptionDefault
CS_SHARDING_ENABLEDEnable hash-based shardingfalse
CS_SHARDING_TOTAL_SHARDSNumber of indexer shards1
CS_SHARDING_INDEXER_API_PORTHTTP API port for federated access8081
CS_SHARDING_INDEXER_SERVICEHeadless service for pod discoverycode-search-indexer-headless
CS_SHARDING_FEDERATED_ACCESSEnable federated file browsing/replacefalse
VariableDescriptionDefault
CS_SEARCH_ENABLE_STREAMINGEnable true streaming from Zoektfalse

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.

VariableDescriptionDefault
CS_UI_HIDE_READONLY_BANNERHide read-only mode bannerfalse
CS_UI_HIDE_FILE_NAVIGATORHide browse links in search resultsfalse
CS_UI_DISABLE_BROWSE_APIDisable browse API endpointsfalse
VariableDescriptionDefault
CS_CONNECTIONS_READONLYLock connections to configfalse
VariableDescriptionDefault
CS_CONFIG_FILEPath to config fileAuto-discovered
services:
api:
image: ghcr.io/techquestsdev/code-search-api:latest
environment:
CS_DATABASE_URL: postgres://user:pass@postgres:5432/codesearch?sslmode=disable
CS_REDIS_ADDR: redis:6379
CS_ZOEKT_URL: http://zoekt:6070
CS_SERVER_ADDR: ":8080"
CS_SCHEDULER_ENABLED: "true"
CS_SCHEDULER_POLL_INTERVAL: "6h"
indexer:
image: ghcr.io/techquestsdev/code-search-indexer:latest
environment:
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"
apiVersion: v1
kind: Secret
metadata:
name: code-search-secrets
type: Opaque
stringData:
CS_DATABASE_URL: "postgres://user:pass@postgres:5432/codesearch"
CS_REDIS_PASSWORD: ""
---
apiVersion: v1
kind: ConfigMap
metadata:
name: code-search-config
data:
CS_SERVER_ADDR: ":8080"
CS_REDIS_ADDR: "redis:6379"
CS_ZOEKT_URL: "http://zoekt:6070"
CS_INDEXER_CONCURRENCY: "2"
CS_SCHEDULER_ENABLED: "true"
CS_SCHEDULER_POLL_INTERVAL: "6h"
#!/bin/bash
# Database and Redis
export CS_DATABASE_URL="postgres://user:pass@localhost:5432/codesearch?sslmode=disable"
export CS_REDIS_ADDR="localhost:6379"
# Server
export CS_SERVER_ADDR=":8080"
export CS_SERVER_READ_TIMEOUT="15s"
export CS_SERVER_WRITE_TIMEOUT="60s"
# Zoekt
export CS_ZOEKT_URL="http://localhost:6070"
export CS_INDEXER_INDEX_PATH="./data/index"
export CS_INDEXER_REPOS_PATH="./data/repos"
# Indexer
export CS_INDEXER_CONCURRENCY="2"
export CS_INDEXER_REINDEX_INTERVAL="1h"
# Scheduler
export CS_SCHEDULER_ENABLED="true"
export CS_SCHEDULER_POLL_INTERVAL="6h"
export CS_SCHEDULER_CHECK_INTERVAL="5m"
export CS_SCHEDULER_STALE_THRESHOLD="24h"
# Readonly modes
export CS_REPOS_READONLY="false"
export CS_CONNECTIONS_READONLY="false"
# Start the API server
./bin/api-server

Duration values use Go’s duration format:

SuffixMeaningExample
sSeconds30s
mMinutes10m
hHours6h

Combine for complex durations: 1h30m, 2h45m30s

Boolean environment variables accept:

  • True: true, 1, yes, on
  • False: false, 0, no, off