Select the prisma-examples repository you forked in Step 1 to import.
From the Framework preset dropdown, select Next.js.
In the Root directory field, click Edit.
Select the typescript > rest-nextjs-api-routes directory.
Click Continue.
Open the Build and Output Settings and toggle the build command’s Override switch to on.
Enter yarn prisma db push && yarn next build as the Build command.
Click Deploy.Your deployment will fail until you integrate CockroachDB in the next step, so you can leave this screen without waiting for it to finish.
Navigate to the CockroachDB page of Vercel’s integration marketplace.
Click Add Integration.
Select your Vercel account and click Continue.
Select the project you just created and click Continue.
Accept the permissions and click Add Integration.A window will pop up prompting you to log in to CockroachDB Cloud if you haven’t already.
In the CockroachDB Cloud pop-up window, select the organization in which you want to create a new CockroachDB Standard cluster.
Click Create.After a few seconds, your cluster will be created and the pop-up window will close automatically. Once this is done, your Vercel project will have the DATABASE_URL environment variable automatically populated with the connection string for your new cluster.
Navigate to the Overview page for your Vercel project.
Select the Deployments tab.
Click Redeploy.
Click Redeploy again from the pop-up dialog.Your project will be deployed in a few seconds. You can view the final product by clicking on the Domain link on your project’s Overview page.
On the Cloud & Regions page, select a cloud provider (GCP or AWS).
In the Regions section, select a region for the cluster. Refer to CockroachDB Cloud Regions for the regions where CockroachDB Standard clusters can be deployed. To create a multi-region cluster, click Add region and select additional regions.
Click Next: Capacity.
On the Capacity page, keep the Provisioned capacity at the default value of 2 vCPUs.Click Next: Finalize.
On the Finalize page, name your cluster. If an active free trial is listed in the right pane, you will not need to add a payment method, though you will need to do this by the end of the trial to maintain your organization’s clusters.Click Create cluster.Your cluster will be created in a few seconds and the Create SQL user dialog will display.
After the cluster is created, the Connection info window appears. Click the Connection string tab and copy the connection string to a secure location. You will use this connection string to connect to CockroachDB later in the tutorial.
The connection string is pre-populated with your username, cluster name, and other details, including your password. Your password, in particular, will be provided only once. Save it in a secure place (we recommend a password manager) to connect to your cluster in the future. If you forget your password, you can reset it by going to the SQL Users page for the cluster, found at https://cockroachlabs.cloud/cluster/<CLUSTER ID>/users.
Save the connection string you obtained earlier from the CockroachDB Cloud Console to the DATABASE_URL environment variable in an .env file in your project:
$ echo "DATABASE_URL=<connection-string" >> .env
Prisma loads the variables defined in .env to the project environment. By default, Prisma uses the DATABASE_URL environment variable as the connection string to the database.
Run Prisma Migrate to initialize the database with the schema defined in prisma/prisma.schema.
$ prisma migrate dev --name init
You should see the following output:
Your database is now in sync with your schema.✔ Generated Prisma Client (3.11.0 | library) to ./node_modules/@prisma/client in 87ms
This command also initializes Prisma Client to communicate with your CockroachDB cluster, based on the configuration in the prisma/schema.prisma file.
(Optional) Run the app server locally to preview your site:
$ npm run dev
You should see the following output:
ready - started server on 0.0.0.0:3000, url: http://localhost:3000
Run the vercel command to start deploying the app:
$ vercel deploy --confirm
You will be asked to sign into your Vercel account. When you authenticate your credentials, you should see the following message:
> Success! GitHub authentication complete ...
The --confirm flag instructs Vercel to deploy the app to the example-app-typescript-vercel Vercel project, using the default settings:
🔗 Linked to username/example-app-typescript-vercel (created .vercel and added it to .gitignore)🔍 Inspect: https://vercel.com/username/example-app-typescript-vercel/123456789 [1s]✅ Production: https://example-app-typescript-vercel-username.vercel.app [copied to clipboard] [47s]📝 Deployed to production. Run `vercel --prod` to overwrite later (https://vercel.link/2F).💡 To change the domain or build command, go to https://vercel.com/ericharmeling/example-app-typescript-vercel/settings
Follow the links provided to view and manage your deployed application.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"CockroachDB","colors":{"primary":"#9059FF","light":"#9059FF","dark":"#9059FF"},"logo":{"light":"https://mintcdn.com/cockroachlabs/4WvUnbVuGZfqM4kW/images/CockroachLabs_Wordmark_Black.png?fit=max\u0026auto=format\u0026n=4WvUnbVuGZfqM4kW\u0026q=85\u0026s=54ccae625c9986bf1df8ddc7b2c571f0","dark":"https://mintcdn.com/cockroachlabs/4WvUnbVuGZfqM4kW/images/CockroachLabs_Wordmark_White.png?fit=max\u0026auto=format\u0026n=4WvUnbVuGZfqM4kW\u0026q=85\u0026s=0dd9b66973a1c7d3dd72aa67b6094efe","href":"https://www.cockroachlabs.com/"},"favicon":{"light":"https://mintcdn.com/cockroachlabs/2yihO7vMXnL0G_07/images/favicon.svg?fit=max\u0026auto=format\u0026n=2yihO7vMXnL0G_07\u0026q=85\u0026s=01f9aa59c9f275e1f35cd424a27d2551","dark":"https://mintcdn.com/cockroachlabs/2yihO7vMXnL0G_07/images/favicon.svg?fit=max\u0026auto=format\u0026n=2yihO7vMXnL0G_07\u0026q=85\u0026s=01f9aa59c9f275e1f35cd424a27d2551"},"api":{"examples":{"defaults":"required","languages":["curl"]}},"appearance":{"default":"light"},"navbar":{"primary":{"type":"button","label":"Get started free","href":"https://cockroachlabs.cloud/signup?referralId=cc_nav_global\u0026_ga=2.242886210.1147139380.1759903632-41552699.1759903632"}},"footer":{"socials":{"youtube":"https://www.youtube.com/@cockroachdb","x":"https://x.com/CockroachDB","linkedin":"https://www.linkedin.com/company/cockroach-labs/mycompany/verification","instagram":"https://www.instagram.com/cockroachdb"},"links":[{"header":"Product","items":[{"label":"CockroachDB","href":"https://www.cockroachlabs.com/product"},{"label":"CockroachDB Cloud","href":"https://www.cockroachlabs.com/product/cockroachcloud"},{"label":"Compare","href":"https://www.cockroachlabs.com/compare"},{"label":"Pricing","href":"https://www.cockroachlabs.com/pricing"},{"label":"Get CockroachDB","href":"https://www.cockroachlabs.com/get-started-cockroachdb"},{"label":"Sign In","href":"https://cockroachlabs.cloud/"}]},{"header":"Resources","items":[{"label":"Guides","href":"https://resources.cockroachlabs.com/guides"},{"label":"Webinars","href":"https://www.cockroachlabs.com/community/webinars"},{"label":"Videos","href":"https://www.cockroachlabs.com/resources/video"},{"label":"Architecture Overview","href":"https://www.cockroachlabs.com/docs/stable/architecture/overview"},{"label":"FAQ","href":"https://www.cockroachlabs.com/docs/stable/frequently-asked-questions"},{"label":"Security","href":"https://www.cockroachlabs.com/security"}]},{"header":"Learn \u0026 Support","items":[{"label":"Docs","href":"https://www.cockroachlabs.com/docs"},{"label":"University","href":"https://learn.cockroachlabs.com/"},{"label":"Developers","href":"https://www.cockroachlabs.com/developers"},{"label":"Forum","href":"https://forum.cockroachlabs.com/"},{"label":"Slack","href":"https://cockroa.ch/slack"},{"label":"Support Portal","href":"https://support.cockroachlabs.com/hc/en-us"},{"label":"Contact Us","href":"https://www.cockroachlabs.com/contact"}]},{"header":"Company","items":[{"label":"About","href":"https://www.cockroachlabs.com/about"},{"label":"Blog","href":"https://www.cockroachlabs.com/blog"},{"label":"Careers","href":"https://www.cockroachlabs.com/careers"},{"label":"Customers","href":"https://www.cockroachlabs.com/customers"},{"label":"News","href":"https://www.cockroachlabs.com/press"},{"label":"Privacy","href":"https://www.cockroachlabs.com/privacy"},{"label":"Terms of Use","href":"https://www.cockroachlabs.com/website-terms-of-use"}]}]},"fonts":{"heading":{"family":"Poppins"},"body":{"family":"Open Sans"}},"styling":{"eyebrows":"breadcrumbs","codeblocks":{"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}},"latex":true},"integrations":{"gtm":{"tagId":"GTM-NR8LC4"}},"errors":{"404":{"redirect":false,"title":"Page not found","description":"The page you're looking for doesn't exist. [Return to docs home](/index.html)."}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"interaction":{"drilldown":false},"navigation":{"global":{"anchors":[{"anchor":"University","icon":"graduation-cap","href":"https://learn.cockroachlabs.com/"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"cockroachlabs","hasAudioNarration":false,"actualSubdomain":"cockroachlabs","customDomains":["docs.cockroachlabs.com"],"gitSource":{"type":"github","owner":"cockroachlabs","repo":"docs","deployBranch":"main","contentDirectory":"cockroachlabs-preview-main","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af4bb21d7a808c67a4ac795","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"CockroachDB","count":6951},{"language":"default","tag":"Docs","count":3217},{"language":"default","tag":"SQL","count":2566},{"language":"default","tag":"Statements","count":1714},{"language":"default","tag":"Self-Hosted Deployments","count":1457},{"language":"default","tag":"Reference","count":774},{"language":"default","tag":"Cloud Deployments","count":616},{"language":"default","tag":"Endpoints","count":528},{"language":"default","tag":"Cloud API Reference","count":518},{"language":"default","tag":"Get Started","count":441}],"searchSettings":{"isFiltersEnabled":true,"showContentSnippets":true,"fullPageSearch":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"rbac-expansion","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":"full-page-search","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":"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":"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":"turbopuffer-dual-write","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},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"styles.css","content":":root{--inline-code-bg-light: rgb(var(--gray-200) / 0.92);--inline-code-bg-dark: rgb(255 255 255 / 0.08)}.prose :not(pre)>code{background-color:var(--inline-code-bg-light)!important}.dark .prose :not(pre)>code{background-color:var(--inline-code-bg-dark)!important}@media (min-width: 1536px){#navbar>.max-w-8xl,[class*=\"peer-[.is-not-custom]:peer-[.is-not-center]:max-w-8xl\"]{width:100%!important;max-width:none!important}}#navigation-items{display:flex;flex-direction:column}#navigation-items>ul:not(.sidebar-group){order:1;margin-top:1.5rem}.crdb-metrics-table table{table-layout:fixed!important;width:100%!important;min-width:0!important;max-width:100%!important;border-collapse:collapse}.crdb-metrics-table table td,.crdb-metrics-table table th{min-width:0!important;overflow-wrap:anywhere;word-break:break-word}.crdb-fixed-table table{table-layout:fixed!important;width:100%!important;min-width:0!important;max-width:100%!important;border-collapse:collapse}.crdb-fixed-table table td,.crdb-fixed-table table th{min-width:0!important;overflow-wrap:anywhere;word-break:break-word}.bg-cover{background-size:cover;background-repeat:no-repeat;background-position:center center}.bg-cover__bg-3-1{background-image:url(\"https://cockroach-labs-docs.imgix.net/bg-3-1.png?auto=format,compress\u0026w=1200\u0026q=40\")}.home-header{border-radius:0.5rem;margin-bottom:2rem!important;padding:2rem}.card{border:1px solid #e5e7eb;border-radius:0.75rem;background-color:white}.dark .card{background-color:#0d1117;border-color:rgba(255, 255, 255, 0.1)}.card-link{text-decoration:none!important;overflow:hidden}.card-link:hover{outline:1px solid rgba(105, 51, 255, 0.55);outline-offset:-1px}.card-link,.card-link:hover{transform:none!important;box-shadow:none!important}.card-link a,.card-link a:hover,.card-link h3,.card-link h3:hover,.card-link p,.card-link p:hover{border:0!important;text-decoration:none!important;transform:none!important}.card-link a{display:block;width:100%}.card-link h3{font-size:1rem!important;font-weight:600!important}.card-body{padding:1.5rem}.landing-column-title{margin-bottom:1rem}.overline{text-transform:uppercase;letter-spacing:0.05em}.btn-redirect{display:inline-flex;align-items:center;gap:0.5rem;padding:0.75rem 1.5rem;border:2px solid #e5e7eb;border-radius:0.5rem;text-decoration:none;transition:border-color 0.2s}.btn-redirect:hover{border-color:#6933ff}.btn-block{display:flex;width:100%;justify-content:center}.dark .btn-redirect{border-color:rgba(255, 255, 255, 0.1)}.article-section-title{font-size:1.25rem!important}.article-lists h3{font-size:0.875rem!important;font-weight:600!important;text-transform:uppercase;letter-spacing:0.05em;color:#6b7280!important}.dark .article-lists h3{color:#9ca3af!important}.article-lists ul{font-size:0.875rem}.shadow{box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15)}.bg-dark-wing{background-color:#152849;border-radius:0.5rem}.text-ice-temple{color:#1bf8ec!important;display:inline-flex;align-items:center;gap:0.375rem}.text-ice-temple img{display:inline-block;margin:0}.bg-dark-wing h2{font-size:clamp(1.25rem, 1rem + 1.5vw, 1.75rem)!important}@media (max-width: 576px){.card-body.bg-dark-wing{padding:1.25rem!important}}.text-decoration-none{text-decoration:none!important}.text-muted{color:#6b7280!important}.card-link .card-desc{font-size:0.9375rem!important;font-weight:400!important;line-height:1.5!important;text-align:left!important;color:#4b5563!important;width:100%;margin-top:0.5rem}.dark .card-link .card-desc{color:#9ca3af!important}.report-tag{display:inline-block;padding:0.25rem 0.75rem;border-radius:0.25rem;background-color:rgba(84, 42, 189, 0.08);color:#542abd}.dark .report-tag{background-color:rgba(84, 42, 189, 0.3);color:#b39dff}.resilience-report-img{background-image:url(\"/images/state-resilience.png\");background-size:cover;background-position:center;min-height:150px;border-radius:0.5rem}.row{display:flex!important;flex-wrap:wrap;margin-left:-0.75rem;margin-right:-0.75rem}.display-flex{display:flex!important}.col-lg-4{flex:0 0 auto;width:100%;padding-left:0.75rem;padding-right:0.75rem}@media (min-width: 992px){.col-lg-4{width:33.333333%!important}}.col-lg-3,.col-sm-6,.col-xs-12{flex:0 0 auto;width:100%!important;padding-left:0.75rem;padding-right:0.75rem}@media (min-width: 992px){.col-lg-3{width:25%!important}}@media (min-width: 576px){.col-sm-6{width:50%!important}}.col-12{width:100%!important}.col-lg-12{width:100%;padding-left:0.75rem;padding-right:0.75rem}@media (min-width: 992px){.col-lg-12{width:100%!important}}.col-md-4,.col-md-8{flex:0 0 auto;width:100%;padding-left:0.75rem;padding-right:0.75rem}@media (min-width: 768px){.col-md-4{width:33.333333%!important}.col-md-8{width:66.666667%!important}}.h-100{height:100%}.d-flex{display:flex}.flex-column{flex-direction:column}.mb-3{margin-bottom:1rem!important}.mb-5{margin-bottom:3rem!important}.pb-5{padding-bottom:3rem!important}.mb-xl-5{margin-bottom:3rem!important}.mt-auto{margin-top:auto!important}.mt-0{margin-top:0!important}.mt-2{margin-top:0.5rem!important}.mt-3{margin-top:1rem!important}.mt-5:not(.code-block){margin-top:3rem!important}.code-block.mb-8{margin-bottom:calc(var(--spacing) * 5)}.pt-5{padding-top:3rem!important}.m-0{margin:0!important}.ml-2{margin-left:0.5rem!important}.mb-0{margin-bottom:0!important}.mb-2{margin-bottom:0.5rem!important}.mb-4{margin-bottom:1.5rem!important}.p-2{padding:0.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.ml-1{margin-left:0.25rem!important}.mr-auto{margin-right:auto!important}.justify-content-center{justify-content:center!important}.align-items-center{align-items:center!important}@media (min-width: 1200px){.p-xl-5{padding:3rem!important}}.mx-0{margin-left:0!important;margin-right:0!important}.text-center{text-align:center}.text-white{color:white!important}.text-black{color:black!important}.dark .text-black{color:white!important}.container{width:100%;max-width:1200px;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}.card-header-overlap-text{position:relative}@media (min-width: 768px){.p-md-5{padding:3rem!important}}@media (min-width: 992px){.d-lg-flex{display:flex!important}.mb-lg-0{margin-bottom:0!important}}.prose table{border-collapse:collapse!important}.prose table th,.prose table td{border:1px solid rgb(var(--gray-200))!important}.dark .prose table th,.dark .prose table td{border-color:rgb(var(--gray-700) / 0.5)!important}.prose table th{padding:0.571429em;font-weight:600;vertical-align:bottom;color:var(--tw-prose-headings);text-align:left}.prose table th.center-align{text-align:center}.prose table td{padding:0.571429em;vertical-align:baseline}[data-component-part=\"accordion-description\"]{font-size:0.875rem!important}.accordion.mb-3{margin-bottom:0.25rem!important}@media (max-width: 991.98px){[id^=\"kapa-widget-container\"] button{width:36px!important;height:36px!important;min-width:36px!important;padding:0!important;font-size:0!important}[id^=\"kapa-widget-container\"] button svg{width:18px!important;height:18px!important}[id^=\"kapa-widget-container\"] button span{display:none!important}}table.crdb-fixed-table{table-layout:fixed!important;min-width:0!important;width:100%}table.crdb-fixed-table td,table.crdb-fixed-table th{min-width:0!important;overflow-wrap:break-word;word-break:normal}.sql-grammar svg .line{fill:none;stroke:#262626}.sql-grammar svg .bold-line{stroke:#0A0A0A;shape-rendering:crispEdges;stroke-width:2}.sql-grammar svg .thin-line{stroke:#0F0F0F;shape-rendering:crispEdges}.sql-grammar svg .filled{fill:#262626;stroke:none}.sql-grammar svg text.terminal{font-family:Verdana, Sans-serif;font-size:12px;fill:#0A0A0A;font-weight:bold}.sql-grammar svg text.nonterminal{font-family:Verdana, Sans-serif;font-size:12px;fill:#0055FF}.sql-grammar svg text.regexp{font-family:Verdana, Sans-serif;font-size:12px;fill:#0F0F0F}.sql-grammar svg rect,.sql-grammar svg circle,.sql-grammar svg polygon{fill:#262626;stroke:#262626}.sql-grammar svg rect.terminal{fill:#ffffff;stroke:#262626}.sql-grammar svg rect.nonterminal{fill:#FFFFFF;stroke:#262626}.sql-grammar svg rect.text{fill:none;stroke:none}.sql-grammar svg polygon.regexp{fill:#FFFFFF;stroke:#262626}.sql-grammar svg{background-color:#ffffff}.sql-grammar a[name]::before{content:'';display:block;height:80px;margin:-80px 0 0}.sql-grammar a[name]:focus{outline:0}pre[language=\"sql\"][data-crdb-prompt-stripped] code::before{content:\"> \";color:#94e2d5;user-select:none}.mark-yes{color:#008a5e;font-weight:600}.dark .mark-yes{color:#3ddc97}"},{"filePath":"collapse-nav.css","content":"html:not(.crl-nav-off) [data-layout-item=\"sidebar\"] li[data-title]:not([data-active]):not([data-crl-keep])>button+ul,html:not(.crl-nav-off) [data-layout-item=\"mobile-nav\"] li[data-title]:not([data-active]):not([data-crl-keep])>button+ul{display:none}html:not(.crl-nav-off) [data-layout-item=\"sidebar\"] li[data-title]:not([data-active]):not([data-crl-keep])>button svg,html:not(.crl-nav-off) [data-layout-item=\"mobile-nav\"] li[data-title]:not([data-active]):not([data-crl-keep])>button svg{rotate:none!important;transform:none!important}"}],"page":{"pagePath":"docs/v24.1/deploy-app-vercel","slug":"/docs/v24.1/deploy-app-vercel","pageMetadata":{"title":"Deploy a Web App Built on CockroachDB with Vercel","sidebarTitle":"Vercel","old_description":"Learn how to build with Vercel and CockroachDB Standard.","canonical":"https://docs.cockroachlabs.com/docs/stable/deploy-app-vercel","description":null,"href":"/docs/v24.1/deploy-app-vercel"},"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`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Note,Tab,Tabs}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`This tutorial shows you how to use `,_jsx(_components.a,{href:`https://vercel.com/`,children:`Vercel`}),` to deploy a web application built with `,_jsx(_components.a,{href:`https://nextjs.org/`,children:`Next.js`}),`, `,_jsx(_components.a,{href:`https://expressjs.com/`,children:`Express`}),`, `,_jsx(_components.a,{href:`https://www.prisma.io/`,children:`Prisma`}),`, and CockroachDB Standard.`]}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Use the browser`,id:`use-the-browser`,\"data-child-heading-ids\":`[\"before-you-begin\",\"step-1-get-the-code\",\"step-2-create-a-vercel-project\",\"step-3-integrate-cockroachdb\",\"step-3-deploy-the-application\"]`,children:[_jsx(Heading,{level:`2`,id:`before-you-begin`,children:`Before you begin`}),_jsx(_components.p,{children:`Before starting the tutorial, do the following:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Create a `,_jsx(_components.a,{href:`https://cockroachlabs.cloud/signup?referralId=docs_vercel`,children:`CockroachDB Cloud`}),` account.`]}),`\n`,_jsxs(_components.li,{children:[`Create a `,_jsx(_components.a,{href:`https://vercel.com/signup`,children:`Vercel`}),` account.`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`step-1-get-the-code`,children:`Step 1. Get the code`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Create a `,_jsx(_components.a,{href:`https://github.com/`,children:`GitHub`}),` account if you haven’t already.`]}),`\n`,_jsxs(_components.li,{children:[`In GitHub, `,_jsx(_components.a,{href:`https://docs.github.com/get-started/quickstart/fork-a-repo#forking-a-repository`,children:`create your own fork`}),` of CockroachDB’s `,_jsxs(_components.a,{href:`https://github.com/cockroachdb/prisma-examples`,children:[_jsx(_components.code,{children:`prisma-examples`}),` repo`]}),`.`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`step-2-create-a-vercel-project`,children:`Step 2. Create a Vercel project`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`From the `,_jsx(_components.a,{href:`https://vercel.com/dashboard`,children:`Vercel dashboard`}),`, click `,_jsx(_components.strong,{children:`Add new…`}),` > `,_jsx(_components.strong,{children:`Project`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Select the `,_jsx(_components.code,{children:`prisma-examples`}),` repository you forked in `,_jsx(_components.a,{href:`#step-1-get-the-code`,children:`Step 1`}),` to import.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`From the `,_jsx(_components.strong,{children:`Framework preset`}),` dropdown, select `,_jsx(_components.strong,{children:`Next.js`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In the `,_jsx(_components.strong,{children:`Root directory`}),` field, click `,_jsx(_components.strong,{children:`Edit`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Select the `,_jsx(_components.strong,{children:`typescript`}),` > `,_jsx(_components.strong,{children:`rest-nextjs-api-routes`}),` directory.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Continue`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Open the `,_jsx(_components.strong,{children:`Build and Output Settings`}),` and toggle the build command’s `,_jsx(_components.strong,{children:`Override`}),` switch to on.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Enter `,_jsx(_components.code,{children:`yarn prisma db push \u0026\u0026 yarn next build`}),` as the `,_jsx(_components.strong,{children:`Build command`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Deploy`}),`.`]}),`\n`,_jsx(_components.p,{children:`Your deployment will fail until you integrate CockroachDB in the next step, so you can leave this screen without waiting for it to finish.`}),`\n`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`step-3-integrate-cockroachdb`,children:`Step 3. Integrate CockroachDB`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Navigate to the `,_jsx(_components.a,{href:`https://vercel.com/integrations/cockroachdb`,children:`CockroachDB page`}),` of Vercel’s integration marketplace.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Add Integration`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Select your Vercel account and click `,_jsx(_components.strong,{children:`Continue`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Select the project you just created and click `,_jsx(_components.strong,{children:`Continue`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Accept the permissions and click `,_jsx(_components.strong,{children:`Add Integration`}),`.`]}),`\n`,_jsx(_components.p,{children:`A window will pop up prompting you to log in to CockroachDB Cloud if you haven’t already.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`In the CockroachDB Cloud pop-up window, select the organization in which you want to create a new CockroachDB Standard cluster.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Create`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`After a few seconds, your cluster will be created and the pop-up window will close automatically. Once this is done, your Vercel project will have the `,_jsx(_components.code,{children:`DATABASE_URL`}),` environment variable automatically populated with the connection string for your new cluster.`]}),`\n`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`step-3-deploy-the-application`,children:`Step 3. Deploy the application`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Navigate to the `,_jsx(_components.strong,{children:`Overview`}),` page for your Vercel project.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Select the `,_jsx(_components.strong,{children:`Deployments`}),` tab.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Redeploy`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Redeploy`}),` again from the pop-up dialog.`]}),`\n`,_jsxs(_components.p,{children:[`Your project will be deployed in a few seconds. You can view the final product by clicking on the `,_jsx(_components.strong,{children:`Domain`}),` link on your project’s `,_jsx(_components.strong,{children:`Overview`}),` page.`]}),`\n`]}),`\n`]})]}),_jsxs(Tab,{title:`Use the command line`,id:`use-the-command-line`,\"data-child-heading-ids\":`[\"before-you-begin-2\",\"step-1-create-a-cockroachdb-standard-cluster\",\"step-2-get-the-code\",\"step-3-initialize-the-database\",\"step-4-deploy-the-application\"]`,children:[_jsx(Heading,{level:`2`,id:`before-you-begin-2`,children:`Before you begin`}),_jsx(_components.p,{children:`Before starting the tutorial, do the following:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Create a `,_jsx(_components.a,{href:`https://cockroachlabs.cloud/signup?referralId=docs_vercel`,children:`CockroachDB Cloud`}),` account.`]}),`\n`,_jsxs(_components.li,{children:[`Create a `,_jsx(_components.a,{href:`https://vercel.com/signup`,children:`Vercel`}),` account.`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`step-1-create-a-cockroachdb-standard-cluster`,children:`Step 1. Create a CockroachDB Standard cluster`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/docs/cockroachcloud/create-an-account`,children:`Create a CockroachDB Cloud account`}),`. If this is your first CockroachDB Cloud organization, it will be credited with $400 in `,_jsx(_components.a,{href:`/docs/cockroachcloud/free-trial`,children:`free trial credits`}),` to get you started.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Get Started`}),` page, click `,_jsx(_components.strong,{children:`Create cluster`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Select a plan`}),` page, select `,_jsx(_components.strong,{children:`Standard`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Cloud \u0026 Regions`}),` page, select a cloud provider (GCP or AWS).`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In the `,_jsx(_components.strong,{children:`Regions`}),` section, select a region for the cluster. Refer to `,_jsx(_components.a,{href:`/docs/cockroachcloud/regions`,children:`CockroachDB Cloud Regions`}),` for the regions where CockroachDB Standard clusters can be deployed. To create a multi-region cluster, click `,_jsx(_components.strong,{children:`Add region`}),` and select additional regions.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Next: Capacity`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Capacity`}),` page, keep the `,_jsx(_components.a,{href:`/docs/cockroachcloud/plan-your-cluster`,children:_jsx(_components.strong,{children:`Provisioned capacity`})}),` at the default value of 2 vCPUs.`]}),`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Next: Finalize`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Finalize`}),` page, name your cluster. If an active free trial is listed in the right pane, you will not need to add a payment method, though you will need to do this by the `,_jsx(_components.a,{href:`/docs/cockroachcloud/free-trial#add-payment-methods`,children:`end of the trial`}),` to maintain your organization’s clusters.`]}),`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Create cluster`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Your cluster will be created in a few seconds and the `,_jsx(_components.strong,{children:`Create SQL user`}),` dialog will display.`]}),`\n`]}),`\n`]}),_jsx(`a`,{id:`connection-string`}),_jsxs(_components.p,{children:[`After the cluster is created, the `,_jsx(_components.strong,{children:`Connection info`}),` window appears. Click the `,_jsx(_components.strong,{children:`Connection string`}),` tab and copy the connection string to a secure location. You will use this connection string to connect to CockroachDB later in the tutorial.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`The connection string is pre-populated with your username, cluster name, and other details, including your password. Your password, in particular, will be provided only once. Save it in a secure place (we recommend a password manager) to connect to your cluster in the future. If you forget your password, you can reset it by going to the `,_jsx(_components.strong,{children:`SQL Users`}),` page for the cluster, found at `,_jsx(_components.code,{children:`https://cockroachlabs.cloud/cluster/\u003cCLUSTER ID>/users`}),`.`]})}),_jsx(Heading,{level:`2`,id:`step-2-get-the-code`,children:`Step 2. Get the code`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Clone the `,_jsx(_components.code,{children:`cockroachdb`}),` fork of the `,_jsx(_components.code,{children:`prisma-examples`}),` repo:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-mocha catppuccin-mocha`,style:{backgroundColor:`#1e1e2e`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#cdd6f4`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#89B4FA`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`$`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` git`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` clone`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` git@github.com:cockroachdb/prisma-examples.git`})]}),`\n`]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Navigate to the `,_jsx(_components.code,{children:`rest-nextjs-api-routes`}),` directory:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-mocha catppuccin-mocha`,style:{backgroundColor:`#1e1e2e`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#cdd6f4`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#89B4FA`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`$`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` cd`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` typescript/rest-nextjs-api-routes`})]}),`\n`]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Install the application dependencies:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-mocha catppuccin-mocha`,style:{backgroundColor:`#1e1e2e`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#cdd6f4`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#89B4FA`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`$`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` npm`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` install`})]}),`\n`]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Install the `,_jsx(_components.code,{children:`vercel`}),` and `,_jsx(_components.code,{children:`prisma`}),` CLI tools:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-mocha catppuccin-mocha`,style:{backgroundColor:`#1e1e2e`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#cdd6f4`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#89B4FA`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`$`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` npm`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` install`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` --global`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` vercel`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` prisma`})]}),`\n`]})})}),`\n`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`step-3-initialize-the-database`,children:`Step 3. Initialize the database`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Save `,_jsx(_components.a,{href:`#connection-string`,children:`the connection string`}),` you obtained earlier from the CockroachDB Cloud Console to the `,_jsx(_components.code,{children:`DATABASE_URL`}),` environment variable in an `,_jsx(_components.code,{children:`.env`}),` file in your project:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-mocha catppuccin-mocha`,style:{backgroundColor:`#1e1e2e`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#cdd6f4`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#89B4FA`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`$`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` echo`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` \"DATABASE_URL=\u003cconnection-string\"`}),_jsx(_components.span,{style:{color:`#94E2D5`,\"--shiki-dark\":`#94E2D5`},children:` >>`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` .env`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Prisma loads the variables defined in `,_jsx(_components.code,{children:`.env`}),` to the project environment. By default, Prisma uses the `,_jsx(_components.code,{children:`DATABASE_URL`}),` environment variable as the connection string to the database.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Run `,_jsx(_components.a,{href:`https://www.prisma.io/docs/concepts/components/prisma-migrate`,children:`Prisma Migrate`}),` to initialize the database with the schema defined in `,_jsx(_components.code,{children:`prisma/prisma.schema`}),`.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-mocha catppuccin-mocha`,style:{backgroundColor:`#1e1e2e`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#cdd6f4`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#89B4FA`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`$`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` prisma`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` migrate`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` dev`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` --name`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` init`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`You should see the following output:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-mocha catppuccin-mocha`,style:{backgroundColor:`#1e1e2e`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#cdd6f4`,\"--shiki-dark\":`#cdd6f4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Your database is now in sync with your schema.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`✔ Generated Prisma Client (3.11.0 | library) to ./node_modules/@prisma/client in 87ms`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`This command also initializes `,_jsx(_components.a,{href:`https://www.prisma.io/docs/concepts/components/prisma-client`,children:`Prisma Client`}),` to communicate with your CockroachDB cluster, based on the configuration in the `,_jsx(_components.code,{children:`prisma/schema.prisma`}),` file.`]}),`\n`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`step-4-deploy-the-application`,children:`Step 4. Deploy the application`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`(Optional) Run the app server locally to preview your site:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-mocha catppuccin-mocha`,style:{backgroundColor:`#1e1e2e`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#cdd6f4`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#89B4FA`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`$`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` npm`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` run`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` dev`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`You should see the following output:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-mocha catppuccin-mocha`,style:{backgroundColor:`#1e1e2e`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#cdd6f4`,\"--shiki-dark\":`#cdd6f4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ready - started server on 0.0.0.0:3000, url: http://localhost:3000`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Run the `,_jsx(_components.code,{children:`vercel`}),` command to start deploying the app:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-mocha catppuccin-mocha`,style:{backgroundColor:`#1e1e2e`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#cdd6f4`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#89B4FA`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`$`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` vercel`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` deploy`}),_jsx(_components.span,{style:{color:`#A6E3A1`,\"--shiki-dark\":`#A6E3A1`},children:` --confirm`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`You will be asked to sign into your Vercel account. When you authenticate your credentials, you should see the following message:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-mocha catppuccin-mocha`,style:{backgroundColor:`#1e1e2e`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#cdd6f4`,\"--shiki-dark\":`#cdd6f4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`> Success! GitHub authentication complete ...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsxs(_components.a,{href:`https://vercel.com/docs/cli#introduction/unique-options/confirm`,children:[_jsx(_components.code,{children:`--confirm`}),` flag`]}),` instructs Vercel to deploy the app to the `,_jsx(_components.code,{children:`example-app-typescript-vercel`}),` Vercel project, using the default settings:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-mocha catppuccin-mocha`,style:{backgroundColor:`#1e1e2e`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#cdd6f4`,\"--shiki-dark\":`#cdd6f4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`🔗 Linked to username/example-app-typescript-vercel (created .vercel and added it to .gitignore)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`🔍 Inspect: https://vercel.com/username/example-app-typescript-vercel/123456789 [1s]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`✅ Production: https://example-app-typescript-vercel-username.vercel.app [copied to clipboard] [47s]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:\"📝 Deployed to production. Run `vercel --prod` to overwrite later (https://vercel.link/2F).\"})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`💡 To change the domain or build command, go to https://vercel.com/ericharmeling/example-app-typescript-vercel/settings`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Follow the links provided to view and manage your deployed application.`}),`\n`]}),`\n`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`see-also`,children:`See also`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://vercel.com/guides/nextjs-prisma-postgres`,children:`Vercel’s official How to Build a Fullstack App with Next.js, Prisma, and PostgreSQL guide`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://www.cockroachlabs.com/blog/react-typescript-cockroachdb-sample-app#deploy-the-application-to-netlify`,children:`How to build a Complete Webapp with React, TypeScript \u0026 CockroachDB`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/docs/v24.1/build-a-nodejs-app-with-cockroachdb-prisma`,children:`Build a Simple CRUD Node.js App with CockroachDB and Prisma Client`})}),`\n`]}),`\n`,_jsx(_components.p,{children:`You might also be interested in the following pages:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/docs/v24.1/connection-parameters`,children:`Client Connection Parameters`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/docs/v24.1/connection-pooling`,children:`Connection Pooling`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/docs/v24.1/demo-replication-and-rebalancing`,children:`Data Replication`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/docs/v24.1/demo-fault-tolerance-and-recovery`,children:`Fault Tolerance \u0026 Recovery`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/docs/v24.1/demo-replication-and-rebalancing`,children:`Replication \u0026 Rebalancing`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/docs/v24.1/demo-automatic-cloud-migration`,children:`Cross-Cloud Migration`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/docs/v24.1/orchestrate-a-local-cluster-with-kubernetes-insecure`,children:`Automated Operations`})}),`\n`]})]})}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":"catppuccin-mocha","dark":"catppuccin-mocha"}},"config":{},"pageMetadata":{"title":"Deploy a Web App Built on CockroachDB with Vercel","sidebarTitle":"Vercel","old_description":"Learn how to build with Vercel and CockroachDB Standard.","canonical":"https://docs.cockroachlabs.com/docs/stable/deploy-app-vercel","description":null,"href":"/docs/v24.1/deploy-app-vercel"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Before you begin","slug":"before-you-begin","depth":2,"children":[],"tabId":"use-the-browser"},{"title":"Step 1. Get the code","slug":"step-1-get-the-code","depth":2,"children":[],"tabId":"use-the-browser"},{"title":"Step 2. Create a Vercel project","slug":"step-2-create-a-vercel-project","depth":2,"children":[],"tabId":"use-the-browser"},{"title":"Step 3. Integrate CockroachDB","slug":"step-3-integrate-cockroachdb","depth":2,"children":[],"tabId":"use-the-browser"},{"title":"Step 3. Deploy the application","slug":"step-3-deploy-the-application","depth":2,"children":[],"tabId":"use-the-browser"},{"title":"Before you begin","slug":"before-you-begin-2","depth":2,"children":[],"tabId":"use-the-command-line"},{"title":"Step 1. Create a CockroachDB Standard cluster","slug":"step-1-create-a-cockroachdb-standard-cluster","depth":2,"children":[],"tabId":"use-the-command-line"},{"title":"Step 2. Get the code","slug":"step-2-get-the-code","depth":2,"children":[],"tabId":"use-the-command-line"},{"title":"Step 3. Initialize the database","slug":"step-3-initialize-the-database","depth":2,"children":[],"tabId":"use-the-command-line"},{"title":"Step 4. Deploy the application","slug":"step-4-deploy-the-application","depth":2,"children":[],"tabId":"use-the-command-line"},{"title":"See also","slug":"see-also","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/cockroachlabs/4695317e415d4eba/kapa.js","/_mintlify/custom/cockroachlabs/40fb45a3cfe42c92/copy-code-prompt.js","/_mintlify/custom/cockroachlabs/3f343c9e8c40397a/collapse-nav.js"],"subdomain":"cockroachlabs","siteName":"CockroachDB","title":"Deploy a Web App Built on CockroachDB with Vercel - CockroachDB","navMaps":{"firstHrefInVersion":{"v26.4":{"href":"/docs/stable/deploy-app-vercel","matchLevel":1},"v26.3":{"href":"/docs/v26.3/deploy-app-vercel","matchLevel":1,"canonicalOverride":true},"v26.2":{"href":"/docs/v26.2/deploy-app-vercel","matchLevel":1,"canonicalOverride":true},"v26.1":{"href":"/docs/v26.1/deploy-app-vercel","matchLevel":1,"canonicalOverride":true},"v25.4":{"href":"/docs/v25.4/deploy-app-vercel","matchLevel":1,"canonicalOverride":true},"v25.3":{"href":"/docs/v25.3/deploy-app-vercel","matchLevel":1,"canonicalOverride":true},"v25.2":{"href":"/docs/v25.2/deploy-app-vercel","matchLevel":1,"canonicalOverride":true},"v25.1":{"href":"/docs/v25.1/deploy-app-vercel","matchLevel":1,"canonicalOverride":true},"v24.3":{"href":"/docs/v24.3/deploy-app-vercel","matchLevel":1,"canonicalOverride":true},"v24.1":{"href":"/docs/v24.1/deploy-app-vercel","matchLevel":0},"v23.2":{"href":"/docs/v23.2/deploy-app-vercel","matchLevel":1,"canonicalOverride":true},"v23.1":{"href":"/docs/v23.1/deploy-app-vercel","matchLevel":1,"canonicalOverride":true}},"firstHrefInLanguage":{}},"lastModified":"2026-11-11T19:16:50.105Z","originalFileLocation":"docs/v24.1/deploy-app-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=\"light\"}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=\"application-name\" content=\"CockroachDB\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cockroachlabs/c9BlkJ0WBi2Ma7w-/_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/cockroachlabs/c9BlkJ0WBi2Ma7w-/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cockroachlabs/c9BlkJ0WBi2Ma7w-/_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/cockroachlabs/c9BlkJ0WBi2Ma7w-/_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/cockroachlabs/c9BlkJ0WBi2Ma7w-/_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/cockroachlabs/c9BlkJ0WBi2Ma7w-/_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/cockroachlabs/c9BlkJ0WBi2Ma7w-/_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/cockroachlabs/c9BlkJ0WBi2Ma7w-/_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/cockroachlabs/c9BlkJ0WBi2Ma7w-/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Deploy a Web App Built on CockroachDB with Vercel - CockroachDB\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"CockroachDB\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.cockroachlabs.com/docs/stable/deploy-app-vercel\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://cockroachlabs.mintlify.site/_mintlify/api/og/v2?division=Standard+Examples\u0026amp;title=Deploy+a+Web+App+Built+on+CockroachDB+with+Vercel\u0026amp;theme=4aeed7318cb28bd50868adb3\u0026amp;signature=c35e638b39e1a8ea631be57144136326a0db776346fc0f7f61ef7d7784f521a7\">\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 a Web App Built on CockroachDB with Vercel - CockroachDB\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://cockroachlabs.mintlify.site/_mintlify/api/og/v2?division=Standard+Examples\u0026amp;title=Deploy+a+Web+App+Built+on+CockroachDB+with+Vercel\u0026amp;theme=4aeed7318cb28bd50868adb3\u0026amp;signature=c35e638b39e1a8ea631be57144136326a0db776346fc0f7f61ef7d7784f521a7\">\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/cockroachlabs/c9BlkJ0WBi2Ma7w-/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"CockroachDB\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#9059FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.cockroachlabs.com/docs/stable/deploy-app-vercel\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/v24.1/deploy-app-vercel.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.cockroachlabs.com/#organization\",\"name\":\"CockroachDB\",\"url\":\"https://docs.cockroachlabs.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/cockroachlabs/4WvUnbVuGZfqM4kW/images/CockroachLabs_Wordmark_Black.png?fit=max\u0026auto=format\u0026n=4WvUnbVuGZfqM4kW\u0026q=85\u0026s=54ccae625c9986bf1df8ddc7b2c571f0\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.cockroachlabs.com#website\",\"name\":\"CockroachDB\",\"url\":\"https://docs.cockroachlabs.com\",\"publisher\":{\"@id\":\"https://docs.cockroachlabs.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.cockroachlabs.com/docs/stable/deploy-app-vercel#webpage\",\"url\":\"https://docs.cockroachlabs.com/docs/stable/deploy-app-vercel\",\"name\":\"Deploy a Web App Built on CockroachDB with Vercel\",\"dateModified\":\"2026-11-11T19:16:50.105Z\",\"isPartOf\":{\"@id\":\"https://docs.cockroachlabs.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.cockroachlabs.com/docs/stable/deploy-app-vercel#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.cockroachlabs.com/docs/stable/deploy-app-vercel#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Get Started\",\"item\":\"https://docs.cockroachlabs.com/docs/v24.1/install-cockroachdb-mac\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Standard Examples\",\"item\":\"https://docs.cockroachlabs.com/docs/v24.1/deploy-lambda-function\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Deploy a Web App Built on CockroachDB with Vercel\",\"item\":\"https://docs.cockroachlabs.com/docs/stable/deploy-app-vercel\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.cockroachlabs.com/docs/stable/deploy-app-vercel#article\",\"headline\":\"Deploy a Web App Built on CockroachDB with Vercel\",\"name\":\"Deploy a Web App Built on CockroachDB with Vercel\",\"url\":\"https://docs.cockroachlabs.com/docs/stable/deploy-app-vercel\",\"mainEntityOfPage\":{\"@id\":\"https://docs.cockroachlabs.com/docs/stable/deploy-app-vercel#webpage\"},\"dateModified\":\"2026-11-11T19:16:50.105Z\",\"publisher\":{\"@id\":\"https://docs.cockroachlabs.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.cockroachlabs.com#website\"}}]}\u003c/script>","agentPointerHref":"/docs/v24.1/deploy-app-vercel.md","siteName":"CockroachDB","nav":{"global":{"anchors":[{"anchor":"University","icon":"graduation-cap","href":"https://learn.cockroachlabs.com/"}]},"products":[{"product":"Cockroach Continuum Cloud","icon":"https://mintlify.s3.us-west-1.amazonaws.com/cockroachlabs/images/continuum/cockroachlabs-symbol.svg","description":"The agentic database cloud","pages":[{"title":"Cockroach Continuum Cloud","href":"/docs/continuum"}]},{"product":"CockroachDB","icon":"database","description":"Distributed SQL database","versions":[{"version":"v26.4","default":true,"tag":"Stable","pages":[{"title":"v26.4","href":"/docs/stable/deploy-app-vercel"}]},{"version":"v26.3","pages":[{"title":"v26.3","href":"/docs/v26.3/deploy-app-vercel"}]},{"version":"v26.2","pages":[{"title":"v26.2","href":"/docs/v26.2/deploy-app-vercel"}]},{"version":"v26.1","pages":[{"title":"v26.1","href":"/docs/v26.1/deploy-app-vercel"}]},{"version":"v25.4","tag":"LTS","pages":[{"title":"v25.4","href":"/docs/v25.4/deploy-app-vercel"}]},{"version":"v25.3","tag":"Unsupported","pages":[{"title":"v25.3","href":"/docs/v25.3/deploy-app-vercel"}]},{"version":"v25.2","tag":"LTS","pages":[{"title":"v25.2","href":"/docs/v25.2/deploy-app-vercel"}]},{"version":"v25.1","tag":"Unsupported","pages":[{"title":"v25.1","href":"/docs/v25.1/deploy-app-vercel"}]},{"version":"v24.3","tag":"LTS","pages":[{"title":"v24.3","href":"/docs/v24.3/deploy-app-vercel"}]},{"version":"v24.1","tag":"LTS","tabs":[{"tab":"Docs","icon":"book-open","pages":[{"title":"CockroachDB Docs","sidebarTitle":"Docs Home","href":"/docs/v24.1"},{"group":"Get Started","pages":[{"group":"Install CockroachDB","pages":[{"title":"Install CockroachDB on Mac","href":"/docs/v24.1/install-cockroachdb-mac"},{"title":"Install CockroachDB on Linux","href":"/docs/v24.1/install-cockroachdb-linux"},{"title":"Install a FIPS-ready CockroachDB Runtime","href":"/docs/v24.1/fips"},{"title":"Install CockroachDB on Windows","href":"/docs/v24.1/install-cockroachdb-windows"}]},{"group":"Develop with CockroachDB","pages":[{"title":"Developer Basics","href":"/docs/v24.1/developer-basics"},{"group":"JavaScript/TypeScript","pages":[{"title":"Build a Simple CRUD Node.js App with CockroachDB and the node-postgres Driver","href":"/docs/v24.1/build-a-nodejs-app-with-cockroachdb"},{"title":"Build a Node.js App with CockroachDB and Sequelize","href":"/docs/v24.1/build-a-nodejs-app-with-cockroachdb-sequelize"},{"title":"Build a Simple CRUD Node.js App with CockroachDB and Knex.js","href":"/docs/v24.1/build-a-nodejs-app-with-cockroachdb-knexjs"},{"title":"Build a Simple CRUD Node.js App with CockroachDB and Prisma","href":"/docs/v24.1/build-a-nodejs-app-with-cockroachdb-prisma"},{"title":"Build a TypeScript App with CockroachDB and TypeORM","href":"/docs/v24.1/build-a-typescript-app-with-cockroachdb"}]},{"group":"Python","pages":[{"title":"Build a Python App with CockroachDB and Psycopg 3","href":"/docs/v24.1/build-a-python-app-with-cockroachdb-psycopg3"},{"title":"Build a Python App with CockroachDB and psycopg2","href":"/docs/v24.1/build-a-python-app-with-cockroachdb"},{"title":"Build a Simple CRUD Python App with CockroachDB and SQLAlchemy","href":"/docs/v24.1/build-a-python-app-with-cockroachdb-sqlalchemy"},{"title":"Build a Python App with CockroachDB and Django","href":"/docs/v24.1/build-a-python-app-with-cockroachdb-django"},{"title":"Build a Python App with CockroachDB and asyncpg","href":"/docs/v24.1/build-a-python-app-with-cockroachdb-asyncpg"}]},{"group":"Golang","pages":[{"title":"Build a Simple CRUD Go App with CockroachDB and the Go pgx Driver","href":"/docs/v24.1/build-a-go-app-with-cockroachdb"},{"title":"Build a Go App with CockroachDB and GORM","href":"/docs/v24.1/build-a-go-app-with-cockroachdb-gorm"},{"title":"Build a Go App with CockroachDB the Go pq Driver","href":"/docs/v24.1/build-a-go-app-with-cockroachdb-pq"},{"title":"Build a Go App with CockroachDB and upper/db","href":"/docs/v24.1/build-a-go-app-with-cockroachdb-upperdb"}]},{"group":"Java","pages":[{"title":"Build a Simple CRUD Java App with CockroachDB and JDBC","href":"/docs/v24.1/build-a-java-app-with-cockroachdb"},{"title":"Build a Java App with CockroachDB and Hibernate","href":"/docs/v24.1/build-a-java-app-with-cockroachdb-hibernate"},{"title":"Build a Java App with CockroachDB and jOOQ","href":"/docs/v24.1/build-a-java-app-with-cockroachdb-jooq"},{"title":"Build a Spring App with CockroachDB and MyBatis","href":"/docs/v24.1/build-a-spring-app-with-cockroachdb-mybatis"},{"title":"Build a Spring App with CockroachDB and JDBC","href":"/docs/v24.1/build-a-spring-app-with-cockroachdb-jdbc"},{"title":"Build a Spring App with CockroachDB and JPA","href":"/docs/v24.1/build-a-spring-app-with-cockroachdb-jpa"}]},{"group":"Ruby","pages":[{"title":"Build a Ruby App with CockroachDB and the Ruby pg Driver","href":"/docs/v24.1/build-a-ruby-app-with-cockroachdb"},{"title":"Build a Ruby App with CockroachDB and Active Record","href":"/docs/v24.1/build-a-ruby-app-with-cockroachdb-activerecord"}]},{"title":"Build a C# App with CockroachDB and the .NET Npgsql Driver","sidebarTitle":"C# (.NET)","href":"/docs/v24.1/build-a-csharp-app-with-cockroachdb"},{"title":"Build a Rust App with CockroachDB and the Rust-Postgres Driver","sidebarTitle":"Rust","href":"/docs/v24.1/build-a-rust-app-with-cockroachdb"},{"title":"Build a GraphQL Application Using Hasura","sidebarTitle":"Hasura (GraphQL)","href":"/docs/v24.1/hasura-getting-started"}]},{"group":"Standard Examples","pages":[{"title":"Create and Deploy an AWS Lambda Function Built on CockroachDB","sidebarTitle":"AWS Lambda","href":"/docs/v24.1/deploy-lambda-function"},{"title":"Deploy a CockroachDB Cloud Application with Google Cloud Run","sidebarTitle":"Google Cloud Run","href":"/docs/v24.1/deploy-app-gcr"},{"title":"Deploy a Netlify App Built on CockroachDB","sidebarTitle":"Netlify","description":null,"href":"/docs/v24.1/deploy-app-netlify"},{"title":"Deploy a Web App Built on CockroachDB with Vercel","sidebarTitle":"Vercel","href":"/docs/v24.1/deploy-app-vercel"},{"title":"Serverless Function Best Practices","description":null,"href":"/docs/v24.1/serverless-function-best-practices"}]},{"title":"MovR","href":"/docs/v24.1/movr"}]},{"group":"CockroachDB and AI","pages":[{"title":"CockroachDB and AI","sidebarTitle":"Overview","href":"/docs/v24.1/cockroachdb-and-ai"},{"title":"Agent Skills for CockroachDB","href":"/docs/v24.1/agent-skills"},{"group":"CockroachDB MCP Server","pages":[{"title":"CockroachDB MCP Server","sidebarTitle":"Overview","href":"/docs/v24.1/cockroachdb-mcp-server"},{"title":"Install, Configure, and Connect to the CockroachDB MCP Server","sidebarTitle":"Install, Configure, and Connect","href":"/docs/v24.1/install-cockroachdb-mcp-server"},{"title":"CockroachDB MCP Server Reference","sidebarTitle":"Self-hosted MCP Server Reference","href":"/docs/v24.1/cockroachdb-mcp-server-reference"}]},{"title":"CockroachDB Docs MCP Server","sidebarTitle":"Docs MCP Server","href":"/docs/v24.1/docs-mcp-integration"}]},{"group":"Feature Overview","pages":[{"group":"CockroachDB Basics","pages":[{"title":"Why CockroachDB?","href":"/docs/v24.1/why-cockroachdb"},{"title":"Replication and Rebalancing","sidebarTitle":"Replication \u0026 Rebalancing","href":"/docs/v24.1/demo-replication-and-rebalancing"},{"title":"Fault Tolerance \u0026 Recovery","href":"/docs/v24.1/demo-fault-tolerance-and-recovery"},{"title":"Serializable Transactions","href":"/docs/v24.1/demo-serializable"},{"title":"Multi-Active Availability","href":"/docs/v24.1/multi-active-availability"}]},{"group":"CockroachDB SQL","pages":[{"title":"PostgreSQL Compatibility","href":"/docs/v24.1/postgresql-compatibility"},{"title":"SQL Feature Support in CockroachDB v24.1","sidebarTitle":"SQL Features","href":"/docs/v24.1/sql-feature-support"},{"title":"SQL FAQs","href":"/docs/v24.1/sql-faqs"}]}]},{"group":"Data Resilience","pages":[{"title":"Disaster Recovery Overview","sidebarTitle":"Disaster Recovery","href":"/docs/v24.1/disaster-recovery-overview"}]},{"group":"Connect to an Application","pages":[{"title":"Install a Driver or ORM Framework","href":"/docs/v24.1/install-client-drivers"},{"title":"Connect to a CockroachDB Cluster","sidebarTitle":"Connect to a Cluster","href":"/docs/v24.1/connect-to-the-database"},{"title":"Client Connection Parameters","href":"/docs/v24.1/connection-parameters"},{"title":"Connection Pooling","href":"/docs/v24.1/connection-pooling"}]},{"group":"Self-Hosted Deployments","pages":[{"title":"Production Checklist","href":"/docs/v24.1/recommended-production-settings"},{"title":"Deployment \u0026 Operations Skills Taxonomy","sidebarTitle":"Deployment and Operations Skills Taxonomy","href":"/docs/v24.1/deployment-operations-skills-taxonomy"},{"group":"Deploy Locally","pages":[{"group":"Deploy from Binary","pages":[{"title":"Deploy a Local Cluster from Binary (Secure)","href":"/docs/v24.1/secure-a-cluster"},{"title":"Deploy a Local Cluster from Binary (Insecure)","href":"/docs/v24.1/start-a-local-cluster"}]},{"title":"Deploy a Local Cluster in Docker (Insecure)","href":"/docs/v24.1/start-a-local-cluster-in-docker"},{"group":"Deploy in Kubernetes","pages":[{"title":"Deploy a Local Cluster in Kubernetes","href":"/docs/v24.1/orchestrate-a-local-cluster-with-kubernetes"},{"title":"Orchestration with Kubernetes (Insecure)","href":"/docs/v24.1/orchestrate-a-local-cluster-with-kubernetes-insecure"}]},{"title":"Simulate a Multi-Region Cluster on localhost (Insecure)","sidebarTitle":"Simulate a Multi-Region Cluster Locally","href":"/docs/v24.1/simulate-a-multi-region-cluster-on-localhost"}]},{"group":"Deploy Manually","pages":[{"title":"Manual Deployment","sidebarTitle":"Overview","href":"/docs/v24.1/manual-deployment"},{"title":"Deploy CockroachDB On-Premises","sidebarTitle":"Deploy On-Premises","href":"/docs/v24.1/deploy-cockroachdb-on-premises"},{"title":"Deploy CockroachDB On-Premises (Insecure)","href":"/docs/v24.1/deploy-cockroachdb-on-premises-insecure"},{"title":"Deploy CockroachDB on AWS EC2","sidebarTitle":"Deploy on AWS","href":"/docs/v24.1/deploy-cockroachdb-on-aws"},{"title":"Deploy CockroachDB on AWS EC2 (Insecure)","href":"/docs/v24.1/deploy-cockroachdb-on-aws-insecure"},{"title":"Deploy CockroachDB on Microsoft Azure","sidebarTitle":"Deploy on Azure","href":"/docs/v24.1/deploy-cockroachdb-on-microsoft-azure"},{"title":"Deploy CockroachDB on Microsoft Azure (Insecure)","href":"/docs/v24.1/deploy-cockroachdb-on-microsoft-azure-insecure"},{"title":"Deploy CockroachDB on Google Cloud Platform GCE","sidebarTitle":"Deploy on Google Cloud Platform GCE","href":"/docs/v24.1/deploy-cockroachdb-on-google-cloud-platform"},{"title":"Deploy CockroachDB on Google Cloud Platform GCE (Insecure)","href":"/docs/v24.1/deploy-cockroachdb-on-google-cloud-platform-insecure"},{"title":"Deploy CockroachDB on Digital Ocean","sidebarTitle":"Deploy on Digital Ocean","href":"/docs/v24.1/deploy-cockroachdb-on-digital-ocean"},{"title":"Deploy CockroachDB on Digital Ocean (Insecure)","href":"/docs/v24.1/deploy-cockroachdb-on-digital-ocean-insecure"}]},{"group":"Deploy on Kubernetes with Legacy Technologies","pages":[{"title":"Kubernetes Overview","sidebarTitle":"Overview","href":"/docs/v24.1/kubernetes-overview"},{"title":"Deploy CockroachDB in a Single Kubernetes Cluster","href":"/docs/v24.1/deploy-cockroachdb-with-kubernetes"},{"title":"Deploy CockroachDB in a Single Kubernetes Cluster (Insecure)","href":"/docs/v24.1/deploy-cockroachdb-with-kubernetes-insecure"},{"title":"Deploy CockroachDB on Red Hat OpenShift","sidebarTitle":"OpenShift Deployment","href":"/docs/v24.1/deploy-cockroachdb-with-kubernetes-openshift"},{"title":"Orchestrate CockroachDB Across Multiple Kubernetes Clusters","sidebarTitle":"Multi-Cluster Deployment","href":"/docs/v24.1/orchestrate-cockroachdb-with-kubernetes-multi-cluster"},{"group":"Operate on Kubernetes","pages":[{"title":"Pod Scheduling","href":"/docs/v24.1/schedule-cockroachdb-kubernetes"},{"title":"Resource Management","href":"/docs/v24.1/configure-cockroachdb-kubernetes"},{"title":"Certificate Management","href":"/docs/v24.1/secure-cockroachdb-kubernetes"},{"title":"Cluster Scaling","href":"/docs/v24.1/scale-cockroachdb-kubernetes"},{"title":"Cluster Monitoring","href":"/docs/v24.1/monitor-cockroachdb-kubernetes"},{"title":"Cluster Upgrades","href":"/docs/v24.1/upgrade-cockroachdb-kubernetes"},{"title":"CockroachDB Performance on Kubernetes","sidebarTitle":"Kubernetes Performance","href":"/docs/v24.1/kubernetes-performance"}]}]},{"group":"Multi-Region for Self-Hosted Deployments","pages":[{"title":"Topology Patterns Overview","href":"/docs/v24.1/topology-patterns"},{"title":"Basic Production Topology","href":"/docs/v24.1/topology-basic-production"},{"title":"Follower Reads Topology","href":"/docs/v24.1/topology-follower-reads"},{"title":"Follow-the-Workload Topology","href":"/docs/v24.1/topology-follow-the-workload"},{"title":"Regional Tables","href":"/docs/v24.1/regional-tables"},{"title":"Global Tables","href":"/docs/v24.1/global-tables"}]},{"group":"Security","pages":[{"group":"Certificates","pages":[{"title":"Use the CockroachDB CLI to provision a development cluster","href":"/docs/v24.1/manage-certs-cli"},{"title":"Manage PKI certificates with HashiCorp Vault","href":"/docs/v24.1/manage-certs-vault"},{"title":"Create Security Certificates using OpenSSL","href":"/docs/v24.1/create-security-certificates-openssl"},{"title":"Advanced Public Key Infrastructure (PKI) Certificate Scenarios","href":"/docs/v24.1/create-security-certificates-custom-ca"},{"title":"Using Online Certificate Status Protocol (OCSP) with CockroachDB","sidebarTitle":"Use Online Certificate Status Protocol (OCSP)","href":"/docs/v24.1/manage-certs-revoke-ocsp"},{"title":"Certificate-based authentication using multiple values from the X.509 Subject field","sidebarTitle":"Certificate-based authentication using multiple values from the X.509 SUBJECT field","href":"/docs/v24.1/certificate-based-authentication-using-the-x509-subject-field"}]},{"title":"Authenticate to CockroachDB Self-Hosted Clusters","sidebarTitle":"Authentication","href":"/docs/v24.1/authentication"},{"title":"Manage Encryption for CockroachDB Self-Hosted Clusters","sidebarTitle":"Encryption","href":"/docs/v24.1/encryption"},{"title":"Manage Cluster User Authorization","sidebarTitle":"Authorization","href":"/docs/v24.1/authorization"},{"title":"Table-based SQL Audit Logging","href":"/docs/v24.1/sql-audit-logging"},{"title":"Role-based SQL Audit Logging","href":"/docs/v24.1/role-based-audit-logging"},{"title":"GSSAPI Authentication (Enterprise)","sidebarTitle":"GSSAPI Authentication","href":"/docs/v24.1/gssapi_authentication"},{"title":"Cluster Single Sign-on (SSO) using JSON Web Tokens (JWTs)","sidebarTitle":"Cluster SSO using JWT","href":"/docs/v24.1/sso-sql"},{"title":"Single Sign-on (SSO) for DB Console","sidebarTitle":"DB Console SSO","href":"/docs/v24.1/sso-db-console"},{"title":"Rotate Security Certificates","href":"/docs/v24.1/rotate-certificates"},{"title":"Use HashiCorp Vault's Dynamic Secrets","sidebarTitle":"Use Hashicorp Vault's Dynamic Secrets","href":"/docs/v24.1/vault-db-secrets-tutorial"}]},{"group":"Monitoring and Alerting","pages":[{"title":"Monitoring and Alerting","sidebarTitle":"Overview","href":"/docs/v24.1/monitoring-and-alerting"},{"title":"Common Issues to Monitor","href":"/docs/v24.1/common-issues-to-monitor"},{"title":"Enable the Node Map","href":"/docs/v24.1/enable-node-map"},{"title":"Monitor CockroachDB with Prometheus","sidebarTitle":"Use Prometheus and Alertmanager","href":"/docs/v24.1/monitor-cockroachdb-with-prometheus"},{"title":"Essential Metrics for CockroachDB Self-Hosted Deployments","sidebarTitle":"Essential Metrics for CockroachDB self-hosted Deployments","href":"/docs/v24.1/essential-metrics-self-hosted"},{"title":"Essential Alerts for CockroachDB Self-Hosted Deployments","sidebarTitle":"Essential Alerts for CockroachDB self-hosted Deployments","href":"/docs/v24.1/essential-alerts-self-hosted"}]},{"group":"Administration","pages":[{"title":"DB Console Overview","href":"/docs/v24.1/ui-overview"},{"title":"Cluster Overview Page","href":"/docs/v24.1/ui-cluster-overview-page"},{"group":"Metrics Dashboards","pages":[{"title":"Overview Dashboard","sidebarTitle":"Overview","href":"/docs/v24.1/ui-overview-dashboard"},{"title":"Hardware Dashboard","sidebarTitle":"Hardware","href":"/docs/v24.1/ui-hardware-dashboard"},{"title":"Runtime Dashboard","sidebarTitle":"Runtime","href":"/docs/v24.1/ui-runtime-dashboard"},{"title":"Networking Dashboard","sidebarTitle":"Networking","href":"/docs/v24.1/ui-networking-dashboard"},{"title":"SQL Dashboard","sidebarTitle":"SQL","href":"/docs/v24.1/ui-sql-dashboard"},{"title":"Storage Dashboard","sidebarTitle":"Storage","href":"/docs/v24.1/ui-storage-dashboard"},{"title":"Replication Dashboard","sidebarTitle":"Replication","href":"/docs/v24.1/ui-replication-dashboard"},{"title":"Distributed Dashboard","sidebarTitle":"Distributed","href":"/docs/v24.1/ui-distributed-dashboard"},{"title":"Queues Dashboard","sidebarTitle":"Queues","href":"/docs/v24.1/ui-queues-dashboard"},{"title":"Slow Requests Dashboard","sidebarTitle":"Slow Requests","href":"/docs/v24.1/ui-slow-requests-dashboard"},{"title":"Changefeeds Dashboard","sidebarTitle":"Changefeeds","href":"/docs/v24.1/ui-cdc-dashboard"},{"title":"Overload Dashboard","sidebarTitle":"Overload","href":"/docs/v24.1/ui-overload-dashboard"},{"title":"TTL Dashboard","sidebarTitle":"TTL","href":"/docs/v24.1/ui-ttl-dashboard"},{"title":"Physical Cluster Replication Dashboard","sidebarTitle":"Physical Cluster Replication","href":"/docs/v24.1/ui-physical-cluster-replication-dashboard"},{"title":"Custom Chart Debug Page","href":"/docs/v24.1/ui-custom-chart-debug-page"}]},{"title":"Databases Page","href":"/docs/v24.1/ui-databases-page"},{"title":"Sessions Page","href":"/docs/v24.1/ui-sessions-page"},{"title":"Statements Page","href":"/docs/v24.1/ui-statements-page"},{"title":"Transactions Page","href":"/docs/v24.1/ui-transactions-page"},{"title":"Insights Page","href":"/docs/v24.1/ui-insights-page"},{"title":"Network Page","href":"/docs/v24.1/ui-network-latency-page"},{"title":"Jobs Page","href":"/docs/v24.1/ui-jobs-page"},{"title":"Schedules Page","href":"/docs/v24.1/ui-schedules-page"},{"title":"Advanced Debug Page","href":"/docs/v24.1/ui-debug-pages"},{"title":"Key Visualizer","href":"/docs/v24.1/ui-key-visualizer"},{"title":"WAL Failover","href":"/docs/v24.1/wal-failover"}]},{"group":"Backups and Restores","pages":[{"title":"Backup and Restore Overview","sidebarTitle":"Overview","href":"/docs/v24.1/backup-and-restore-overview"},{"title":"Take Full and Incremental Backups","sidebarTitle":"Full and Incremental Backups","href":"/docs/v24.1/take-full-and-incremental-backups"},{"title":"Take Backups with Revision History and Restore from a Point-in-time","sidebarTitle":"Backups with Revision History and Point-in-time Restore","href":"/docs/v24.1/take-backups-with-revision-history-and-restore-from-a-point-in-time"},{"title":"Take and Restore Encrypted Backups","sidebarTitle":"Encrypted Backup and Restore","href":"/docs/v24.1/take-and-restore-encrypted-backups"},{"title":"Take Locality-restricted Backups","sidebarTitle":"Locality-restricted Backup Execution","href":"/docs/v24.1/take-locality-restricted-backups"},{"title":"Take and Restore Locality-aware Backups","sidebarTitle":"Locality-aware Backup and Restore","href":"/docs/v24.1/take-and-restore-locality-aware-backups"},{"title":"Manage a Backup Schedule","sidebarTitle":"Scheduled Backups","href":"/docs/v24.1/manage-a-backup-schedule"},{"title":"Backup Validation","href":"/docs/v24.1/backup-validation"},{"title":"Expire Past Backups","href":"/docs/v24.1/expire-past-backups"},{"title":"Backup and Restore Monitoring","href":"/docs/v24.1/backup-and-restore-monitoring"}]},{"group":"File Storage","pages":[{"title":"Use Cloud Storage","sidebarTitle":"Cloud Storage","href":"/docs/v24.1/use-cloud-storage"},{"title":"Cloud Storage Authentication","href":"/docs/v24.1/cloud-storage-authentication"},{"title":"Use Userfile Storage","sidebarTitle":"Userfile Storage","href":"/docs/v24.1/use-userfile-storage"},{"title":"Use a Local File Server","sidebarTitle":"Local File Server","href":"/docs/v24.1/use-a-local-file-server"}]},{"group":"Cluster Maintenance","pages":[{"title":"Upgrade to CockroachDB v24.1","sidebarTitle":"Upgrade CockroachDB","href":"/docs/v24.1/upgrade-cockroach-version"},{"title":"Disaster Recovery Planning","href":"/docs/v24.1/disaster-recovery-planning"},{"title":"Restoring Backups Across Versions","href":"/docs/v24.1/restoring-backups-across-versions"},{"title":"Manage Long-Running Queries","href":"/docs/v24.1/manage-long-running-queries"},{"title":"Node Shutdown","href":"/docs/v24.1/node-shutdown"}]},{"group":"Logs","pages":[{"title":"Logging Overview","sidebarTitle":"Overview","href":"/docs/v24.1/logging-overview"},{"title":"Configure Logs","href":"/docs/v24.1/configure-logs"},{"title":"Logging Use Cases","href":"/docs/v24.1/logging-use-cases"},{"title":"Log SQL Activity to Datadog","href":"/docs/v24.1/log-sql-activity-to-datadog"}]},{"title":"Cluster API v2.0","sidebarTitle":"Cluster API","href":"/docs/v24.1/cluster-api"}]},{"group":"Schema Design","pages":[{"title":"Database Schemas","href":"/docs/v24.1/schema-design-overview"},{"title":"Computed Columns","href":"/docs/v24.1/computed-columns"},{"title":"Column Families","href":"/docs/v24.1/column-families"},{"title":"Scale to Multiple Regions","href":"/docs/v24.1/multiregion-scale-application"},{"group":"Indexes","pages":[{"title":"Secondary Indexes","href":"/docs/v24.1/schema-design-indexes"},{"title":"Index a Subset of Rows with Partial Indexes","sidebarTitle":"Partial Indexes","href":"/docs/v24.1/partial-indexes"},{"title":"Index Sequential Keys with Hash-sharded Indexes","sidebarTitle":"Hash-sharded Indexes","href":"/docs/v24.1/hash-sharded-indexes"},{"title":"Generalized Inverted Indexes","href":"/docs/v24.1/inverted-indexes"},{"title":"Full-Text Search","href":"/docs/v24.1/full-text-search"},{"title":"Trigram Indexes","href":"/docs/v24.1/trigram-indexes"},{"title":"Expression Indexes","href":"/docs/v24.1/expression-indexes"},{"title":"Spatial Indexes","href":"/docs/v24.1/spatial-indexes"}]},{"group":"Update a Database Schema","pages":[{"title":"Online Schema Changes","href":"/docs/v24.1/online-schema-changes"},{"title":"Migrate CockroachDB Schemas with Alembic","sidebarTitle":"Use Alembic","href":"/docs/v24.1/alembic"},{"title":"Migrate CockroachDB Schemas with Flyway","sidebarTitle":"Use Flyway","href":"/docs/v24.1/flyway"},{"title":"Migrate CockroachDB Schemas with Liquibase","sidebarTitle":"Use Liquibase","href":"/docs/v24.1/liquibase"}]}]},{"group":"Reads and Writes","pages":[{"title":"Reads and Writes in CockroachDB","sidebarTitle":"Overview","href":"/docs/v24.1/architecture/reads-and-writes-overview"},{"group":"Read Data","pages":[{"title":"Query Data","href":"/docs/v24.1/query-data"},{"title":"Reusable Views","href":"/docs/v24.1/views"},{"title":"Subqueries","href":"/docs/v24.1/subqueries"},{"title":"Temporary Tables","href":"/docs/v24.1/temporary-tables"},{"title":"Paginate Results","href":"/docs/v24.1/pagination"},{"title":"Follower Reads","href":"/docs/v24.1/follower-reads"},{"title":"AS OF SYSTEM TIME","sidebarTitle":"AS OF SYSTEM TIME","href":"/docs/v24.1/as-of-system-time"},{"title":"Query Spatial Data","href":"/docs/v24.1/query-spatial-data"}]},{"group":"Write Data","pages":[{"title":"Insert Data","href":"/docs/v24.1/insert-data"},{"title":"Update Data","href":"/docs/v24.1/update-data"},{"title":"Bulk-update Data","href":"/docs/v24.1/bulk-update-data"},{"title":"Delete Data","href":"/docs/v24.1/delete-data"},{"title":"Bulk-delete Data","href":"/docs/v24.1/bulk-delete-data"},{"title":"Batch Delete Expired Data with Row-Level TTL","href":"/docs/v24.1/row-level-ttl"}]},{"group":"Transactions","pages":[{"title":"Transactions","sidebarTitle":"Overview","href":"/docs/v24.1/transactions"},{"title":"Advanced Client-side Transaction Retries","href":"/docs/v24.1/advanced-client-side-transaction-retries"},{"title":"Life of a Distributed Transaction","href":"/docs/v24.1/architecture/life-of-a-distributed-transaction"},{"title":"Read Committed Transactions","href":"/docs/v24.1/read-committed"}]},{"title":"Test Your Application Locally","href":"/docs/v24.1/local-testing"},{"url":"https://www.cockroachlabs.com/docs/tutorials/sql-playground","title":"SQL Playground","href":"/links/tutorials/sql-playground"},{"group":"Database Management Tools","pages":[{"title":"Visualize CockroachDB Schemas with DBeaver","sidebarTitle":"DBeaver GUI","href":"/docs/v24.1/dbeaver"},{"title":"Use IntelliJ IDEA with CockroachDB","sidebarTitle":"IntelliJ IDEA","href":"/docs/v24.1/intellij-idea"}]},{"title":"JSON Support","href":"/docs/v24.1/demo-json-support"}]},{"group":"Stream Data","pages":[{"title":"Change Data Capture Overview","href":"/docs/v24.1/change-data-capture-overview"},{"group":"Get Started with Changefeeds","pages":[{"title":"Create and Configure Changefeeds","href":"/docs/v24.1/create-and-configure-changefeeds"},{"group":"Changefeed Messages","pages":[{"title":"Changefeed Messages","sidebarTitle":"Overview","href":"/docs/v24.1/changefeed-messages"}]},{"title":"Changefeed Sinks","href":"/docs/v24.1/changefeed-sinks"},{"title":"Changefeed Examples","href":"/docs/v24.1/changefeed-examples"}]},{"group":"Monitor Changefeeds","pages":[{"title":"Monitor and Debug Changefeeds","sidebarTitle":"Overview","href":"/docs/v24.1/monitor-and-debug-changefeeds"},{"title":"Protect Changefeed Data from Garbage Collection","sidebarTitle":"Protect Changefeed Data","href":"/docs/v24.1/protect-changefeed-data"}]},{"group":"Optimize Changefeeds","pages":[{"title":"Change Data Capture Queries","href":"/docs/v24.1/cdc-queries"},{"title":"Changefeeds on Tables with Column Families","href":"/docs/v24.1/changefeeds-on-tables-with-column-families"},{"title":"Export Data with Changefeeds","href":"/docs/v24.1/export-data-with-changefeeds"},{"title":"Changefeeds in Multi-Region Deployments","href":"/docs/v24.1/changefeeds-in-multi-region-deployments"}]},{"group":"Changefeed Tutorials","pages":[{"title":"Connect to a Changefeed Kafka Sink with OAuth Using Okta","href":"/docs/v24.1/connect-to-a-changefeed-kafka-sink-with-oauth-using-okta"},{"title":"Stream a Changefeed to a Confluent Cloud Kafka Cluster","href":"/docs/v24.1/stream-a-changefeed-to-a-confluent-cloud-kafka-cluster"}]},{"title":"Advanced Changefeed Configuration","href":"/docs/v24.1/advanced-changefeed-configuration"}]},{"group":"Cross-Cluster Replication","pages":[{"group":"Physical Cluster Replication","pages":[{"title":"Physical Cluster Replication","sidebarTitle":"Overview","href":"/docs/v24.1/physical-cluster-replication-overview"},{"title":"Set Up Physical Cluster Replication","href":"/docs/v24.1/set-up-physical-cluster-replication"},{"title":"Fail Over from a Primary Cluster to a Standby Cluster","sidebarTitle":"Fail Over from a Primary to a Standby Cluster","href":"/docs/v24.1/failover-replication"},{"title":"Physical Cluster Replication Monitoring","sidebarTitle":"Monitor a Replication Stream","href":"/docs/v24.1/physical-cluster-replication-monitoring"},{"title":"Physical Cluster Replication Technical Overview","sidebarTitle":"Technical Overview","href":"/docs/v24.1/physical-cluster-replication-technical-overview"},{"group":"Cluster Virtualization","pages":[{"title":"Cluster Virtualization Overview","sidebarTitle":"Overview","href":"/docs/v24.1/cluster-virtualization-overview"},{"title":"Work with virtual clusters","sidebarTitle":"Work with Virtual Clusters","href":"/docs/v24.1/work-with-virtual-clusters"},{"title":"Cluster Setting Scopes with Cluster Virtualization enabled","sidebarTitle":"Setting Scopes","href":"/docs/v24.1/cluster-virtualization-setting-scopes"},{"title":"Cluster Metric Scopes with Cluster Virtualization enabled","sidebarTitle":"Metric Scopes","href":"/docs/v24.1/cluster-virtualization-metric-scopes"}]}]}]},{"group":"Multi-Region Capabilities","pages":[{"title":"Multi-Region Capabilities Overview","sidebarTitle":"Overview","href":"/docs/v24.1/multiregion-overview"},{"title":"Multi-Region Survival Goals","sidebarTitle":"Survival Goals","href":"/docs/v24.1/multiregion-survival-goals"},{"group":"Data Domiciling and Performance","pages":[{"title":"Table Localities","href":"/docs/v24.1/table-localities"},{"title":"Table Partitioning","href":"/docs/v24.1/partitioning"},{"title":"Data Domiciling with CockroachDB","sidebarTitle":"Data Domiciling with CockroachDB Tutorial","href":"/docs/v24.1/data-domiciling"}]},{"title":"How to Choose a Multi-Region Configuration","href":"/docs/v24.1/choosing-a-multi-region-configuration"},{"title":"Multi-Region Zone Config Extensions","href":"/docs/v24.1/zone-config-extensions"},{"group":"Multi-Region Tutorials","pages":[{"title":"Low Latency Reads and Writes in a Multi-Region Cluster","sidebarTitle":"Low Latency Reads and Writes","href":"/docs/v24.1/demo-low-latency-multi-region-deployment"},{"title":"Migrate to Multi-Region SQL","sidebarTitle":"Migrate to Multi-Region SQL with Replication Zones","href":"/docs/v24.1/migrate-to-multiregion-sql"}]}]},{"group":"Optimize Performance","pages":[{"title":"Optimize Statement Performance Overview","sidebarTitle":"Overview","href":"/docs/v24.1/make-queries-fast"},{"title":"SQL Performance Best Practices","href":"/docs/v24.1/performance-best-practices-overview"},{"title":"Indexes","href":"/docs/v24.1/indexes"},{"title":"Map SQL Activity using an Application Name","href":"/docs/v24.1/map-sql-activity-to-app"},{"title":"Cost-Based Optimizer","href":"/docs/v24.1/cost-based-optimizer"},{"title":"Vectorized Query Execution","sidebarTitle":"Vectorized Execution Engine","href":"/docs/v24.1/vectorized-execution"},{"title":"Load-Based Splitting","href":"/docs/v24.1/load-based-splitting"},{"title":"Replication Controls","href":"/docs/v24.1/configure-replication-zones"},{"title":"Admission Control","href":"/docs/v24.1/admission-control"},{"title":"Performance Tuning Recipes","href":"/docs/v24.1/performance-recipes"},{"group":"Performance Tuning Tutorials","pages":[{"title":"Statement Tuning with EXPLAIN","sidebarTitle":"Statement Tuning with EXPLAIN","href":"/docs/v24.1/sql-tuning-with-explain"},{"title":"Apply SQL Statement Performance Rules","href":"/docs/v24.1/apply-statement-performance-rules"}]}]},{"group":"Integrate","pages":[{"title":"Integrate CockroachDB with Satori","sidebarTitle":"Integrate with Satori","href":"/docs/v24.1/satori-integration"}]}]},{"tab":"Migrate","icon":"arrow-right-arrow-left","pages":[{"title":"Migrate","href":"/docs/molt/migration-overview"}]},{"tab":"SQL","icon":"code","pages":[{"title":"SQL","href":"/docs/v24.1/sql-statements"}]},{"tab":"Reference","icon":"book","pages":[{"title":"Reference","href":"/docs/v24.1/architecture/glossary"}]},{"tab":"Cluster API","icon":"rocket","pages":[{"title":"Cluster API","href":"/docs/api/cluster"}]},{"tab":"Troubleshoot","icon":"bug","pages":[{"title":"Troubleshoot","href":"/docs/v24.1/troubleshooting-overview"}]}]},{"version":"v23.2","tag":"LTS","pages":[{"title":"v23.2","href":"/docs/v23.2/deploy-app-vercel"}]},{"version":"v23.1","tag":"Unsupported","pages":[{"title":"v23.1","href":"/docs/v23.1/deploy-app-vercel"}]}]},{"product":"Cloud Deployments","icon":"cloud","description":"Fully managed CockroachDB","pages":[{"title":"Cloud Deployments","href":"/docs/cockroachcloud"}]},{"product":"Releases","icon":"list","description":"Version history, support policy \u0026 advisories","pages":[{"title":"Releases","href":"/docs/releases"}]}]},"basePath":"","title":"Deploy a Web App Built on CockroachDB with Vercel - CockroachDB","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":[],"chunks":[]}