Skip to main content
Version: 1.8.0

Look up configuration settings

A setting only helps when the selected DVARA distribution reads it. Use this reference to find the exact key, its default, where it works, and whether changing it requires a restart.

This page covers self-managed runtime settings. Configure workspaces, routes, policies, credentials, budgets, MCP servers, and A2A agents in DVARA Flightdeck on the Enterprise platform. Managed-service billing settings are not part of the self-managed contract.

Which configuration source owns the change?​

SourceUse it forWhen it applies
Open Source gateway.yamlProviders, workspaces, API-key fingerprints, routes, policies, output schemas, prompt templates, and local rate limitsRead once at startup; restart after a change
Environment variables or startup argumentsPorts, secrets, feature switches, global defaults, and process behaviorAt process startup; restart after a change
Enterprise DVARA FlightdeckManaged product configurationAbout 10 seconds at the default settings, when the next signed bundle reaches each Gateway; no restart
Enterprise bootstrap.yamlSeed initial workspaces, API keys, and routes into Flightdeck's databaseAt Flightdeck startup; existing identities are skipped. From 1.8.2 a Gateway given a bootstrap file refuses to start.
Enterprise signed configuration bundleEvery Enterprise Gateway pod from 1.8.2; it is how Flightdeck's configuration reaches themAt the bundle poll interval; no restart

The Open Source gateway.yaml and the Enterprise bootstrap.yaml are different schemas. Do not copy a block from one into the other. See the bootstrap mode table before setting a bootstrap variable.

How do environment variable names work?​

Most application properties use the conventional uppercase spelling with punctuation replaced by underscores:

dvara.flightdeck.portal.enabled
→ DVARA_FLIGHTDECK_PORTAL_ENABLED

Use the explicit environment variable in the tables when one is listed. Several compatibility names do not follow the mechanical conversion.

The Enterprise Helm chart is the preferred source for Kubernetes values. Do not translate a Helm value into an environment variable unless the chart documents that mapping.

What can gateway.yaml contain?​

The Open Source distribution reads ${NAME} and ${NAME:-fallback} placeholders from the environment. The fallback applies when the variable is unset or set but empty. Secrets should remain in environment variables.

SectionImportant fieldsRequired behavior
providers[]name, type, api_key, base_url, and provider-specific credential fieldstype is required. Use api_key: ${PROVIDER_API_KEY} rather than a literal secret.
workspaces[]id, name, status, region, metadata, credentialsid is required. metadata holds per-workspace governance overrides.
api_keys[]key_hash, workspace, name, scopeskey_hash must be sha256: followed by 64 lowercase hexadecimal characters. Plaintext key and generate entries are refused. Every name must be unique across the file.
routes[]id, model, provider, strategy, providers, fallback, pinned_model_versionUse one provider or a provider list. Unsupported strategies are refused at startup. In 1.8, fallback is accepted but does not control the automatic resolver, and pinned_model_version does not change the request sent upstream. Do not rely on either field as a production routing control.
policies[]id, workspace, status, dslworkspace is optional for a global policy. When set it must be declared under workspaces or named by an API key, otherwise startup is refused. The Open Source distribution applies ACTIVE policies.
output_schemas[]id, model or route, schema, enabledAt least one of model or route is required.
prompt_templates[]id, workspace, name, description, model, system, template, status, tagsTemplate variables are derived from {{name}} placeholders.
rate_limitsrequests_per_minute, tokens_per_minute, requests_burst, tokens_burstOmit a burst value to use the matching rate as capacity. Counters are local to this process.

The smallest useful file is shown in Configure DVARA safely. The Open Source distribution quickstart shows how to generate an API key and store only its fingerprint.

Which shared process settings are supported?​

These settings are present in the Open Source distribution and Enterprise DVARA Gateway unless the availability cell says otherwise.

PropertyEnvironment variableDefaultAvailability and effect
server.portSERVER_PORT8080Gateway HTTP port. Restart required.
spring.servlet.multipart.max-file-sizeDVARA_BATCH_MAX_FILE_SIZE100MBMaximum /v1/files upload size. The same value also sets the request-size limit.
dvara.id.nodeDVARA_ID_NODEderivedIdentifier node from 0 through 1023. Set a unique value on every replica when stable StatefulSet ordinals are not available.
dvara.audit.file.pathDVARA_AUDIT_FILE_PATHblankOpen Source distribution only. A blank path drops audit events and logs a startup warning. Set a writable path and an HMAC secret together.
dvara.audit.hmac-secretDVARA_AUDIT_HMAC_SECRETdevelopment placeholderSigns the local or persistent audit chain. Replace the placeholder before relying on tamper evidence.
dvara.encryption.master-passwordDVARA_ENCRYPTION_MASTER_PASSWORDblankDecrypts ENC: values in the Open Source distribution and encrypted Enterprise credentials. Required when encrypted storage is used.
dvara.audit.encrypt-stored-hmac-secret—removed/inertEnterprise compatibility note. Final 1.8 does not generate or store a new HMAC secret. Supply one DVARA_AUDIT_HMAC_SECRET to every signer and verifier. A master password is read only to recover an encrypted row left by an earlier build.
dvara.persistence.telemetry-retention.eval-results-days—90Enterprise only. A value of 0 or less keeps these rows.
dvara.persistence.telemetry-retention.prompt-experiment-events-days—90Enterprise only. A value of 0 or less keeps these rows.
dvara.persistence.telemetry-retention.shadow-policy-events-days—90Enterprise only. A value of 0 or less keeps these rows.
dvara.persistence.telemetry-retention.shadow-routing-events-days—90Enterprise only. A value of 0 or less keeps these rows.
dvara.persistence.telemetry-retention.batch-size—5000Maximum rows removed per batch.
dvara.persistence.telemetry-retention.cron—0 20 4 * * *Daily schedule. Set - to disable the sweep.
dvara.actuator.api-keyDVARA_ACTUATOR_API_KEYblankBearer for protected actuator endpoints. If blank, no bearer value can unlock those endpoints.
dvara.actuator.metrics-api-keyDVARA_ACTUATOR_METRICS_API_KEYblankSeparate bearer for /actuator/prometheus. Give it a different value from the operator key.
dvara.region.idDVARA_REGION_IDblankIdentifies this Gateway region. A blank value makes the instance region-unaware.
dvara.region.nameDVARA_REGION_NAMEblankHuman-readable region name.
management.tracing.sampling.probabilityTRACING_SAMPLING_PROBABILITY1.0Trace sample ratio from 0.0 to 1.0. Export still requires an OTLP endpoint.
management.opentelemetry.tracing.export.otlp.endpointOTEL_EXPORTER_OTLP_ENDPOINTunsetOTLP base URL. Do not append /v1/traces; the exporter adds the signal path. Unset means no OTLP export.

Process properties take effect at startup. Restart after changing any row in this table.

New user-facing record IDs are 13-character, time-sortable identifiers. Existing UUIDs remain valid and are not rewritten. DVARA derives the identifier node from a StatefulSet ordinal when the hostname ends in -<number>; otherwise it hashes the pod name, or chooses a random node when no pod identity is available. For a multi-replica Deployment, assign a unique DVARA_ID_NODE from 0 through 1023 to each replica. Values outside that range wrap and can collide with another node, so do not use them.

