Skip to main content
ENCRYPTION_CONFIG defines three mandatory key purposes plus optional DEK caching and origin policy. JSON is accepted everywhere; the long-lived Node target also accepts a path to JSON or YAML.

Complete shape

Top-level fields

Symmetric section fields

Both credential and authorization_gate use the same structure: The active adapter must exist, and its allowlist must contain the active key.

Transfer section fields

Every kid must be unique across transfer adapters, and active_kid must be present. The development adapter uses kids because it generates ephemeral key pairs itself.

Global validation rules

Configuration loading fails if:
  • adapter IDs overlap between either symmetric section or the transfer section;
  • a provider key reference is shared between credential and authorization_gate;
  • a transfer key reference is also used as a symmetric root key;
  • an active adapter, active key, or active transfer kid is missing; or
  • a provider-specific field, URL, key name, credential mode, or auth method is invalid.
These rules make the adapter ID embedded in an envelope unambiguous for its full lifetime.

Origin policy

origin_policy.manifest_url selects a remote manifest. Standard Composio customer deployments should omit it because the reviewed toolkit manifest is compiled into the current image. If Composio supplies a custom manifest URL, use HTTPS; Keyring rejects a non-HTTPS manifest URL in production. The manifest is validated and cached for 60 seconds. A fetch or validation failure fails the affected request. Leave the field absent to use the bundled snapshot. The startup log annotation config.origin_policy.source identifies bundled or remote.

Config storage guidance

Prefer a read-only mounted YAML file. Node reads and validates it before listening, so configuration or credential-resolution failures fail startup.
Any config containing AWS keys, a GCP private key/access token, or a Vault token/AppRole secret ID is itself a secret. Prefer workload identity on Node/Kubernetes so the config contains only identifiers.