← Back to migrate from Vercel

Manual migration guide

Ten minutes, four steps, no tooling required. You will need a Vercel account (to read your settings), a git provider (GitHub, GitLab, Bitbucket, or Codeberg), and access to your domain registrar.

1

Create an orkestr account and connect your git provider

Sign up at orkestr.eu/register. The Starter plan is free, no card required, enough to test one project end-to-end.

In Settings → Connections, click Connect on the git provider that hosts your repo. We support GitHub, GitLab, Bitbucket, and Codeberg. The OAuth flow asks for read access to your repos and a webhook so we can auto-deploy on push.

2

Create the project from your repo

Click New project, pick the same repo your Vercel project points to, and pick the production branch (usually main). orkestr auto-detects your framework and generates a Dockerfile.

orkestr does not have separate fields for build command, install command, output directory, or Node version. The model is simpler: if the auto-generated Dockerfile fits your app, you do nothing. If it does not, you commit your own Dockerfile and we honor it as-is.

Here is how your Vercel settings map across:

  • Custom build / install command – commit a Dockerfile to your repo. Anything you ran on Vercel becomes a RUN step. We detect has_dockerfile automatically and skip generation.
  • Output directory – not a separate setting. Static frameworks (Astro, Next.js export, Vite builds) ship as containers serving their build output. The auto-generated Dockerfile already knows the right path per framework.
  • Root directory (monorepos) – set the build context when you create the project. We cd into that subfolder before building. This is the only build-related field in our UI.
  • Node version – comes from your package.json engines field, or your Dockerfile FROM line if you committed one. No separate version selector.

You can find your Vercel build settings at Settings → Build & Development Settings and Settings → General → Root Directory, but most of them do not need to come across.

3

Copy your environment variables

In Vercel, open Settings → Environment Variables. You will see two kinds:

  • Plain / encrypted vars – click the value to reveal, copy.
  • Sensitive vars – Vercel does not let you read these from the UI or the API. You will need the original value from wherever you stored it (password manager, .env file, the upstream service that issued it).

In orkestr, open your new project, go to the production environment, and paste each KEY=value pair. You can paste a whole .env-style block at once. Every var is encrypted at rest and injected at container start. There is no separate "sensitive" tier to opt into, and no values that hide themselves from you the moment you save them.

Heads-up on Vercel storage env vars: if your project uses Vercel KV, Postgres, or Blob, the connection strings (KV_REST_API_URL, POSTGRES_URL, BLOB_READ_WRITE_TOKEN, etc.) point at Vercel-hosted services. Those services do not run on orkestr. Either keep using them externally during the cutover, swap to an orkestr Postgres / Redis add-on, or move to an S3-compatible blob provider. Migrating the data itself is your call, on your timeline.

4

Deploy, then point your domain

Trigger a deploy. Watch the live logs. Within a minute or two you should have a working app at your-project.orkestr.run.

Once you are happy with the orkestr deploy, add your custom domain under Domains on the project. We give you the DNS records to set at your registrar (typically a CNAME to your orkestr.run subdomain, or A records if your DNS provider does not support CNAME on apex).

Vercel keeps serving your old domain until DNS propagates to orkestr. There is no downtime if you do this in order: deploy first, verify, then move DNS.

When DNS is live and you have watched real traffic hit orkestr for a day or two, cancel the Vercel project. We do not touch it, you cancel it from your Vercel dashboard.

If something does not look right

  • Build fails on a framework Vercel auto-handled. Check whether you had a custom build command on Vercel. The auto-detected Dockerfile assumes the framework default.
  • App runs but immediately 502s. Your app is probably listening on the wrong port. orkestr injects PORT at runtime; make sure your server reads it.
  • Edge runtime / @vercel/og errors. Those features do not run on orkestr today. The migration page lists what translates and what does not.
  • Anything else. Send us the deploy ID and we will look at it.

Ready when you are

Starter is free. Deploy one project. See whether the bill and the latency add up.

Create an account