How do you activate an LLM provider?​

The provider registers only when its condition is satisfied at startup.

ProviderEnvironment variable or conditionDefault base URL
OpenAIOPENAI_API_KEYhttps://api.openai.com/v1
AnthropicANTHROPIC_API_KEYProvider default. From 1.8.5 dvara.llm-gateway.providers.anthropic.base-url sets another one, as for other providers
GeminiGEMINI_API_KEYProvider default
Azure OpenAIBoth AZURE_OPENAI_API_KEY and AZURE_OPENAI_BASE_URLNo default; the deployment URL is required
MistralMISTRAL_API_KEYProvider default
CohereCOHERE_API_KEYProvider default
GroqGROQ_API_KEYProvider default
QwenQWEN_API_KEYhttps://dashscope.aliyuncs.com/compatible-mode/v1
DeepSeekDEEPSEEK_API_KEYhttps://api.deepseek.com/v1
MoonshotMOONSHOT_API_KEYhttps://api.moonshot.cn/v1
ChatGLMZHIPU_API_KEYhttps://open.bigmodel.cn/api/paas/v4
GrokXAI_API_KEYhttps://api.x.ai/v1
OllamaOLLAMA_ENABLED=trueOLLAMA_BASE_URL, default http://localhost:11434. From 1.8.4, OLLAMA_STRUCTURED_OUTPUTS (dvara.llm-gateway.providers.ollama.structured-outputs, default true) sends json_schema response formats to Ollama; set it to false for an Ollama older than 0.5
BedrockBEDROCK_ENABLED=trueUses AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and AWS_REGION; region defaults to us-east-1
MockMOCK_PROVIDER_ENABLED=trueLocal test provider; do not enable scripted matchers on a production profile

Gemini, Bedrock and, from 1.8.4, Ollama take image bytes, not an https image URL. The Gateway fetches the URL for them only when you turn fetching on:

PropertyDefaultEffect
dvara.llm-gateway.image-fetch.enabledfalseLets the Gateway fetch an https image URL for providers that need bytes. Off, such a request is refused with 400 unsupported_capability before the call. Private, loopback, link-local and metadata addresses are always refused.
dvara.llm-gateway.image-fetch.max-bytes5242880Largest image fetched (5 MB).
dvara.llm-gateway.image-fetch.timeout5sTime for the whole fetch, redirects included.
dvara.llm-gateway.image-fetch.content-typesimage/png, image/jpeg, image/gif, image/webpContent types accepted.

The providers[] entries in Open Source gateway.yaml map to the same provider implementations. A workspace-level credentials map can replace an installation credential for that workspace.

Which routing and resilience properties are supported?​

PropertyDefaultAvailability and effect
dvara.llm-gateway.routes[].strategymodel-prefixmodel-prefix, round-robin, weighted, and canary are available by default. latency-aware, cost-aware, geo-aware, and intelligent are Enterprise only.
dvara.llm-gateway.resilience.enabledtrueMaster switch for retry, timeout, circuit breaker, and fallback behavior.
dvara.llm-gateway.resilience.retry.max-attempts3Total configured retry attempts.
dvara.llm-gateway.resilience.retry.initial-backoff-ms500First retry backoff.
dvara.llm-gateway.resilience.retry.backoff-multiplier2.0Backoff multiplier.
dvara.llm-gateway.resilience.retry.max-backoff-ms10000Maximum retry backoff.
dvara.llm-gateway.resilience.circuit-breaker.failure-rate-threshold50Failure percentage that opens the circuit after the minimum call count.
dvara.llm-gateway.resilience.circuit-breaker.sliding-window-size10Calls retained in the circuit-breaker window.
dvara.llm-gateway.resilience.circuit-breaker.minimum-number-of-calls5Calls required before failure rate can open the circuit.
dvara.llm-gateway.resilience.circuit-breaker.wait-duration-in-open-state-ms30000Delay before the half-open probe.
dvara.llm-gateway.resilience.circuit-breaker.permitted-calls-in-half-open3Probe calls allowed while half-open.
dvara.llm-gateway.resilience.timeout.chat-timeout-ms30000Whole non-streaming call timeout.
dvara.llm-gateway.resilience.timeout.streaming-timeout-ms120000Global value: complete client-visible stream lifetime. A provider override under resilience.providers.<provider> bounds only stream opening. Neither is an idle-between-chunks timeout.
dvara.llm-gateway.resilience.fallback.enabledtrueEnables automatic fallback across compatible registered providers. It does not activate a route-scoped or named fallback chain.

Provider-specific overrides live below dvara.llm-gateway.resilience.providers.<provider>.* and use the same retry, circuit-breaker, and timeout fields.

Which rate-limit properties are supported?​

PropertyDefaultAvailability and effect
dvara.llm-gateway.rate-limit.enabledfalseEnables client rate limiting.
dvara.llm-gateway.rate-limit.per-key.requests-per-minute100Request refill rate per API key.
dvara.llm-gateway.rate-limit.per-key.tokens-per-minute100000Token refill rate per API key.
dvara.llm-gateway.rate-limit.per-key.requests-burstsame as rateMaximum accumulated request capacity after an idle period.
dvara.llm-gateway.rate-limit.per-key.tokens-burstsame as rateMaximum accumulated token capacity after an idle period.
dvara.llm-gateway.rate-limit.shared-cache.urlblankEnterprise distribution only. A non-blank Valkey or Redis URL selects the fleet-wide token bucket. The connection opens on the first governed request.
dvara.llm-gateway.rate-limit.shared-cache.failure-modeOPENEnterprise shared-cache backend only. OPEN allows traffic when the store is unavailable; CLOSED refuses it.

The Open Source distribution uses one token bucket per process. A deployment with three replicas can therefore admit about three times the configured rate. The Enterprise embedded backend uses a cluster-wide 60-second sliding window; its burst settings do not apply. The Enterprise shared-cache backend uses a distributed token bucket and applies the burst settings. No Open Source setting turns local counters into shared counters.

A zero per-minute rate disables that dimension in the process and shared-cache token buckets. In the 1.8 Enterprise embedded backend, a zero request rate instead refuses every request; use a positive value or disable rate limiting. A zero burst uses the matching rate as capacity. For Account, Team, and Workspace values in the Enterprise hierarchy, the smallest positive value wins independently for requests and tokens. Use blank fields—not zero—to inherit or clear a Team or Account value until the Flightdeck zero-value behavior is aligned.

The 1.8 shared-cache backend settles completed token usage against the global token settings instead of a narrower workspace override. Do not use that backend as a strict workspace token ceiling.

dvara.llm-gateway.rate-limit.resp.url and dvara.llm-gateway.rate-limit.resp.failure-mode are ignored in 1.8. Merely deploying a cache with the Helm or Compose profile does not select it; set dvara.llm-gateway.rate-limit.shared-cache.url on the Gateway as a separate step. See Control request and token throughput for backend behavior and metrics.

