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
Bothcredential 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
credentialandauthorization_gate; - a transfer key reference is also used as a symmetric root key;
- an active adapter, active key, or active transfer
kidis missing; or - a provider-specific field, URL, key name, credential mode, or auth method is invalid.
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
- Node
- Cloudflare
- Vercel
Prefer a read-only mounted YAML file. Node reads and validates it before listening, so
configuration or credential-resolution failures fail startup.