v0 apps are Next.js apps. Sync to GitHub and they build with next build and next start. Vercel services need a key or a replacement.
Last updated
These are the defaults. Override any of them in Settings → Build.
In v0, open the project menu → Settings → GitHub → Connect, choose where the repository goes, name it and create it. v0 makes a private repository with the current code, and from then on that repository is the source of truth. GitHub sync is on every plan, including Free.
Then create a project on EthioDeploy from that repository.
New v0 chats start as a Next.js app with Tailwind CSS and shadcn/ui, so it builds like any Next.js project. We run next build and next start, and image optimization and caching work with no extra setup. See the Next.js guide.
Open next.config before relying on the build. If it sets typescript.ignoreBuildErrors, the build passes even with type errors. Fix them and turn the flag off.
Check package.json and your env vars for these:
@vercel/analytics, @vercel/speed-insights) load a script that only exists on Vercel. Elsewhere it fails to load and logs a message, and the app keeps working. Remove the components or use another analytics tool.AI_GATEWAY_API_KEY. The AI SDK reads it for you.BLOB_READ_WRITE_TOKEN from your Blob store. Vercel documents it as the option for code running outside Vercel.DATABASE_URLinto the project's settings, or switch to a Postgres addon, which sets DATABASE_URL for you. Do one or the other, not both.A crons entry in vercel.json makes Vercel send a GET request to a route on a schedule, with Authorization: Bearer $CRON_SECRET when CRON_SECRET is set. We don't read vercel.json, so use any outside scheduler (a scheduled GitHub Actions workflow works) to send the same request to your app's URL with the same header.
Add variables in the project's settings. They're available both while the app builds and while it runs, so build-time values (like framework-public keys) work without extra setup. See Environment variables.
NEXT_PUBLIC_* values are baked in when the app builds, so add them before the first deploy.
<project-slug>.ethiodeploy.com. Every push to the default branch redeploys, and the old version keeps serving until the new one is healthy.Your v0 change isn't live
Cause: The chat's branch hasn't been merged into the default branch yet.
Fix: Publish in v0, or merge its pull request on GitHub.
AI features fail with an authentication error
Cause: The app relied on Vercel's automatic AI Gateway authentication.
Fix: Create an AI Gateway API key and set AI_GATEWAY_API_KEY.
Uploads fail
Cause: Vercel Blob has no token outside Vercel.
Fix: Set BLOB_READ_WRITE_TOKEN in Settings.
Console shows "[Vercel Web Analytics] Failed to load script"
Cause: The analytics script only exists on Vercel.
Fix: Remove the Analytics component, or ignore it; nothing else breaks.
Scheduled tasks stopped running
Cause: Cron jobs in vercel.json only run on Vercel.
Fix: Call the cron route from an outside scheduler with your CRON_SECRET.
Still stuck? Check the deployment's build log in the dashboard, or see Troubleshooting.
Do I need to change my v0 code to host it on EthioDeploy?
Usually not. v0 apps are standard Next.js. You add your env vars, and replace or re-key the Vercel services the app uses: Analytics, AI Gateway, Blob and cron jobs.
Can I keep using v0 after moving the hosting?
Yes. v0 keeps editing through GitHub, and EthioDeploy redeploys whenever a change is merged into the default branch.
Does ISR and caching work outside Vercel?
Yes. Next.js caching and revalidation work with next start on a single instance, which is how EthioDeploy runs your app. The cache starts empty after each deploy.
Ready to deploy? Sign in with GitHub and pick your repo. No Dockerfile, no YAML.
See the full docs for custom domains, env vars, addons, and billing.