Which priority-admission properties are supported?​

These Enterprise settings are read at startup and are off by default.

PropertyDefaultEffect
dvara.llm-gateway.routing.priority.enabledfalseEnables concurrency-based admission for chat requests.
dvara.llm-gateway.routing.priority.max-concurrent-requests1000Base concurrency used to calculate the current load percentage.
dvara.llm-gateway.routing.priority.tiers.premium.throttle-threshold-pct100Starts refusing premium work at this observed load.
dvara.llm-gateway.routing.priority.tiers.standard.throttle-threshold-pct80Starts refusing standard work at this observed load.
dvara.llm-gateway.routing.priority.tiers.bulk.throttle-threshold-pct50Starts refusing bulk work at this observed load.
dvara.llm-gateway.routing.priority.resolver-cache-ttl-seconds5Caches the workspace priority-tier lookup for this many seconds.

An unset workspace tier uses standard. The 1.8 admission operation is not an atomic hard cap, so a simultaneous burst can cross a threshold.

Which provider-rate-limit properties are supported?​

These Enterprise settings observe upstream rate-limit headers and are off by default. Ollama and Bedrock are not tracked in 1.8.

PropertyDefaultEffect
dvara.llm-gateway.provider-rate-limit.enabledfalseEnables proactive shedding for credential-based providers after a budget signal has been observed.
dvara.llm-gateway.provider-rate-limit.token-headroom-pct15Adds this percentage to the estimated input-token need before admission.
dvara.llm-gateway.provider-rate-limit.tier.bulk-threshold-pct50Sheds bulk work at or below this remaining-budget percentage.
dvara.llm-gateway.provider-rate-limit.tier.standard-threshold-pct20Sheds standard work at or below this remaining-budget percentage.
dvara.llm-gateway.provider-rate-limit.tier.premium-threshold-pct10Sheds premium work at or below this remaining-budget percentage.

In 1.8, enable priority admission as well when provider shedding must honor workspace tiers. Otherwise every request is treated as standard.

Which PII properties are supported?​

PropertyDefaultAvailability and effect
dvara.llm-gateway.pii.enabledtrueEnables PII scanning.
dvara.llm-gateway.pii.default-actionLOGLOG, BLOCK, or REDACT. TOKENIZE is Enterprise only and requires the token store.
dvara.llm-gateway.pii.scan-responsestrueScans non-streaming responses. BLOCK refuses a response containing PII with HTTP 400 after provider dispatch.
dvara.llm-gateway.pii.strip-before-cachetrueRemoves detected PII before a supported cache write.
dvara.llm-gateway.pii.scan-streaming-responsestrueEnables scanning on streamed responses.
dvara.llm-gateway.pii.streaming-scan-window-size256Retained for configuration compatibility; ignored by 1.8 whole-response enforcement.
dvara.llm-gateway.pii.streaming-overlap-margin64Retained for configuration compatibility; ignored by 1.8 whole-response enforcement.
dvara.llm-gateway.pii.streaming-max-held-characters1000000Maximum complete streamed response held when enforcement cannot safely release partial text.
dvara.llm-gateway.pii.presidio.endpointblankEnterprise detector or a custom integration only. A blank endpoint leaves external NER inactive. Setting it in the Open Source distribution does not add a detector.
dvara.llm-gateway.pii.presidio.languageenUsed only when an external detector is present.
dvara.llm-gateway.pii.presidio.score-threshold0.5Minimum external-detector confidence.
dvara.llm-gateway.pii.presidio.timeout-seconds5External-detector timeout.
dvara.llm-gateway.pii.presidio.cache-max-size1000Most texts whose Presidio result each Gateway pod keeps in memory; 0 or less turns the cache off.
dvara.llm-gateway.pii.presidio.cache-ttl-seconds300Seconds a cached Presidio result is reused; 0 or less turns the cache off. From 1.8.4 a failed analyzer call is never cached.
dvara.llm-gateway.pii.embedded.enabledfalseTurns on the optional Phileas PII layer. From 1.8.1 the Gateway image carries Phileas, so nothing needs to be built or mounted, and the layer stays off until you set this to true. Flightdeck does not carry the library.
dvara.llm-gateway.pii.auto-detokenize-responsefalseEnterprise TOKENIZE only. On supported non-streaming responses, restores only tokens minted by that request and therefore reintroduces raw PII. It never reverses REDACT or new model output.
dvara.llm-gateway.pii.max-tokens-per-workspace50000Enterprise token store only. Use DVARA_LLM_GATEWAY_PII_MAX_TOKENS_PER_WORKSPACE; the old tenant-suffixed environment variable does not bind. Inert in the Open Source distribution.
dvara.llm-gateway.pii.token-retention-days30Enterprise persistent token store only. Limits how long reversible tokens remain recoverable. The Open Source distribution has no token vault.
dvara.llm-gateway.pii.dek-forensic-retention-days30Enterprise persistent token store only. Retired key material is never retained longer than the token-retention window.

The Open Source distribution logs a warning when you configure a detector or token-store setting that is not present. It never silently treats TOKENIZE as irreversible redaction.

Which guardrail properties are supported?​

PropertyDefaultAvailability and effect
dvara.llm-gateway.guardrail.enabledtrueEnables prompt-injection and content detection.
dvara.llm-gateway.guardrail.default-actionLOGDefault result for a detection. Select a stricter action explicitly.
dvara.llm-gateway.guardrail.scan-responsestrueScans responses on supported operations.
dvara.llm-gateway.guardrail.risk-score-threshold0.7Ignores detections below this score.
dvara.llm-gateway.guardrail.classifier-actionFLAGAction for a statistical classifier. INHERIT uses the general guardrail action.
dvara.llm-gateway.guardrail.max-input-tokens0Optional fixed input cap. 0 disables this cap; provider context-window governance still applies.
dvara.llm-gateway.guardrail.max-messages-per-request100Maximum messages. 0 disables this cap.
dvara.llm-gateway.guardrail.max-message-length50000Maximum characters in one message. 0 disables this cap.
dvara.llm-gateway.guardrail.default-max-response-tokens4096Applied when a request omits its response-token limit. 0 disables the default.
dvara.llm-gateway.guardrail.scan-streaming-responsestrueEnables guardrails on streamed responses.
dvara.llm-gateway.guardrail.streaming-scan-window-size256Retained for configuration compatibility; ignored by 1.8 whole-response enforcement.
dvara.llm-gateway.guardrail.streaming-overlap-margin64Retained for configuration compatibility; ignored by 1.8 whole-response enforcement.
dvara.llm-gateway.guardrail.embedded.enabledfalseTurns on the optional Phileas guardrail layer. From 1.8.1 the Gateway image carries Phileas, and the layer stays off until you set this to true. Most of its detections score below the default risk threshold of 0.7, so lower the threshold if you want to act on them.
dvara.llm-gateway.guardrail.ml-classifier.enabledfalseEnterprise only. Enables one configured ML classifier.
dvara.llm-gateway.guardrail.ml-classifier.providergenericEnterprise only. Use defender for the in-process classifier whose model ships in the image. The HTTP options are generic, lakera, shield-gemini, bedrock-guardrails, and aporia. onnx-injection was removed in 1.8.1: with the classifier enabled, that value stops the Gateway from starting, and the message names defender.
dvara.llm-gateway.guardrail.ml-classifier.defender-model-pathblankEnterprise only. Points defender at your own copy of the model. Leave it blank to use the copy in the image.
dvara.llm-gateway.guardrail.ml-classifier.model-path, .injection-class-indexblankRetired in 1.8.1 along with onnx-injection. They now bind to nothing, and the Gateway names either one in a startup warning if it is still set.

