{ "schema_version": 1, "generated_by": "crank-config", "fields": [ { "semantic_path": "database.url", "env_name": "CRANK_DATABASE_URL", "process": "shared", "value_type": "url", "unit": null, "default": null, "required": false, "minimum": null, "maximum": null, "sensitivity": "secret", "mode": "effective", "compatibility": "legacy URL form", "rules": [ "takes precedence over generated default-valued POSTGRES_HOST/PORT/DB/USER/PASSWORD", "conflicts with any non-default decomposed database value" ] }, { "semantic_path": "database.host", "env_name": "POSTGRES_HOST", "process": "shared", "value_type": "string", "unit": null, "default": "postgres", "required": false, "minimum": null, "maximum": null, "sensitivity": "internal", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "database.port", "env_name": "POSTGRES_PORT", "process": "shared", "value_type": "u16", "unit": "port", "default": "5432", "required": false, "minimum": 1, "maximum": 65535, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "database.name", "env_name": "POSTGRES_DB", "process": "shared", "value_type": "string", "unit": null, "default": "crank", "required": false, "minimum": null, "maximum": null, "sensitivity": "internal", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "database.user", "env_name": "POSTGRES_USER", "process": "shared", "value_type": "string", "unit": null, "default": "crank", "required": false, "minimum": null, "maximum": null, "sensitivity": "internal", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "database.password", "env_name": "POSTGRES_PASSWORD", "process": "shared", "value_type": "secret", "unit": null, "default": "configured", "required": false, "minimum": null, "maximum": null, "sensitivity": "secret", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "database.pool.max_connections", "env_name": "POSTGRES_MAX_CONNECTIONS", "process": "shared", "value_type": "u32", "unit": "connections", "default": "20", "required": false, "minimum": 1, "maximum": 1024, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [ "must be >= min_connections" ] }, { "semantic_path": "database.pool.min_connections", "env_name": "POSTGRES_MIN_CONNECTIONS", "process": "shared", "value_type": "u32", "unit": "connections", "default": "2", "required": false, "minimum": 0, "maximum": 1024, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [ "must be <= max_connections" ] }, { "semantic_path": "database.pool.acquire_timeout_ms", "env_name": "POSTGRES_ACQUIRE_TIMEOUT_MS", "process": "shared", "value_type": "u64", "unit": "milliseconds", "default": "5000", "required": false, "minimum": 1, "maximum": 300000, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "database.pool.idle_timeout_ms", "env_name": "POSTGRES_IDLE_TIMEOUT_MS", "process": "shared", "value_type": "u64", "unit": "milliseconds", "default": "600000", "required": false, "minimum": 1000, "maximum": 86400000, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "database.pool.max_lifetime_ms", "env_name": "POSTGRES_MAX_LIFETIME_MS", "process": "shared", "value_type": "u64", "unit": "milliseconds", "default": "1800000", "required": false, "minimum": 1000, "maximum": 86400000, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "runtime.master_key", "env_name": "CRANK_MASTER_KEY", "process": "shared", "value_type": "secret", "unit": null, "default": null, "required": true, "minimum": null, "maximum": null, "sensitivity": "secret", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "runtime.base_url", "env_name": "CRANK_BASE_URL", "process": "shared", "value_type": "url", "unit": null, "default": null, "required": false, "minimum": null, "maximum": null, "sensitivity": "internal", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "runtime.max_concurrent_unary", "env_name": "CRANK_RUNTIME_MAX_CONCURRENT_UNARY", "process": "shared", "value_type": "u32", "unit": "requests", "default": "64", "required": false, "minimum": 1, "maximum": 65535, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "cache.backend", "env_name": "CRANK_CACHE_BACKEND", "process": "shared", "value_type": "enum", "unit": null, "default": "memory", "required": false, "minimum": null, "maximum": null, "sensitivity": "public", "mode": "effective", "compatibility": "redis value is deprecated in favor of valkey", "rules": [ "external backend requires cache.url" ] }, { "semantic_path": "cache.url", "env_name": "CRANK_CACHE_URL", "process": "shared", "value_type": "url", "unit": null, "default": null, "required": false, "minimum": null, "maximum": null, "sensitivity": "secret", "mode": "effective", "compatibility": null, "rules": [ "forbidden with memory backend" ] }, { "semantic_path": "cache.default_ttl_ms", "env_name": "CRANK_CACHE_DEFAULT_TTL_MS", "process": "shared", "value_type": "u64", "unit": "milliseconds", "default": null, "required": false, "minimum": 1, "maximum": 86400000, "sensitivity": "public", "mode": "deprecated_no_effect", "compatibility": null, "rules": [] }, { "semantic_path": "outbound.allowed_hosts", "env_name": "CRANK_OUTBOUND_ALLOWED_HOSTS", "process": "shared", "value_type": "host_list", "unit": null, "default": "", "required": false, "minimum": null, "maximum": null, "sensitivity": "internal", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "outbound.denied_hosts", "env_name": "CRANK_OUTBOUND_DENIED_HOSTS", "process": "shared", "value_type": "host_list", "unit": null, "default": "", "required": false, "minimum": null, "maximum": null, "sensitivity": "internal", "mode": "effective", "compatibility": null, "rules": [ "deny entries override allow entries" ] }, { "semantic_path": "outbound.max_response_bytes", "env_name": "CRANK_OUTBOUND_MAX_RESPONSE_BYTES", "process": "shared", "value_type": "u64", "unit": "bytes", "default": "4194304", "required": false, "minimum": 1, "maximum": 67108864, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "observability.environment", "env_name": "CRANK_ENVIRONMENT", "process": "shared", "value_type": "label", "unit": null, "default": "development", "required": false, "minimum": null, "maximum": null, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "observability.log_filter", "env_name": "CRANK_LOG_LEVEL", "process": "shared", "value_type": "string", "unit": null, "default": null, "required": false, "minimum": null, "maximum": null, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "observability.sentry_dsn", "env_name": "CRANK_SENTRY_DSN", "process": "shared", "value_type": "url", "unit": null, "default": null, "required": false, "minimum": null, "maximum": null, "sensitivity": "secret", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "observability.metrics.enabled", "env_name": "CRANK_METRICS_ENABLED", "process": "shared", "value_type": "bool", "unit": null, "default": "true", "required": false, "minimum": null, "maximum": null, "sensitivity": "public", "mode": "effective", "compatibility": "yes/no/on/off spellings are deprecated", "rules": [] }, { "semantic_path": "observability.metrics.bearer_token", "env_name": "CRANK_METRICS_BEARER_TOKEN", "process": "shared", "value_type": "secret", "unit": null, "default": null, "required": false, "minimum": null, "maximum": null, "sensitivity": "secret", "mode": "effective", "compatibility": null, "rules": [ "required when an enabled metrics bind is non-loopback" ] }, { "semantic_path": "observability.otlp.endpoint", "env_name": "OTEL_EXPORTER_OTLP_ENDPOINT", "process": "shared", "value_type": "url", "unit": null, "default": null, "required": false, "minimum": null, "maximum": null, "sensitivity": "internal", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "observability.otlp.traces_endpoint", "env_name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "process": "shared", "value_type": "url", "unit": null, "default": null, "required": false, "minimum": null, "maximum": null, "sensitivity": "internal", "mode": "effective", "compatibility": null, "rules": [ "overrides generic OTLP endpoint" ] }, { "semantic_path": "observability.otlp.protocol", "env_name": "OTEL_EXPORTER_OTLP_PROTOCOL", "process": "shared", "value_type": "enum", "unit": null, "default": "http/protobuf", "required": false, "minimum": null, "maximum": null, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "observability.otlp.traces_protocol", "env_name": "OTEL_EXPORTER_OTLP_TRACES_PROTOCOL", "process": "shared", "value_type": "enum", "unit": null, "default": null, "required": false, "minimum": null, "maximum": null, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "observability.otlp.timeout", "env_name": "OTEL_EXPORTER_OTLP_TIMEOUT", "process": "shared", "value_type": "duration", "unit": "milliseconds", "default": "10000", "required": false, "minimum": 1, "maximum": 300000, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "observability.otlp.traces_timeout", "env_name": "OTEL_EXPORTER_OTLP_TRACES_TIMEOUT", "process": "shared", "value_type": "duration", "unit": "milliseconds", "default": null, "required": false, "minimum": 1, "maximum": 300000, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "observability.otlp.headers", "env_name": "OTEL_EXPORTER_OTLP_HEADERS", "process": "shared", "value_type": "headers", "unit": null, "default": null, "required": false, "minimum": null, "maximum": null, "sensitivity": "secret", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "observability.otlp.traces_headers", "env_name": "OTEL_EXPORTER_OTLP_TRACES_HEADERS", "process": "shared", "value_type": "headers", "unit": null, "default": null, "required": false, "minimum": null, "maximum": null, "sensitivity": "secret", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "observability.otlp.max_queue_size", "env_name": "OTEL_BSP_MAX_QUEUE_SIZE", "process": "shared", "value_type": "u32", "unit": "spans", "default": "2048", "required": false, "minimum": 1, "maximum": 65536, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "observability.otlp.max_export_batch_size", "env_name": "OTEL_BSP_MAX_EXPORT_BATCH_SIZE", "process": "shared", "value_type": "u32", "unit": "spans", "default": "512", "required": false, "minimum": 1, "maximum": 65536, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [ "must be <= max_queue_size" ] }, { "semantic_path": "observability.otlp.schedule_delay", "env_name": "OTEL_BSP_SCHEDULE_DELAY", "process": "shared", "value_type": "duration", "unit": "milliseconds", "default": "5000", "required": false, "minimum": 1, "maximum": 300000, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "observability.otlp.export_timeout", "env_name": "OTEL_BSP_EXPORT_TIMEOUT", "process": "shared", "value_type": "duration", "unit": "milliseconds", "default": "30000", "required": false, "minimum": 1, "maximum": 300000, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "admin.bind", "env_name": "CRANK_ADMIN_BIND", "process": "admin_api", "value_type": "socket", "unit": null, "default": "0.0.0.0:3001", "required": false, "minimum": null, "maximum": null, "sensitivity": "internal", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "admin.metrics_bind", "env_name": "CRANK_ADMIN_METRICS_BIND", "process": "admin_api", "value_type": "socket", "unit": null, "default": "127.0.0.1:9464", "required": false, "minimum": null, "maximum": null, "sensitivity": "internal", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "admin.storage_root", "env_name": "CRANK_STORAGE_ROOT", "process": "admin_api", "value_type": "absolute_path", "unit": null, "default": "/var/lib/crank/storage", "required": false, "minimum": null, "maximum": null, "sensitivity": "internal", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "admin.rate_limit.rps", "env_name": "CRANK_ADMIN_RATE_LIMIT_RPS", "process": "admin_api", "value_type": "u32", "unit": "requests_per_second", "default": "30", "required": false, "minimum": 1, "maximum": 100000, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "admin.rate_limit.burst", "env_name": "CRANK_ADMIN_RATE_LIMIT_BURST", "process": "admin_api", "value_type": "u32", "unit": "requests", "default": "60", "required": false, "minimum": 1, "maximum": 1000000, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [ "must be >= admin rate RPS" ] }, { "semantic_path": "admin.invocation_log_retention_days", "env_name": "CRANK_INVOCATION_LOG_RETENTION_DAYS", "process": "admin_api", "value_type": "u32", "unit": "days", "default": "30", "required": false, "minimum": 1, "maximum": 36500, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "admin.session.secret", "env_name": "CRANK_SESSION_SECRET", "process": "admin_api", "value_type": "secret", "unit": null, "default": null, "required": true, "minimum": null, "maximum": null, "sensitivity": "secret", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "admin.password_pepper", "env_name": "CRANK_PASSWORD_PEPPER", "process": "admin_api", "value_type": "secret", "unit": null, "default": null, "required": true, "minimum": null, "maximum": null, "sensitivity": "secret", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "admin.session.ttl_hours", "env_name": "CRANK_SESSION_TTL_HOURS", "process": "admin_api", "value_type": "u32", "unit": "hours", "default": "24", "required": false, "minimum": 1, "maximum": 8760, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "admin.trust_forwarded_headers", "env_name": "CRANK_TRUST_FORWARDED_HEADERS", "process": "admin_api", "value_type": "bool", "unit": null, "default": "false", "required": false, "minimum": null, "maximum": null, "sensitivity": "public", "mode": "effective", "compatibility": "yes/no/on/off spellings are deprecated", "rules": [] }, { "semantic_path": "admin.bootstrap.email", "env_name": "CRANK_BOOTSTRAP_ADMIN_EMAIL", "process": "admin_api", "value_type": "string", "unit": null, "default": null, "required": true, "minimum": null, "maximum": null, "sensitivity": "internal", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "admin.bootstrap.password", "env_name": "CRANK_BOOTSTRAP_ADMIN_PASSWORD", "process": "admin_api", "value_type": "secret", "unit": null, "default": null, "required": true, "minimum": null, "maximum": null, "sensitivity": "secret", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "admin.bootstrap.display_name", "env_name": "CRANK_BOOTSTRAP_ADMIN_DISPLAY_NAME", "process": "admin_api", "value_type": "string", "unit": null, "default": "Crank Owner", "required": false, "minimum": null, "maximum": null, "sensitivity": "internal", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "admin.demo_seed", "env_name": "CRANK_DEMO_SEED", "process": "admin_api", "value_type": "bool", "unit": null, "default": "false", "required": false, "minimum": null, "maximum": null, "sensitivity": "public", "mode": "effective", "compatibility": "yes/no/on/off spellings are deprecated", "rules": [] }, { "semantic_path": "mcp.bind", "env_name": "CRANK_MCP_BIND", "process": "mcp_server", "value_type": "socket", "unit": null, "default": "0.0.0.0:3002", "required": false, "minimum": null, "maximum": null, "sensitivity": "internal", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "mcp.metrics_bind", "env_name": "CRANK_MCP_METRICS_BIND", "process": "mcp_server", "value_type": "socket", "unit": null, "default": "127.0.0.1:9465", "required": false, "minimum": null, "maximum": null, "sensitivity": "internal", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "mcp.refresh_ms", "env_name": "CRANK_MCP_REFRESH_MS", "process": "mcp_server", "value_type": "u64", "unit": "milliseconds", "default": "5000", "required": false, "minimum": 100, "maximum": 3600000, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "mcp.rate_limit.rps", "env_name": "CRANK_MCP_RATE_LIMIT_RPS", "process": "mcp_server", "value_type": "u32", "unit": "requests_per_second", "default": "60", "required": false, "minimum": 1, "maximum": 100000, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] }, { "semantic_path": "mcp.rate_limit.burst", "env_name": "CRANK_MCP_RATE_LIMIT_BURST", "process": "mcp_server", "value_type": "u32", "unit": "requests", "default": "120", "required": false, "minimum": 1, "maximum": 1000000, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [ "must be >= MCP rate RPS" ] }, { "semantic_path": "runtime.max_concurrent_sessions", "env_name": "CRANK_RUNTIME_MAX_CONCURRENT_SESSIONS", "process": "mcp_server", "value_type": "u32", "unit": "sessions", "default": "16", "required": false, "minimum": 1, "maximum": 65535, "sensitivity": "public", "mode": "effective", "compatibility": null, "rules": [] } ], "deployment_only_fields": [ "COMPOSE_PROJECT_NAME", "POSTGRES_PUBLISH_BIND", "POSTGRES_PUBLISH_PORT", "CRANK_ADMIN_API_IMAGE", "CRANK_MCP_SERVER_IMAGE", "CRANK_UI_IMAGE", "CRANK_PUBLISH_BIND", "CRANK_ADMIN_PUBLISH_PORT", "CRANK_MCP_PUBLISH_PORT", "CRANK_UI_PUBLISH_PORT", "VALKEY_PUBLISH_BIND", "VALKEY_PUBLISH_PORT" ] }