Run Keyring as a managed Vercel function with project secrets and automatic scaling.
Vercel is useful when your organization already standardizes on its managed functions and wants a
low-operations deployment with automatic scaling. It is a supported source deployment and does not use
the composiohq/keyring:alpha container image.
Vercel does not provide ECS- or Cloud Run-style KMS workload identity. Plan credential rotation
and test provider streaming, timeout, header, and payload limits before production use.
ENCRYPTION_CONFIG must be inline JSON. Mark it and all collector or provider credentials as sensitive
project variables.Vercel cannot run a collector sidecar. Choose a remote collector or compatible public endpoint using
the telemetry delivery guide.
Vercel does not expose an ECS-compatible credential endpoint. For AWS, provide temporary or rotated
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and optional AWS_SESSION_TOKEN values through Vercel
secrets.For GCP or Vault, use a supported non-file authentication method and an external rotation process. The
preferred ECS and Cloud Run deployments are a better fit when infrastructure identity is mandatory.
Vercel request size, response size, duration, and header limits apply around Keyring. Validate your
chosen plan against expected provider uploads, streaming responses, and slow token endpoints.Keyring remains stateless on Vercel. Logs go to the configured Vercel log destination, while traces,
metrics, and required audit events are exported to your OTLP collector.
{"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/vercel","slug":"/deployment/vercel","pageMetadata":{"title":"Deploy to Vercel","description":"Run Keyring as a managed Vercel function with project secrets and automatic scaling.","icon":"triangle","href":"/deployment/vercel"},"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 as a managed Vercel function with project secrets and automatic 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`,p:`p`,pre:`pre`,span:`span`,..._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:[`Vercel is useful when your organization already standardizes on its managed functions and wants a\nlow-operations deployment with automatic scaling. It is a supported source deployment and does not use\nthe `,_jsx(_components.code,{children:`composiohq/keyring:alpha`}),` container image.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Vercel does not provide ECS- or Cloud Run-style KMS workload identity. Plan credential rotation\nand test provider streaming, timeout, header, and payload limits before production use.`})}),`\n`,_jsx(Heading,{level:`2`,id:`1-configure-project-variables`,children:`1. Configure project variables`}),`\n`,_jsx(_components.p,{children:`Set these values separately for each Vercel environment:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,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:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`APP_ENV`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`production`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`RUNTIME`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`vercel`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`AUTH_AUDIENCE`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=\u003c`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`COMPOSIO_ORG_ID`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`AUTH_ISSUER`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`https://backend.composio.dev`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`AUTH_JWT_ALGORITHMS`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`RS256`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`AUTH_JWKS_URL`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`https://backend.composio.dev/.well-known/jwks.json`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`AUDIT_DURABILITY`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`required`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`OTEL_COLLECTOR_URL`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`https://otel.example.com`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`OTEL_COLLECTOR_HEADERS`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`Authorization`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`Bearer%20replace-me`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`LOG_LEVEL`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`info`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`ENCRYPTION_CONFIG`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`\"credential\"`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:`:`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`{`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:`...`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`}`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`,`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`\"authorization_gate\"`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:`:`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`{`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:`...`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`}`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`,`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`\"secret_transfer\"`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:`:`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`{`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:`...`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`}`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`}`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ENCRYPTION_CONFIG`}),` must be inline JSON. Mark it and all collector or provider credentials as sensitive\nproject variables.`]}),`\n`,_jsxs(_components.p,{children:[`Vercel 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:`2-choose-kms-authentication`,children:`2. Choose KMS authentication`}),`\n`,_jsxs(_components.p,{children:[`Vercel does not expose an ECS-compatible credential endpoint. For AWS, provide temporary or rotated\n`,_jsx(_components.code,{children:`AWS_ACCESS_KEY_ID`}),`, `,_jsx(_components.code,{children:`AWS_SECRET_ACCESS_KEY`}),`, and optional `,_jsx(_components.code,{children:`AWS_SESSION_TOKEN`}),` values through Vercel\nsecrets.`]}),`\n`,_jsx(_components.p,{children:`For GCP or Vault, use a supported non-file authentication method and an external rotation process. The\npreferred ECS and Cloud Run deployments are a better fit when infrastructure identity is mandatory.`}),`\n`,_jsx(Heading,{level:`2`,id:`3-deploy-with-node-24`,children:`3. Deploy with Node 24`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,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:`3`,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:`vercel`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` deploy`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`vercel`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` deploy`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --prod`})]}),`\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.vercel.app/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.vercel.app/transfer-keys`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Restrict the production endpoint to the `,_jsx(_components.a,{href:`/deployment/overview#network-access`,children:`Composio egress addresses`}),`\nusing your Vercel network controls or an approved upstream edge, then\n`,_jsx(_components.a,{href:`/deployment/overview#connect-keyring-to-composio`,children:`connect it to Composio`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`platform-limits`,children:`Platform limits`}),`\n`,_jsx(_components.p,{children:`Vercel request size, response size, duration, and header limits apply around Keyring. Validate your\nchosen plan against expected provider uploads, streaming responses, and slow token endpoints.`}),`\n`,_jsx(_components.p,{children:`Keyring remains stateless on Vercel. Logs go to the configured Vercel log destination, while traces,\nmetrics, and required audit events are exported to your OTLP collector.`})]})}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 Vercel","description":"Run Keyring as a managed Vercel function with project secrets and automatic scaling.","icon":"triangle","href":"/deployment/vercel"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"1. Configure project variables","slug":"1-configure-project-variables","depth":2,"children":[]},{"title":"2. Choose KMS authentication","slug":"2-choose-kms-authentication","depth":2,"children":[]},{"title":"3. Deploy with Node 24","slug":"3-deploy-with-node-24","depth":2,"children":[]},{"title":"4. Verify and connect","slug":"4-verify-and-connect","depth":2,"children":[]},{"title":"Platform limits","slug":"platform-limits","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"composio-keyring","siteName":"Keyring","title":"Deploy to Vercel - Keyring","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-28T08:05:36.913Z","originalFileLocation":"deployment/vercel.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 as a managed Vercel function with project secrets and automatic 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 Vercel - Keyring\">\u003cmeta data-mint-head property=\"og:description\" content=\"Run Keyring as a managed Vercel function with project secrets and automatic 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/vercel\">\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+Vercel\u0026amp;description=Run+Keyring+as+a+managed+Vercel+function+with+project+secrets+and+automatic+scaling.\u0026amp;theme=075600894632bb055a3e0580\u0026amp;signature=e3ea1d3bee1f7aa2205b3eedeefe3a2fbbbdb1ac9e25a270da5486bf4a33bb51\">\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 Vercel - Keyring\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Run Keyring as a managed Vercel function with project secrets and automatic scaling.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://composio-keyring.mintlify.app/_mintlify/api/og/v2?division=Deploy\u0026amp;title=Deploy+to+Vercel\u0026amp;description=Run+Keyring+as+a+managed+Vercel+function+with+project+secrets+and+automatic+scaling.\u0026amp;theme=075600894632bb055a3e0580\u0026amp;signature=e3ea1d3bee1f7aa2205b3eedeefe3a2fbbbdb1ac9e25a270da5486bf4a33bb51\">\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/vercel\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/deployment/vercel.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/vercel#webpage\",\"url\":\"https://keyring.docs.composio.dev/deployment/vercel\",\"name\":\"Deploy to Vercel\",\"description\":\"Run Keyring as a managed Vercel function with project secrets and automatic scaling.\",\"dateModified\":\"2026-08-28T08:05:36.913Z\",\"isPartOf\":{\"@id\":\"https://keyring.docs.composio.dev#website\"},\"breadcrumb\":{\"@id\":\"https://keyring.docs.composio.dev/deployment/vercel#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://keyring.docs.composio.dev/deployment/vercel#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Deploy\",\"item\":\"https://keyring.docs.composio.dev/deployment/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deploy to Vercel\",\"item\":\"https://keyring.docs.composio.dev/deployment/vercel\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://keyring.docs.composio.dev/deployment/vercel#article\",\"headline\":\"Deploy to Vercel\",\"name\":\"Deploy to Vercel\",\"description\":\"Run Keyring as a managed Vercel function with project secrets and automatic scaling.\",\"url\":\"https://keyring.docs.composio.dev/deployment/vercel\",\"mainEntityOfPage\":{\"@id\":\"https://keyring.docs.composio.dev/deployment/vercel#webpage\"},\"dateModified\":\"2026-08-28T08:05:36.913Z\",\"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","icon":"boxes","href":"/deployment/kubernetes"},{"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"},{"title":"Deploy to Vercel","icon":"triangle","href":"/deployment/vercel"}]},{"group":"Configure","pages":[{"title":"Runtime configuration","description":"Reference for every environment variable, its default, validation, and runtime scope.","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 Vercel - Keyring","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}