Migrate from Vercel
Moving from Vercel to Stackpad is straightforward. This guide walks you through the differences and what to change.
What stays the same
- Git push to deploy — both platforms deploy on push to your branch
- Framework detection — Stackpad auto-detects Next.js, Remix, Astro, Nuxt, and more
- Environment variables — same concept, set in the dashboard
- Custom domains — add a CNAME or A record, get automatic HTTPS
- Preview deployments — branch-based previews with unique URLs
What’s different
| Feature | Vercel | Stackpad |
|---|---|---|
| Infrastructure | AWS (US-based) | Hetzner (EU-based) |
| GDPR | US company, EU region optional | EU company, EU-only infrastructure |
| Databases | Separate product (Vercel Postgres) | Built-in as project services |
| Caching | Separate product (Vercel KV) | Built-in Redis/Valkey services |
| Private networking | Not available | Automatic between project services |
| Pricing | Per-function invocation | Fixed monthly + resource-based |
| Serverless functions | Yes (edge + Node) | No — full Node.js server |
| Edge runtime | Yes | No |
| CDN | Global edge network | Single European region |
Step-by-step migration
1. Prepare your Next.js app
Add standalone output if you haven’t already:
const nextConfig = { output: 'standalone',};
export default nextConfig;2. Move environment variables
Export your environment variables from Vercel:
- Go to your Vercel project → Settings → Environment Variables
- Note all variables and their values
Set them in Stackpad:
- Create a project on Stackpad
- Go to Environment Variables
- Use Paste .env to import them in bulk
3. Set up your database
If you’re using Vercel Postgres:
- Add a PostgreSQL service to your Stackpad project
- Stackpad auto-injects
DATABASE_URL - Redeploy your app
The DATABASE_URL format is standard PostgreSQL — compatible with Prisma, Drizzle, and any other ORM.
If you’re using an external database (like Supabase or PlanetScale), just update the connection string in your Stackpad environment variables.
4. Deploy
- Connect your GitHub repo to Stackpad
- Push to your branch
- Stackpad builds and deploys
5. Switch your domain
- Add your custom domain in Stackpad
- Update your DNS records to point to Stackpad (CNAME for subdomains, A for root)
- Stackpad provisions an HTTPS certificate automatically
- Remove the domain from Vercel
Things to watch out for
No serverless functions
Stackpad runs your Next.js app as a regular Node.js server, not as serverless functions. This means:
- No cold starts — your app is always running
- No per-invocation pricing — fixed resource allocation
- No edge runtime — all requests go to your European server
- API routes work normally — they run in the same Node.js process
No ISR with on-demand revalidation via external API
Next.js Incremental Static Regeneration works for time-based revalidation. On-demand revalidation via API routes works too, since they run in the same server process.
No Vercel-specific features
Remove or replace usage of:
@vercel/analytics— use Plausible or Umami (available as Stackpad templates)@vercel/speed-insights— remove or use an alternative@vercel/og— usesatoridirectly for OG image generation@vercel/blob— use MinIO (available as a Stackpad template) or S3-compatible storage
What’s next?
- Production checklist — verify everything before going live
- Deploy Next.js — Next.js-specific guide
- Custom domains — set up your domain