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_DRIVERDatabase driver (postgres or mysql, auto-detected from URL) auto-detect CS_DATABASE_URLDatabase 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 0CS_REDIS_TLS_ENABLEDEnable TLS connection falseCS_REDIS_TLS_SKIP_VERIFYSkip TLS cert verification (insecure) falseCS_REDIS_TLS_CERT_FILEClient certificate file (mTLS) - CS_REDIS_TLS_KEY_FILEClient key file (mTLS) - CS_REDIS_TLS_CA_CERT_FILECA certificate file - CS_REDIS_TLS_SERVER_NAMEOverride server name for TLS -
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-indexCS_INDEXER_CTAGS_BINPath to universal-ctags binary ctagsCS_INDEXER_REQUIRE_CTAGSFail indexing if ctags fails true
The following indexer options are available in config.yaml but do not have environment variable bindings:
indexer.index_timeout — Timeout for zoekt-git-index (default: 0 = no timeout)
indexer.max_repo_size_mb — Skip repos larger than this size in MB (default: 0 = no limit)
indexer.index_all_branches — Index all branches, not just default (default: false)
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_SECURITY_ENCRYPTION_KEYKey for encrypting tokens at rest - (disabled)
When an encryption key is set, connection tokens (GitHub, GitLab, etc.) are encrypted using AES-256-GCM before being stored in the database. See Security Configuration for details.
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_SCIP_ENABLEDEnable SCIP code intelligence indexing falseCS_SCIP_AUTO_INDEXAuto-index after Zoekt indexing trueCS_SCIP_TIMEOUTAggregate timeout for SCIP indexing per repo 10mCS_SCIP_WORK_DIRWorking directory for temporary checkouts system temp CS_SCIP_CACHE_DIRDirectory for SCIP SQLite databases <repos_path>/../scip
See Indexer Configuration for language tiers and per-language configuration.
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 falseCS_UI_HIDE_REPOS_PAGEHide the Repositories page from navigation falseCS_UI_HIDE_CONNECTIONS_PAGEHide the Connections page from navigation falseCS_UI_HIDE_JOBS_PAGEHide the Jobs page from navigation falseCS_UI_HIDE_REPLACE_PAGEHide the Replace page from navigation false
Variable Description Default CS_CONNECTIONS_READONLYLock connections to config false
Variable Description Default CS_CONFIG_FILEPath to config file Auto-discovered
Enterprise features use the CSE_ prefix. These require the enterprise API server binary and a valid license.
Variable Description Default CSE_LICENSE_KEYSigned license key string - CSE_LICENSE_KEY_FILEPath to license key file on disk - CSE_LICENSE_PUBLIC_KEYBase64-encoded Ed25519 public key for license verification -
Variable Description Default CSE_OIDC_ISSUEROIDC issuer URL (e.g., https://login.mycompany.com) - CSE_OIDC_CLIENT_IDOIDC client ID - CSE_OIDC_CLIENT_SECRETOIDC client secret - CSE_OIDC_REDIRECT_URLOAuth2 redirect URL (e.g., https://search.example.com/api/v1/auth/callback) - CSE_SESSION_SECRETHMAC secret for signing session JWTs (32+ chars recommended) - CSE_SESSION_DURATIONSession validity duration 24hCSE_COOKIE_SECURESet Secure flag on session cookie (disable for local HTTP dev) true
Variable Description Default CSE_AUDIT_ENABLEDEnable audit logging trueCSE_AUDIT_RETENTIONHow long to keep audit events 2160h (90 days)CSE_AUDIT_BUFFER_SIZEIn-memory event buffer size 1000
RBAC roles and group mappings are configured via config.yaml or the admin API.
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