Run Keyring on a globally distributed serverless platform with Worker secrets and managed scaling.
Cloudflare Workers is useful when you want globally distributed execution, rapid scaling, and no
container fleet to patch. It is a supported source deployment and does not use the
composiohq/keyring:alpha container image.
Workers do not provide the same KMS workload identity as ECS or Cloud Run. Review how Keyring will
authenticate to your KMS and avoid long-lived cloud credentials where possible.
Create a complete inline JSON value from the
KMS adapter configuration, then store it as a Worker secret:
pnpm wrangler secret put ENCRYPTION_CONFIG --env productionpnpm wrangler secret put OTEL_COLLECTOR_HEADERS --env production
If an AWS adapter uses environment credentials, also add AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY, and an optional AWS_SESSION_TOKEN as Worker secrets. Never place credentials
or ENCRYPTION_CONFIG in plain Wrangler variables or source control.Repeat the secret setup for staging; Worker secrets are environment-specific.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Keyring","description":"Deploy and operate Keyring, the credential-holding proxy","colors":{"primary":"#51A2FF","light":"#287FC3","dark":"#79B8F3"},"logo":{"light":"https://mintcdn.com/composio-keyring/jZ8ZYloIv7UM-j2J/assets/brand/keyring_logo_light.svg?fit=max\u0026auto=format\u0026n=jZ8ZYloIv7UM-j2J\u0026q=85\u0026s=5912304b4a8d6b230dc5af515e3531a4","dark":"https://mintcdn.com/composio-keyring/jZ8ZYloIv7UM-j2J/assets/brand/keyring_logo_dark.svg?fit=max\u0026auto=format\u0026n=jZ8ZYloIv7UM-j2J\u0026q=85\u0026s=aa0bb1f1462e9915e1fa8e78cc1779c2"},"favicon":{"light":"https://mintcdn.com/composio-keyring/yr3Q39JJeEl8FtbM/assets/brand/composio_mark_black.svg?fit=max\u0026auto=format\u0026n=yr3Q39JJeEl8FtbM\u0026q=85\u0026s=66ba3b07082be367c051c435a1d9faa1","dark":"https://mintcdn.com/composio-keyring/yr3Q39JJeEl8FtbM/assets/brand/composio_mark_white.svg?fit=max\u0026auto=format\u0026n=yr3Q39JJeEl8FtbM\u0026q=85\u0026s=9d8bf8287aba438d85eb29e8f6b4a02c"},"appearance":{"default":"system"},"background":{"decoration":"grid","color":{"light":"#F6F6F6","dark":"#0F0F0F"}},"fonts":{"family":"ABC Diatype","weight":400,"source":"https://brand.composio.dev/fonts/ABCDiatype-Regular.woff2","format":"woff2"},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","codeblocks":{"theme":{"light":"github-light","dark":"github-dark"}},"latex":false},"contextual":{"options":["copy"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"composio-keyring","hasAudioNarration":false,"actualSubdomain":"composio-keyring","customDomains":["keyring.docs.composio.dev"],"gitSource":{"type":"github","owner":"composiohq","repo":"keyring","deployBranch":"codex/keyring-customer-docs","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6a914103c027eb3ce5896722","collectionId":"594f4aac-8383-4104-9a27-58cf3d5a0249","liveDeploymentHistoryId":"6a914103c027eb3ce5896722","schemaVersion":"v3"},"entitlements":{},"buildId":"6a914103c027eb3ce5896722","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"Deploy","count":8},{"language":"default","tag":"Configure","count":4},{"language":"default","tag":"Security","count":4},{"language":"default","tag":"How Keyring works","count":3},{"language":"default","tag":"Get started","count":1},{"language":"default","tag":"Operate","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","href":"/_mintlify/custom/composio-keyring/14b27f86d9163d7c/style.css"}],"page":{"pagePath":"deployment/cloudflare_workers","slug":"/deployment/cloudflare_workers","pageMetadata":{"title":"Deploy to Cloudflare Workers","description":"Run Keyring on a globally distributed serverless platform with Worker secrets and managed scaling.","icon":"cloud","href":"/deployment/cloudflare_workers"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Run Keyring on a globally distributed serverless platform with Worker secrets and managed scaling.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Cloudflare Workers is useful when you want globally distributed execution, rapid scaling, and no\ncontainer fleet to patch. It is a supported source deployment and does not use the\n`,_jsx(_components.code,{children:`composiohq/keyring:alpha`}),` container image.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Workers do not provide the same KMS workload identity as ECS or Cloud Run. Review how Keyring will\nauthenticate to your KMS and avoid long-lived cloud credentials where possible.`})}),`\n`,_jsx(Heading,{level:`2`,id:`platform-considerations`,children:`Platform considerations`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`ENCRYPTION_CONFIG`}),` must be inline JSON; Worker isolates cannot mount a configuration file.`]}),`\n`,_jsx(_components.li,{children:`File-based GCP credentials and Vault Kubernetes tokens are unsupported.`}),`\n`,_jsx(_components.li,{children:`AWS access can use encrypted Worker secrets, but ECS container credentials are unavailable.`}),`\n`,_jsx(_components.li,{children:`Your KMS, Vault, Composio JWKS, provider, and collector endpoints must be reachable from Workers.`}),`\n`,_jsx(_components.li,{children:`In-process key caches are isolate-local; eviction causes another safe KMS unwrap, not credential loss.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Workers cannot run a collector sidecar. Choose a remote collector or compatible public endpoint using\nthe `,_jsx(_components.a,{href:`/deployment/observability#direct-vendor-endpoint`,children:`telemetry delivery guide`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`1-configure-environments`,children:`1. Configure environments`}),`\n`,_jsxs(_components.p,{children:[`Use Node 24 and define staging and production separately in `,_jsx(_components.code,{children:`wrangler.jsonc`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`nvm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` use`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` 24`})]}),`\n`]})})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`jsonc`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`jsonc`,children:_jsxs(_components.code,{language:`jsonc`,numberOfLines:`11`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \"APP_ENV\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"production\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \"AUDIT_DURABILITY\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"required\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \"AUTH_AUDIENCE\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"\u003cCOMPOSIO_ORG_ID>\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \"AUTH_ISSUER\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"https://backend.composio.dev\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \"AUTH_JWT_ALGORITHMS\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"RS256\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \"AUTH_JWKS_URL\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"https://backend.composio.dev/.well-known/jwks.json\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \"LOG_LEVEL\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"info\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \"OTEL_COLLECTOR_URL\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"https://otel.example.com\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \"RUNTIME\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"cloudflare_worker\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Wrangler environment variables do not inherit from the top-level configuration. Include every required\nvalue in each deployed environment.`}),`\n`,_jsx(Heading,{level:`2`,id:`2-add-secrets`,children:`2. Add secrets`}),`\n`,_jsxs(_components.p,{children:[`Create a complete inline JSON value from the\n`,_jsx(_components.a,{href:`/configuration/kms_adapters`,children:`KMS adapter configuration`}),`, then store it as a Worker secret:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`pnpm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` wrangler`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` secret`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` put`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` ENCRYPTION_CONFIG`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --env`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` production`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`pnpm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` wrangler`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` secret`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` put`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` OTEL_COLLECTOR_HEADERS`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --env`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` production`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`If an AWS adapter uses environment credentials, also add `,_jsx(_components.code,{children:`AWS_ACCESS_KEY_ID`}),`,\n`,_jsx(_components.code,{children:`AWS_SECRET_ACCESS_KEY`}),`, and an optional `,_jsx(_components.code,{children:`AWS_SESSION_TOKEN`}),` as Worker secrets. Never place credentials\nor `,_jsx(_components.code,{children:`ENCRYPTION_CONFIG`}),` in plain Wrangler variables or source control.`]}),`\n`,_jsx(_components.p,{children:`Repeat the secret setup for staging; Worker secrets are environment-specific.`}),`\n`,_jsx(Heading,{level:`2`,id:`3-validate-and-deploy`,children:`3. Validate and deploy`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`nvm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` use`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` 24`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`pnpm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` run`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` cf-typegen`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`pnpm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` run`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` build:staging`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`pnpm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` run`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` build:production`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`pnpm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` run`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` deploy:staging`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`pnpm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` run`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` deploy:production`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`4-verify-and-connect`,children:`4. Verify and connect`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`curl`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --fail`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` https://keyring.example.workers.dev/healthz`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`curl`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --fail`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` https://keyring.example.workers.dev/transfer-keys`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Protect the production Worker with a source allowlist or equivalent Cloudflare edge control, then\n`,_jsx(_components.a,{href:`/deployment/overview#connect-keyring-to-composio`,children:`connect it to Composio`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`See Cloudflare’s `,_jsx(_components.a,{href:`https://developers.cloudflare.com/workers/configuration/secrets/`,children:`secrets documentation`}),`\nand `,_jsx(_components.a,{href:`https://developers.cloudflare.com/workers/wrangler/environments/`,children:`Wrangler environment behavior`}),`\nfor current platform details.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"github-light","dark":"github-dark"}},"config":{},"pageMetadata":{"title":"Deploy to Cloudflare Workers","description":"Run Keyring on a globally distributed serverless platform with Worker secrets and managed scaling.","icon":"cloud","href":"/deployment/cloudflare_workers"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Platform considerations","slug":"platform-considerations","depth":2,"children":[]},{"title":"1. Configure environments","slug":"1-configure-environments","depth":2,"children":[]},{"title":"2. Add secrets","slug":"2-add-secrets","depth":2,"children":[]},{"title":"3. Validate and deploy","slug":"3-validate-and-deploy","depth":2,"children":[]},{"title":"4. Verify and connect","slug":"4-verify-and-connect","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"composio-keyring","siteName":"Keyring","title":"Deploy to Cloudflare Workers - Keyring","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-28T08:05:36.908Z","originalFileLocation":"deployment/cloudflare_workers.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Run Keyring on a globally distributed serverless platform with Worker secrets and managed scaling.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Keyring\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Deploy to Cloudflare Workers - Keyring\">\u003cmeta data-mint-head property=\"og:description\" content=\"Run Keyring on a globally distributed serverless platform with Worker secrets and managed scaling.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Keyring\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://keyring.docs.composio.dev/deployment/cloudflare_workers\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://composio-keyring.mintlify.app/_mintlify/api/og/v2?division=Deploy\u0026amp;title=Deploy+to+Cloudflare+Workers\u0026amp;description=Run+Keyring+on+a+globally+distributed+serverless+platform+with+Worker+secrets+and+managed+scaling.\u0026amp;theme=075600894632bb055a3e0580\u0026amp;signature=083fbf8f57fb7f09bbd5ec55e105789af6dfb6017b295b5e6a7f034329f5cf19\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Deploy to Cloudflare Workers - Keyring\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Run Keyring on a globally distributed serverless platform with Worker secrets and managed scaling.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://composio-keyring.mintlify.app/_mintlify/api/og/v2?division=Deploy\u0026amp;title=Deploy+to+Cloudflare+Workers\u0026amp;description=Run+Keyring+on+a+globally+distributed+serverless+platform+with+Worker+secrets+and+managed+scaling.\u0026amp;theme=075600894632bb055a3e0580\u0026amp;signature=083fbf8f57fb7f09bbd5ec55e105789af6dfb6017b295b5e6a7f034329f5cf19\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Keyring\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#51A2FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://keyring.docs.composio.dev/deployment/cloudflare_workers\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/deployment/cloudflare_workers.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://keyring.docs.composio.dev/#organization\",\"name\":\"Keyring\",\"url\":\"https://keyring.docs.composio.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/composio-keyring/jZ8ZYloIv7UM-j2J/assets/brand/keyring_logo_light.svg?fit=max\u0026auto=format\u0026n=jZ8ZYloIv7UM-j2J\u0026q=85\u0026s=5912304b4a8d6b230dc5af515e3531a4\"}},{\"@type\":\"WebSite\",\"@id\":\"https://keyring.docs.composio.dev#website\",\"name\":\"Keyring\",\"url\":\"https://keyring.docs.composio.dev\",\"publisher\":{\"@id\":\"https://keyring.docs.composio.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://keyring.docs.composio.dev/deployment/cloudflare_workers#webpage\",\"url\":\"https://keyring.docs.composio.dev/deployment/cloudflare_workers\",\"name\":\"Deploy to Cloudflare Workers\",\"description\":\"Run Keyring on a globally distributed serverless platform with Worker secrets and managed scaling.\",\"dateModified\":\"2026-08-28T08:05:36.908Z\",\"isPartOf\":{\"@id\":\"https://keyring.docs.composio.dev#website\"},\"breadcrumb\":{\"@id\":\"https://keyring.docs.composio.dev/deployment/cloudflare_workers#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://keyring.docs.composio.dev/deployment/cloudflare_workers#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Deploy\",\"item\":\"https://keyring.docs.composio.dev/deployment/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deploy to Cloudflare Workers\",\"item\":\"https://keyring.docs.composio.dev/deployment/cloudflare_workers\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://keyring.docs.composio.dev/deployment/cloudflare_workers#article\",\"headline\":\"Deploy to Cloudflare Workers\",\"name\":\"Deploy to Cloudflare Workers\",\"description\":\"Run Keyring on a globally distributed serverless platform with Worker secrets and managed scaling.\",\"url\":\"https://keyring.docs.composio.dev/deployment/cloudflare_workers\",\"mainEntityOfPage\":{\"@id\":\"https://keyring.docs.composio.dev/deployment/cloudflare_workers#webpage\"},\"dateModified\":\"2026-08-28T08:05:36.908Z\",\"publisher\":{\"@id\":\"https://keyring.docs.composio.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://keyring.docs.composio.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Keyring\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Keyring","nav":{"global":null,"groups":[{"group":"Get started","pages":[{"title":"Composio Keyring","icon":"key","href":"/index"}]},{"group":"How Keyring works","pages":[{"title":"How Keyring works with Composio","icon":"workflow","href":"/concepts/how_it_works"},{"title":"Credential refresh and exchange","icon":"refresh-cw","href":"/concepts/credential_refresh"},{"title":"Encryption and key hierarchy","icon":"key-round","href":"/concepts/encryption_and_keys"}]},{"group":"Security","pages":[{"title":"Security model","icon":"shield-check","href":"/security/security_model"},{"title":"Network and request policy","icon":"network","href":"/security/network_and_policy"},{"title":"Origin allowlist","icon":"globe-lock","href":"/security/origin_allowlist/overview"},{"title":"Audit and observability","icon":"clipboard-check","href":"/security/audit_and_observability"}]},{"group":"Deploy","pages":[{"title":"Deployment overview","icon":"cloud","href":"/deployment/overview"},{"title":"Set up telemetry delivery","icon":"activity","href":"/deployment/observability"},{"title":"Deploy on AWS ECS","icon":"server","href":"/deployment/aws_ecs"},{"title":"Deploy on GCP Cloud Run","icon":"cloud","href":"/deployment/gcp_cloud_run"},{"title":"Deploy with Docker","icon":"container","href":"/deployment/docker"},{"title":"Deploy on Kubernetes","description":"Install the Node image with Helm, Kubernetes Secrets, probes, and hardened pod defaults.","icon":"boxes","href":"/deployment/kubernetes"},{"title":"Deploy to Cloudflare Workers","icon":"cloud","href":"/deployment/cloudflare_workers"},{"title":"Deploy to Vercel","description":"Run Keyring as a managed Vercel function with project secrets and automatic scaling.","icon":"triangle","href":"/deployment/vercel"}]},{"group":"Configure","pages":[{"title":"Runtime configuration","icon":"sliders-horizontal","href":"/configuration/runtime"},{"title":"Encryption configuration","icon":"key","href":"/configuration/encryption"},{"title":"KMS and Vault adapters","icon":"vault","href":"/configuration/kms_adapters"},{"title":"Helm values reference","icon":"ship","href":"/configuration/helm"}]},{"group":"Operate","pages":[{"title":"Health and troubleshooting","icon":"stethoscope","href":"/operations/health_and_troubleshooting"}]}]},"title":"Deploy to Cloudflare Workers - Keyring","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}