Enterprise carries the Defender classifier and its model, so defender works with nothing mounted. HTTP classifiers still need their endpoint and credentials. Phileas ships in the Gateway image from 1.8.1, but both of its switches stay off until you turn one on. Managed guardrail plugins, semantic intent checks, and grounding each need their plugin, embedding service, or source documents, and a switch on its own does not add any of them. See ML and plugin guardrails for what startup reports and how each detection behaves.

Which Enterprise Gateway settings matter first?​

No configuration setting depends on licence state. See Licensing for rights and capacity limits.

The Enterprise Gateway exposes health,prometheus,gateway-status,info,license through Actuator. The Open Source distribution exposes health,prometheus,gateway-status,info and does not register the licence endpoint. DVARA_ACTUATOR_API_KEY protects gateway status and Enterprise licence health; DVARA_ACTUATOR_METRICS_API_KEY protects Prometheus and must be different.

Keep management.endpoint.health.show-details and every management.endpoint.health.group.<name>.show-details value at when-authorized or never. A value of always exposes details to anonymous probe callers and makes the Gateway refuse readiness; a group-specific value overrides the endpoint-wide value.

PropertyEnvironment variableDefaultEffect
dvara.license.keyDVARA_LICENSE_KEYblankSigned licence envelope. From 1.8.2 Flightdeck copies it into its licence store once, when none is stored, and ignores it after that; the Gateway does not read it. Set the licence on Flightdeck's License page instead. No restart is needed.
dvara.data-plane.control-plane.base-urlDVARA_DATA_PLANE_CONTROL_PLANE_BASE_URLblankFlightdeck's /internal address, for example https://flightdeck:8443. Required from 1.8.2: the Gateway refuses to start without it. See what a Gateway needs.
dvara.llm-gateway.local-store.pathDVARA_LLM_GATEWAY_LOCAL_STORE_PATHblankThe spool file, on a volume that survives a restart. Required from 1.8.2.
spring.datasource.urlSPRING_DATASOURCE_URLunsetFlightdeck only. From 1.8.2 a Gateway given a database URL refuses to start and names the setting.
—DVARA_DB_MIGRATE, DVARA_DB_POOL_SIZE, DVARA_DB_SOCKET_TIMEOUT_SECONDS—No longer read from 1.8.2. The Gateway has no database, and Flightdeck is the only process that migrates the schema.
dvara.license.degradation.data-plane-prefixes, dvara.license.degradation.messagemechanical conversion—Removed in 1.8.2 and bind to nothing. An expired licence no longer refuses any path.
dvara.credentials.require-workspace-credentialDVARA_CREDENTIALS_REQUIRE_TENANT_CREDENTIALfalseWhen true, a workspace without its own active provider credential receives 403 WORKSPACE_CREDENTIAL_REQUIRED instead of borrowing the platform credential.
dvara.audit.max-eventsDVARA_AUDIT_MAX_EVENTS100000Maximum signed envelopes retained in process memory. A configured durable sink is not truncated by this limit.
dvara.audit.store-prompts-by-defaultDVARA_AUDIT_STORE_PROMPTSfalsePrompt storage is not implemented in 1.8.1. No audit event carries a prompt, so turning this on keeps nothing, and the Gateway logs one warning at startup that says so.
dvara.audit.prompt-retention-daysDVARA_AUDIT_PROMPT_RETENTION_DAYS90Nothing reads this yet, because nothing stores a prompt. It is the retention that will apply once prompt storage arrives.
dvara.llm-gateway.cache.enabledDVARA_LLM_GATEWAY_CACHE_ENABLEDfalseExact-match response cache.
dvara.llm-gateway.cache.ttl-secondsDVARA_LLM_GATEWAY_CACHE_TTL_SECONDS3600Exact-match cache lifetime.
dvara.llm-gateway.cache.max-sizeDVARA_LLM_GATEWAY_CACHE_MAX_SIZE10000Exact-match cache entry limit.
dvara.llm-gateway.cache.semantic.enabledmechanical conversiontrueEnables the semantic cache implementation. Similarity-only serving remains off by default.
dvara.llm-gateway.cache.semantic.similarity-servingmechanical conversionfalseAllows a topically similar request to reuse a response. Keep false when semantic equivalence matters.
dvara.llm-gateway.cache.semantic.config-cache-ttl-secondsDVARA_LLM_GATEWAY_CACHE_SEMANTIC_CONFIG_CACHE_TTL_SECONDS60Maximum time a Gateway pod reuses the resolved workspace/model threshold. An edit can take this long to affect the pod. Set 0 to read the persisted threshold on every request.
dvara.llm-gateway.ip-access.enabledDVARA_LLM_GATEWAY_IP_ACCESS_ENABLEDfalseEnables IP rules.
dvara.llm-gateway.ip-access.scopeDVARA_LLM_GATEWAY_IP_ACCESS_SCOPEallall or data-plane; deny rules are evaluated before allow rules.
dvara.llm-gateway.tls.enforce-tls13DVARA_LLM_GATEWAY_TLS_ENFORCE_TLS13trueEnforces TLS 1.3 for provider connections.
dvara.llm-gateway.webhooks.enabledDVARA_LLM_GATEWAY_WEBHOOKS_ENABLEDtrueEnables delivery for webhooks that have been configured.
dvara.llm-gateway.webhooks.max-retriesDVARA_LLM_GATEWAY_WEBHOOKS_MAX_RETRIES3Maximum delivery retries.
dvara.llm-gateway.webhooks.delivery-timeout-msDVARA_LLM_GATEWAY_WEBHOOKS_DELIVERY_TIMEOUT5000Per-delivery timeout.

Which A2A streaming settings are supported?​

These settings apply only to the Enterprise A2A plane, which runs with or without a licence. The same bounds govern message:stream and tasks:resubscribe.

PropertyDefaultEffect
a2a.streaming.enabledtrueSet it to false to close both streaming doorways. message:stream and tasks:resubscribe then answer one SSE error event, a2a_streaming_disabled, before the caller is even authenticated, and startup logs a warning. Enforced from 1.8.1; earlier releases accepted the setting and ignored it.
a2a.streaming.max-held-characters1000000Maximum detector-visible text retained for one response.
a2a.streaming.max-held-bytes8000000Maximum serialized response bytes retained while delivery is Deferred.
a2a.streaming.max-held-events20000Maximum event objects retained while delivery is Deferred.
a2a.streaming.connect-timeout-seconds10Maximum time allowed to connect to the peer stream.
a2a.streaming.read-timeout-seconds300Read/idle timeout for the upstream peer stream.
a2a.streaming.scan-window-size256Accepted for compatibility but ignored by 1.8 whole-response enforcement.
a2a.streaming.overlap-margin64Accepted for compatibility but ignored by 1.8 whole-response enforcement.
a2a.streaming.resume-carry-characters256From 1.8.5. How much of the end of each text body a task's stream keeps for a resume. A tasks:resubscribe stream is scanned together with it, so a value split at the break is still caught. Kept in the pod's memory, per workspace, agent and task, for up to 10,000 tasks and one hour. 0 keeps nothing.

