Skip to content
ShipSafeStack

Checklist

Is v0 secure? What to check before launch

Short answer. v0 generates the project and deploys it on Vercel. Its security page describes the builder and the host, not the access rules in the app you generated. Before you share a URL, sort NEXT_PUBLIC_ values from server secrets, read the server actions, and check who can open preview deployments. Those steps are the checklist. They are not a verdict about the platform.

Updated 13 Nov 2026

This is a practical checklist, not a guarantee. It is not a penetration test, a compliance audit, or proof that an app is safe to launch.

This page answers the question with the checks, not with a yes or a no. v0 is the builder. The app it generates is the thing to review. The short list is Ship a v0 app. v0 is the directory entry. The same question for other builders is Is Lovable secure?, Is Bolt secure?, and Is Replit secure?.

What v0 is

v0's full-stack page says it defaults to Next.js, and that Next.js gives the most reliable results when you ask for data, API calls, or backend logic. It can use other frameworks. It can connect databases such as Supabase, Neon, and Upstash from Project menu, Settings, Integrations.

Publishing is separate from the chat. v0's deployments page says projects deploy to Vercel. A working branch gets a preview URL that does not change the production URL. Publish updates the production deployment. For a GitHub-backed project, Publish creates or reuses a pull request and merges it into the base branch, and GitHub branch protection still applies. A project without GitHub deploys the chat's current code to the connected Vercel project.

v0's security page says the product does not take generated code for granted, and that it treats generated code as potentially incorrect. It describes analysis before execution, sandboxed runs, and, on deploy, Vercel Functions in isolated containers with environment variables in Vercel's vault. Enterprise plans can opt out of model training, use SSO, and keep logs of user actions. The same page says v0 is included in Vercel's SOC 2 Type 2 attestation. Those statements are about v0 and Vercel. They do not tell you whether a second user can read the first user's rows in the app the chat just wrote.

What you still check

v0 documents the NEXT_PUBLIC_ split, a prompt it calls a v0 Security Check, and where Deployment Protection lives. You still decide these before the URL is for real users:

  • Which values use the NEXT_PUBLIC_ prefix, and which stay on the server.
  • Whether each server action and route handler checks who is calling, not only that the function runs on the server.
  • If the database is Supabase or Neon, whether row level security is on for the tables the client can reach.
  • Who can open preview deployments, especially if a preview uses real data.
  • Whether routes that call a model, send mail, or accept sign-ups have a limit.
  • Which packages the chat added, and where errors from production will show up.

A v0 Security Check is a pass over that chat. v0's security page says to ask for one before you ship, to check the chat's changes for vulnerabilities. It does not say the check is a certificate. The general pass after it is the pre-launch checklist.

Secrets and NEXT_PUBLIC_ variables

v0's security page says it uses Next.js's split. Variables without the NEXT_PUBLIC_ prefix stay on the server. Only names with that prefix are exposed to the browser. v0 says it analyzes NEXT_PUBLIC_ usage and warns about it, and that it can move a call into a Route Handler or a Server Action.

Vercel's environment variables page says Next.js inlines NEXT_PUBLIC_ variables into the client bundle at build time. A value with that prefix is in the JavaScript a visitor can open. v0's security page says not to put sensitive tokens on that prefix, to use different keys for development and production, and to rotate keys. The wider pass is API keys in the frontend.

Where you store them is the Vercel project, not a file you commit. v0's external APIs page says Project menu, Settings, Environment Variables, and that you choose Production, Preview, or Development. Production is the published app. Preview is non-production deployments. Development is the v0 preview panel and local runs. v0's deployments page says the deployment inspector is where you edit those three. A change applies to the next deployment, not the one already running. Vercel says you redeploy after you change a variable.

v0's API guide for environment variables says the v0 preview runs in the development environment, and that a variable marked sensitive is not exposed there, so avoid that type for a key v0 must read while generating. Vercel's Config and Secret page says Secret values are now allowed in Development, which reverses that earlier limit. If the preview cannot see a key production can, check the variable's type and which environments it is scoped to. Do not guess. Open the project settings.

A Supabase secret or service_role key under NEXT_PUBLIC_ is in the browser. If that happened, use Service role key leaked? What to do. The publishable or anon key is the one that may stay in the client when policies match. That split is Is the Supabase anon key safe to expose?.

Server actions and route handlers