Under PII LOG, DVARA releases events immediately and retains a bounded prefix for final evidence. Crossing the character bound stops further scanning, continues delivery, and records scan_incomplete. Under PII BLOCK, REDACT, or TOKENIZE, DVARA holds the complete structured response; crossing any hold bound stops the stream without releasing the held response.

Which A2A delegation settings are supported?​

From 1.8.3, the A2A delegation guard reads a2a.delegation.mode (default enforce), a2a.delegation.cycle-rule (default agent-skill), a2a.delegation.max-depth (default 8) and a2a.delegation.require-chain-for-agents (default false) as fleet defaults that each workspace can override, plus a2a.delegation.chain-ttl (default 15m). The chain is signed with DVARA_A2A_DELEGATION_SIGNING_SECRET, or with a key derived from the audit HMAC secret when that is unset. From 1.8.4 the secret that gives the key must be at least 32 bytes and must not be a placeholder DVARA publishes. Otherwise a Gateway on a production profile refuses to start, and on a dev, test, ci, local or default profile it logs a warning and runs the guard as off. The delegation guard page explains each value and when to use observe.

From 1.8.5 three more settings work the same way, as fleet defaults that each workspace can override in the Flightdeck workspace form or on the Flightdeck's A2A Delegation page:

PropertyDefaultEffect
a2a.delegation.presetstandardstandard leaves every setting as set. hardened makes agent keys send their chain and treats any repeat of an agent as a cycle (cycle-rule agent), whatever those two settings say. It also turns on the session hop limit, at 200 unless you set your own. mode and max-depth still apply, so you can run hardened in observe first.
a2a.delegation.max-hops-per-session0 (no limit)The most hops one session may forward, for every tier, from 0 to 1,000,000. Hops spread over Gateways count together. Only hops forwarded to a peer count. Past the limit a hop is refused with 409 A2A_DELEGATION_HOP_BUDGET_EXCEEDED. This is a safety limit; billing does not change.
a2a.delegation.hop-budget-timeout100msHow long a hop waits for the shared count. When it cannot be read in time, a hardened workspace refuses the hop with 503 A2A_DELEGATION_HOP_BUDGET_UNAVAILABLE. Other workspaces let it through, log a warning and count dvara_a2a_hop_budget_unavailable_total.

Which A2A push and endpoint settings are new in 1.8.5?​

From 1.8.5 a peer's push notification goes to the Gateway, which checks, scans and audits it before it passes it on to the workspace's webhook. A2A peers must also be https://. See native A2A.

PropertyEnvironment variableDefaultEffect
a2a.push.callback-base-urlA2A_PUSH_CALLBACK_BASE_URLunsetThe Gateway's public URL as peers reach it. Unset, a push config is refused with 503 A2A_PUSH_NOT_AVAILABLE, except in a workspace that chose direct delivery. In the Helm chart, set llmGatewayServer.a2a.pushCallbackBaseUrl.
a2a.push.delivery-attemptsmechanical conversion3Attempts to deliver a notification to the workspace's webhook. If all fail, the peer gets 502 and can send again.
a2a.push.max-body-bytesmechanical conversion1048576The largest notification read (1 MiB). A larger one is refused with 413 A2A_PUSH_TOO_LARGE.
dvara.a2a.allow-plaintext-endpointsDVARA_A2A_ALLOW_PLAINTEXT_ENDPOINTSfalseAllows http:// peers, for local stacks whose stub peers have no certificate. Works only on a development profile (dev, test, ci, local, or none). The production profile that Compose and the chart set ignores it. Set it on Flightdeck and the Gateway alike.

A workspace keeps direct delivery, peer to webhook, with its setting a2a.push.delivery=direct. Those notifications are then not scanned, audited or recorded by DVARA.

Which MCP settings are new in 1.8.4 and 1.8.5?​

These settings apply only to the Enterprise MCP plane, which runs with or without a licence.

PropertyDefaultEffect
dvara.mcp-gateway.agentic.approval.progress-interval-ms5000How often a native /mcp tools/call held for approval gets an MCP notifications/progress. Sent only when the call's _meta carries a progressToken.
dvara.mcp-gateway.extensions.allowed (DVARA_MCP_GATEWAY_EXTENSIONS_ALLOWED)empty, which allows nothingThe fleet-wide MCP extension allow-list. Entries are vendor/name, vendor/* or vendor/name@version. DVARA serves no extension yet, so nothing is granted.
dvara.mcp-gateway.legacy-sse-sunset (DVARA_MCP_GATEWAY_LEGACY_SSE_SUNSET)2027-07-28From 1.8.5. The first day (UTC) DVARA refuses to reach an upstream server over the legacy HTTP+SSE transport. From that date a call is refused with 410 mcp_transport_sunset and a tool sync fails. Set it on the Gateway and on Flightdeck.
dvara.mcp-gateway.input-requests.elicitationallowFrom 1.8.5. Whether a server's request for user input (elicitation/create) is relayed to the caller on the REST surface. allow or refuse.
dvara.mcp-gateway.input-requests.rootsrefuseFrom 1.8.5. The same for a request for the client's filesystem roots (roots/list).
dvara.mcp-gateway.input-requests.max-request-state-bytes16384From 1.8.5. The largest requestState relayed either way (16 KiB).

A workspace can replace the fleet list with its mcp.extensions.allowed key, set on the Flightdeck workspace form or on the Flightdeck's Agents → MCP Extensions page. Blank inherits the fleet list and none allows nothing. A malformed entry is refused on save and on a GitOps import. See MCP extensions.

How large a request or response can be​

PropertyDefaultEffect
a2a.limits.max-message-length50000The most text one outbound A2A message may carry, counted across all of its text parts. 0 or less turns the cap off.

A message over the limit is refused with 413 A2A_MESSAGE_TOO_LARGE, and the message names both numbers. The check runs before policy and the PII scan, on message:send and on message:stream, and the refusal is audited and recorded as a hop like any other refusal.

The cap arrived in 1.8.1. Before it, the plane had no size limit at all, and a very large message could hold a Gateway thread for minutes inside the PII scan. The default matches the LLM plane's guardrail.max-message-length, so an agent that fits one fits the other.

From 1.8.5 an MCP tool call has an argument limit, and each plane limits how much of an upstream's answer it reads. From 1.8.6 the native MCP endpoint also limits the complete request body. 0 turns a limit off.

PropertyEnvironment variableDefaultPast the limit
dvara.mcp-gateway.limits.max-request-bytesDVARA_MCP_GATEWAY_LIMITS_MAX_REQUEST_BYTES4194304 (4 MiB)Bare HTTP 413 on native POST /mcp, before JSON-RPC processing
dvara.mcp-gateway.limits.max-arguments-bytesDVARA_MCP_GATEWAY_LIMITS_MAX_ARGUMENTS_BYTES1048576 (1 MiB)413 MCP_ARGUMENTS_TOO_LARGE, before the schema check, policy, the PII scan and the server
dvara.llm-gateway.response-limits.max-body-bytesDVARA_LLM_GATEWAY_RESPONSE_LIMITS_MAX_BODY_BYTES67108864 (64 MiB)502 PROVIDER_RESPONSE_TOO_LARGE
dvara.llm-gateway.response-limits.max-stream-bytesDVARA_LLM_GATEWAY_RESPONSE_LIMITS_MAX_STREAM_BYTES134217728 (128 MiB)502 PROVIDER_RESPONSE_TOO_LARGE
dvara.mcp-gateway.response-limits.max-body-bytesDVARA_MCP_GATEWAY_RESPONSE_LIMITS_MAX_BODY_BYTES4194304 (4 MiB)502 MCP_RESPONSE_TOO_LARGE
dvara.mcp-gateway.response-limits.max-stream-bytesDVARA_MCP_GATEWAY_RESPONSE_LIMITS_MAX_STREAM_BYTES16777216 (16 MiB)502 MCP_RESPONSE_TOO_LARGE
a2a.response-limits.max-body-bytesA2A_RESPONSE_LIMITS_MAX_BODY_BYTES16777216 (16 MiB)502 A2A_RESPONSE_TOO_LARGE
a2a.response-limits.max-stream-bytesA2A_RESPONSE_LIMITS_MAX_STREAM_BYTES67108864 (64 MiB)502 A2A_RESPONSE_TOO_LARGE; the stream ends with an error event

The max-body-bytes limits cover a whole answer; the max-stream-bytes limits cover a streamed answer, and on the LLM plane a file download such as a batch's results. A refused answer is not retried. A provider answer over the limit does not count against the provider's circuit. The MCP limits cover every upstream transport and the tool sync; the A2A limits cover hops, streams, task calls and Agent Card fetches. The MCP default is lower because a multi-megabyte tool result takes seconds to read, and a larger limit would time out before it refused.

The MCP request limit covers the whole native POST /mcp body, not the server-scoped REST bridge. DVARA checks authentication before reading the body, so a bad credential still receives 401. A declared or chunked body over the limit receives 413 without a DVARA JSON error code. Because this outer limit includes the tool arguments, a workspace argument limit above 4 MiB has no effect on native calls unless you raise the outer limit too.

A workspace can set its own MCP argument limit and its own MCP and A2A response limits: mcp.limits.max-arguments-bytes, mcp.response-limits.max-body-bytes, mcp.response-limits.max-stream-bytes, a2a.response-limits.max-body-bytes and a2a.response-limits.max-stream-bytes. Set them in the Size limits section of the Flightdeck workspace form. A positive whole number replaces the fleet value, lower or higher; the form and a GitOps import refuse anything else. The LLM limits are fleet-wide only.

On upgrade to 1.8.5: a tool call with more than 1 MiB of arguments, an MCP tool result over 4 MiB, an A2A answer over 16 MiB and an A2A stream over 64 MiB are refused where they used to be read whole.

On upgrade to 1.8.6: a native MCP request over 4 MiB is refused before JSON-RPC processing, where the Gateway previously buffered the complete body.

Configure an external credential store​

Set dvara.vault.backend to hashicorp, aws-secrets-manager, or azure-key-vault. A blank value disables external credential lookup.

PropertyEnvironment variableDefault
dvara.vault.cache-ttl-secondsDVARA_VAULT_CACHE_TTL300
dvara.vault.hashicorp.addressVAULT_ADDRblank
dvara.vault.hashicorp.tokenVAULT_TOKENblank
dvara.vault.hashicorp.namespaceVAULT_NAMESPACEblank
dvara.vault.hashicorp.secret-pathVAULT_SECRET_PATHsecret/data/dvara
dvara.vault.hashicorp.auth-methodVAULT_AUTH_METHODtoken
dvara.vault.aws.regionAWS_VAULT_REGIONus-east-1
dvara.vault.aws.secret-nameAWS_SECRET_NAMEdvara/provider-credentials
dvara.vault.azure.vault-urlAZURE_VAULT_URLblank
dvara.vault.azure.client-idAZURE_CLIENT_IDblank
dvara.vault.azure.client-secretAZURE_CLIENT_SECRETblank
dvara.vault.azure.tenant-idAZURE_TENANT_IDblank

For Azure Key Vault, tenant-id is the Microsoft Entra tenant that owns the app registration—not a DVARA workspace ID. Use AZURE_TENANT_ID=<tenant-id> in deployment configuration.

Backend credentials are prerequisites, not feature switches. Prefer workload identity or the provider’s default credential chain where supported instead of static keys.

When does a bootstrap file run?​

DVARA_BOOTSTRAP_FILE is the canonical variable. The older GATEWAY_BOOTSTRAP_FILE remains an accepted fallback in 1.8, but new deployments should not use it.

Gateway configuration modeWhat happens when a bootstrap file is set
FlightdeckDVARA reads the file at Flightdeck startup, creates missing workspaces, API keys, and routes in its database, and skips identities that already exist. The next bundle carries them to the Gateways. It is initial seeding, not continuous reconciliation.
Open Source gateway.yaml storeThe repositories are read-only. The bootstrap variable is accepted only when it names the same file as DVARA_CONFIG_FILE; the file is already the active configuration and is not copied anywhere. A different file refuses startup.
Enterprise GatewayFrom 1.8.2 the Gateway refuses to start when DVARA_BOOTSTRAP_FILE or GATEWAY_BOOTSTRAP_FILE is set, and names the setting. Set the file on Flightdeck instead.

The schemas remain different: use gateway.yaml to serve an Open Source configuration and bootstrap.yaml only to seed Flightdeck.

What does a Gateway need without a database?​

From 1.8.2 an Enterprise Gateway has no database. It reads its configuration from the signed bundle Flightdeck publishes, and writes audit, usage and cost to a local spool that it ships to Flightdeck. See How the gateway runs without a database.

ResponsibilitySettingDefault
Reach Flightdeck for configuration and to drain the spooldvara.data-plane.control-plane.base-urlblank; required, the Gateway refuses to start without it
Keep audit and telemetry while disconnecteddvara.llm-gateway.local-store.pathblank; required, the Gateway refuses to start without it
Enrol with Flightdeck for the /internal certificatedvara.data-plane.control-plane.enrolment.shared-secret (the same value as Flightdeck's dvara.internal.enrolment.shared-secret, at least 32 characters) or a one-time dvara.data-plane.control-plane.enrolment.tokenblank
Keep the enrolled key and certificatedvara.data-plane.control-plane.enrolment.directory, on a persistent volume. Setting it turns enrolment on for the pod.blank
Verify configurationdvara.data-plane.control-plane.public-keyblank; optional, because enrolment delivers the key. A key you set wins.

dvara.data-plane.serve-from-bundle is always on for an Enterprise Gateway from 1.8.2. Setting it to false refuses startup.

Flightdeck's side of enrolment:

PropertyDefaultEffect
dvara.internal.enrolment.enabledfalseCreates Flightdeck's own certificate authority and serves /internal on the enrolment port. The Compose file and the Helm chart turn it on.
dvara.internal.enrolment.port8443The HTTPS port for enrolment and /internal.
dvara.internal.enrolment.server-namesflightdeck, localhost, plus the host nameNames in Flightdeck's server certificate. Set them to what Gateways put in base-url.
dvara.internal.enrolment.shared-secretblankThe shared secret Gateways enrol with. At least 32 characters, or Flightdeck refuses to start.
dvara.internal.enrolment.token-ttl24hHow long a one-time token from the Flightdeck's Gateway Enrolment page is valid.
dvara.internal.enrolment.certificate-validity30dValidity of Gateway and server certificates. Gateways renew their own.

Local-spool throughput and capacity are per Gateway pod:

PropertyDefaultEffect
dvara.llm-gateway.local-store.drain-interval-ms30000Fixed delay between drain passes
dvara.llm-gateway.local-store.drain-batch-size500Records per batch; one pass continues for up to 20 full batches or 10 seconds
dvara.llm-gateway.local-store.max-sheddable-records500000Bound across usage, cost, and observability records; audit records are never shed

At the defaults, a pod can drain about 10,000 records per pass. When the sheddable bound is full, DVARA drops lower-tier records to make room and increments gateway_spool_shed_total{class}. Monitor gateway_drain_lag_seconds, which reports the age of the oldest unshipped record across all drained classes.

Useful bundle settings:

PropertyDefaultEffect
dvara.data-plane.control-plane.poll-interval-ms5000Bundle version poll interval.
dvara.data-plane.control-plane.deny-list-poll-interval-ms5000From 1.8.5. How often the Gateway polls the revocation list, and so how fast a revocation or a session kill lands. Before 1.8.5 the list polled every 10 seconds. When this is unset and poll-interval-ms is set, the list keeps that value.
dvara.data-plane.control-plane.staleness-warn-seconds3600Age at which /actuator/gateway-status reports the active bundle as stale. It warns; it does not stop traffic.
dvara.data-plane.control-plane.snapshot-pathblankPersists the last verified bundle for cold start during a control-plane outage. Use a durable volume in production.
dvara.data-plane.control-plane.deny-list-urlcontrol-plane base URLOptional independent revocation channel. Using the same URL shares its failure mode.
dvara.data-plane.control-plane.ingest-urlcontrol-plane base URLOptional separate destination for audit and telemetry ingestion.

From 1.8.2 only Flightdeck checks the database for changes, with dvara.config.poll-interval-ms (default 3000), and republishes the bundle when something changed, checking every dvara.config.bundle.republish-interval-ms (default 5000). A Gateway does not register these pollers.

Which session-kill settings are new in 1.8.5?​

From 1.8.5 a session kill stops the session on the LLM, MCP and A2A planes, on every Gateway, for 24 hours. See Stop an agent session.

PropertyEnvironment variableDefaultEffect
dvara.internal.deny-list.session-kill-retentionmechanical conversion24hHow long a kill lasts, on Flightdeck and on every Gateway. Set the same value on both. Replaces dvara.internal.deny-list.session-retention-margin-minutes, which gave a kill 75 minutes.
dvara.cluster.membersDVARA_CLUSTER_MEMBERSunsetA comma-separated list of Gateway host or host:port entries that form one cluster. When set, it wins over every other discovery method. Use it on VMs and Compose where multicast is blocked.
dvara.cluster.instance-namemechanical conversiondvara-gatewayThe Gateway's name in the cluster.
dvara.cluster.portmechanical conversionunsetA fixed cluster port for the Gateway.
dvara.agentic.loop-detection.cluster-timeoutmechanical conversion50msHow long a loop check waits for the session's shared history. When it does not answer, the Gateway judges the call on its own history and counts dvara_loop_detector_fallback_total. A loop check never fails a call.

Gateways in one cluster pass a kill to each other within milliseconds. The revocation list stays the authority, so a kill still arrives, within one poll, when the cluster is absent or split. /actuator/gateway-status reports the cluster size in its sessionKills section, so a fleet of one-member clusters is visible.

Which Flightdeck process settings are supported?​

PropertyEnvironment variableDefaultEffect
server.portSERVER_PORT8090Flightdeck HTTP port.
spring.session.timeoutSPRING_SESSION_TIMEOUT4hServer-side timeout for built-in, OIDC, and SAML browser sessions.
dvara.flightdeck.gateway.urlDVARA_FLIGHTDECK_GATEWAY_URLhttp://localhost:8080Gateway base URL used by Flightdeck.
dvara.flightdeck.gateway.connect-timeout-msmechanical conversion5000Connection timeout for Flightdeck-to-Gateway calls.
dvara.flightdeck.gateway.read-timeout-msmechanical conversion10000Read timeout for Flightdeck-to-Gateway calls.
dvara.flightdeck.playground.enabledDVARA_FLIGHTDECK_PLAYGROUND_ENABLEDtrueEnables ad hoc model calls from the Flightdeck. Disable when operators should not make them.
dvara.flightdeck.portal.enabledmechanical conversiontrueEnables workspace-scoped Flightdeck pages routes.
dvara.flightdeck.portal.self-servicemechanical conversiontrueAllows workspace users to create supported resources in the Flightdeck.
dvara.flightdeck.security.enabledmechanical conversiontrueUses OIDC when an issuer is configured; otherwise uses built-in authentication. Set false only for local development.
dvara.flightdeck.security.rbac.enabledmechanical conversiontrueEnforces roles on authenticated administrative routes.
dvara.flightdeck.security.oidc.issuer-urimechanical conversionblankActivates OIDC when security is enabled.
dvara.flightdeck.security.saml.metadata-urlDVARA_FLIGHTDECK_SECURITY_SAML_METADATA_URLblankActivates SAML. Configuring OIDC and SAML together is refused at startup.
spring.servlet.multipart.max-file-sizemechanical conversion25MBMaximum configuration-import upload. The request-size limit is also 25MB.
dvara.flightdeck.catalog.tiers[].caps.monthly-llm-calls, .monthly-mcp-calls, .monthly-a2a-callsconfigured in the tier catalogueper tierMonthly governed-call quota bands. A value of 0 means unlimited.
dvara.flightdeck.catalog.tiers[].blocks-at-hard-capconfigured in the tier catalogueper tierDecides whether a tier blocks after its hard-cap threshold.
dvara.flightdeck.audit-archive.*mechanical conversiondisabledConfigures audit archival. Cost and token-usage records use the workspace audit retention or a fixed 400-day floor, whichever is longer. No shipped 1.8 image packages the optional S3 client required to start it.

Use the identity-provider guides for the complete OIDC or SAML claim mapping. Email and compliance scheduling are separate operational workflows. Configure audit archival on its canonical page rather than copying a partial example from this reference.

Where do workspace overrides belong?​

Which security-sensitive settings need an explicit decision?​

PropertyDefaultDistributionEffect
dvara.llm-gateway.ip-access.trust-forwarded-forfalseEnterpriseUses the forwarded client address. Enable only behind a proxy that strips caller-supplied forwarding headers.
dvara.llm-gateway.ip-access.global-allowlist / .global-denylistemptyEnterpriseGlobal CIDR rules applied before workspace rules.
dvara.pii.token-encryption-master-passwordblankEnterpriseWithout it, TOKENIZE cannot mint a token and pii.degraded-action applies (BLOCK by default).
dvara.pii.key-sourcelocalEnterpriseSelects local or KMS-backed token key custody.
dvara.pii.kms.key-id, .region, .access-key, .secret-keyblankEnterpriseKMS key and optional explicit AWS credentials.
dvara.llm-gateway.local-store.pii-high-water-per-workspace40000EnterpriseStops minting more tokens for a workspace at this depth and applies degraded action.
dvara.internal.mtls.enabled / .log-rejectionsfalse / trueEnterpriseEnables the internal channel and records rejected client certificates.
dvara.llm-gateway.pii.token-modevaultEnterpriseself-contained sends encrypted PII token ciphertext across the provider boundary.
dvara.flightdeck.security.saml.signing.certificate / .private-keyblankEnterpriseRequired when the IdP requests signed authentication requests.
dvara.flightdeck.security.builtin.max-failed-attempts / .lockout-duration-minutes5 / 15EnterpriseBuilt-in account lockout policy.
dvara.llm-gateway.cache.in-memory.enabledfalseOpen SourceEnables the process-local exact response cache.
dvara.llm-gateway.cache.in-memory.max-entries / .ttl-seconds1000 / 300Open SourceBounds entries and lifetime; restart clears the cache.

In the Open Source distribution, put these keys in workspaces[].metadata inside gateway.yaml. In the Enterprise platform, use the matching Flightdeck settings page. Enterprise typed settings take precedence over legacy metadata values.

KeyDefault or valuesCondition
pii.enabledglobal defaultApplies to this workspace.
pii.actionLOG, BLOCK, REDACT, or Enterprise TOKENIZELOG is the default. REDACT is irreversible; TOKENIZE needs a token store and key material. Path-specific response behavior still applies.
pii.scan-responsesglobal defaultControls response scanning.
pii.auto-detokenize-responsefalseEnterprise TOKENIZE only; restores request-minted tokens on supported non-streaming responses.
pii.degraded-actionBLOCK or LOG; default BLOCKEnterprise TOKENIZE only. Determines whether to refuse or expose raw input when a token cannot be minted.
pii.custom-patternsJSON mapPattern names map to regular expressions.
guardrail.enabledglobal defaultEnables workspace guardrails.
guardrail.actionLOG, FLAG, or BLOCKDetermines whether a detection records, flags, or refuses on supported paths.
guardrail.risk-score-thresholdglobal defaultNumber from 0.0 to 1.0.
rate-limit.requests-per-minuteglobal defaultPer-workspace override applied to its API keys.
rate-limit.tokens-per-minuteglobal defaultPer-workspace token override.
credentials.require-workspace-credentialglobal defaultEnterprise strict-BYOK override.
cost.per-call-max-usd0, disabledEnterprise per-request cost ceiling; accurate pricing is required.
ip-access.allowlistcomma-separated CIDRsEnterprise IP control; empty means no workspace allowlist.
ip-access.denylistcomma-separated CIDRsEnterprise denylist; evaluated before allowlist.
data-residency.allowed-regionscomma-separated region IDsEnterprise. Empty or absent means no workspace residency restriction.
audit.store-promptsfalse unless changedEnterprise. Prompt storage is not implemented in 1.8.1, so this keeps nothing; a workspace that turns it on is named once in a startup warning.
approval.required-toolscomma-separated glob patternsEnterprise MCP approval rule. The MCP plane runs with or without a licence.
approval.required-serverscomma-separated server IDsEnterprise MCP approval rule.
agentic.loop-detection.enabledworkspace or global defaultEnterprise agentic governance.
agentic.loop-detection.auto-killfalseEnterprise. Detection records without terminating a session unless enabled.

Use the governance guides for the full set of typed workspace controls. A field appearing in an import document does not make its feature available in the Open Source distribution.

Which old settings should you remove?​

Old setting1.8 behaviorReplacement
dvara.llm-gateway.data-plane.require-api-key / DVARA_LLM_GATEWAY_REQUIRE_API_KEYRemoved. Every /v1 request requires a key. A false value refuses startup; true is tolerated as dead configuration during migration.Remove the setting, mint a key for every caller, and store only its fingerprint.
gateway.server.api-keyNot the canonical actuator namespacedvara.actuator.api-key / DVARA_ACTUATOR_API_KEY
gateway.server.metrics-api-keyNot the canonical actuator namespacedvara.actuator.metrics-api-key / DVARA_ACTUATOR_METRICS_API_KEY
management.otlp.tracing.endpointIgnored by the 1.8 runtimemanagement.opentelemetry.tracing.export.otlp.endpoint or OTEL_EXPORTER_OTLP_ENDPOINT
dvara.llm-gateway.rate-limit.resp.urlIgnoreddvara.llm-gateway.rate-limit.shared-cache.url in the Enterprise distribution
dvara.llm-gateway.rate-limit.resp.failure-modeIgnoreddvara.llm-gateway.rate-limit.shared-cache.failure-mode in the Enterprise distribution
DVARA_LLM_GATEWAY_PII_MAX_TOKENS_PER_TENANTDoes not bind to the renamed workspace propertyDVARA_LLM_GATEWAY_PII_MAX_TOKENS_PER_WORKSPACE
dvara.llm-gateway.region.idAccepted as a deprecated alias; conflicting region values refuse startupdvara.region.id
api_keys[].key in gateway.yamlRefused; plaintext API keys are no longer acceptedGenerate a key and store key_hash
api_keys[].generate in gateway.yamlRefused; generated keys would change at restartGenerate the key before startup and store key_hash
output_schemas[].max_retriesIgnoredRemove it; schema validation does not read this field
output_schemas[].correction_promptIgnoredRemove it
Separate MCP or A2A service portsNo effect in the unified Enterprise GatewaySend MCP and A2A traffic to Gateway port 8080

Unknown fields in gateway.yaml can be ignored unless validation explicitly rejects them. Treat a clean startup as necessary but not sufficient: send a governed test request and verify its response, audit event, and metrics before relying on a configuration change.

How do you verify a setting took effect?​

  1. Check /actuator/health/readiness after startup or rollout.
  2. Call /actuator/gateway-status with DVARA_ACTUATOR_API_KEY to inspect providers, routes, limits, region, warnings, and bundle state.
  3. For the Enterprise posture and licence health, call /actuator/license with the same operator key.
  4. Exercise the affected request path with a safe test input.
  5. Verify the resulting audit event and metric. A setting name alone does not prove that a capability is active.

Start with Configure DVARA safely for the change workflow, and check Capability availability before enabling a distribution-specific control.