v0's security page says the assistant can move code into a Route Handler or a Server Action so a secret is not in the browser. That move keeps the secret off the client. It does not, by itself, decide who may call the function. A server action is still a request. If it updates a row, changes a price, or sends mail, read the function and confirm it checks the caller. If you are not sure this project's actions do that, open the file. Do not treat "it runs on the server" as the check.

v0's full-stack page shows a prompt such as "users can only see and manage their own tasks." A prompt is an instruction to the builder. The result is still code you read.

The database

v0's full-stack page lists Supabase, Neon, and Upstash as databases it can attach. It does not say it turns on row level security for you.

If the database is Supabase, the policies are the control. Copy-paste examples, including own-row, public read, and team membership, are in Supabase RLS policy examples. The checklist after they exist is Supabase row level security.

If the database is Neon, it is Postgres. Row level security is a Postgres feature you enable. v0's docs do not describe a Neon policy screen. If you are not sure which role the app connects as, or whether RLS is enabled on the tables, check the project. A single database URL used from a server action can still read every row if that role is allowed to.

The test is the same either way. A second account, and a logged-out request, should not receive the first account's private rows.

Preview deployments

v0's deployments page says preview deployments come from working branches and have their own URLs. The first publish asks who can access the app. The choices depend on the team's plan and on deployment protection. Production visibility is under Project menu, Settings, Vercel Project. The deployment inspector includes Deployment Protection and Vercel Authentication.

Vercel's Deployment Protection page says you pick a method and a scope. Standard Protection, available on all plans, protects deployments other than production domains. All Deployments protects production domains too. Vercel Authentication restricts access to Vercel users with access to the project. Password Protection is not on the Hobby plan. It is a paid option on Pro and included on Enterprise. Trusted IPs and Passport are Enterprise.

Do not assume a preview is private. Check the project's Deployment Protection before a preview points at production data or production keys. v0's security page says to use different keys for development and production. A preview that shares the production database is a production URL with a different hostname.

Hosts in general are compared in Vercel vs Netlify vs Render.

Limits, packages, and errors

v0's docs do not describe a rate limit on the routes the chat generates. If a route calls a model, sends mail, or accepts sign-ups, add a limit on the server. The notes are in rate limiting.

v0's full-stack page says to use popular, well-documented libraries. That is advice for the prompt. It is not a review of the packages the chat added. Read the dependency changes before you publish. If the project is in git, a scanner that reads the repo is in the code and dependency security category.

The deployment inspector includes runtime logs. Those logs are the host's. They are not an error tracker you can search later. Adding Sentry to a Next.js app v0 generated is Add Sentry to a vibe-coded app. Sentry is the directory entry. The browser DSN may ship in the client. The source-map auth token stays in the build environment.

Before you launch

  • Write down whether the database is Supabase, Neon, or something else, and which environment the preview uses.
  • Search the project for NEXT_PUBLIC_. A secret under that prefix is in the browser bundle. Server-only names stay off the client only if client code does not import them.
  • Read each server action and route handler that changes data. Confirm it checks the caller.
  • If the database is Supabase, open the policies. If it is Neon, confirm whether row level security is enabled and which role connects.
  • Open Deployment Protection on the Vercel project. Confirm who can open preview URLs before they hold real data.
  • If you charge, confirm the payment on the server with the Stripe webhook checklist.
  • Then run a free passive check on the URL you will share, and finish the pre-launch checklist.

FAQ

Does a v0 Security Check mean the app is finished?

No. v0's security page says to ask for a v0 Security Check to look at that chat's changes. A finished reply is what that pass reported. It does not replace reading the server actions, and it is not a certificate.

Is a NEXT_PUBLIC_ variable secret?

No. v0's security page says only names with that prefix are exposed to the browser. Vercel says Next.js inlines them into the client bundle at build time. A payment secret, a model key, and a Supabase secret key do not belong there.

Are v0 preview deployments private?

Check the project. v0 says the visibility choices depend on the team's plan and on deployment protection, and that the deployment inspector includes Deployment Protection and Vercel Authentication. Vercel says Standard Protection covers deployments other than production domains and is available on all plans. Password Protection is not on the Hobby plan. A preview that uses production data is still a URL until that protection is on.

Where is the rest of the v0 launch list?

Ship a v0 app is the short version. v0 is the directory entry. The general pass is the pre-launch checklist.

Sources

Checked 13 Nov 2026.

Informational only. This page describes checks and vendor documentation. It is not a security audit, a penetration test, or a certification, and it is not a guarantee.

Newsletter

A short weekly note on new tools and security checklists. No spam, unsubscribe anytime.