Does NestJS Work With Vercel?
NestJS can run on Vercel, but only as a serverless function—not as a traditional always-on server, which limits some NestJS features.
Quick Facts
How NestJS Works With Vercel
NestJS applications can be deployed to Vercel by converting them into serverless functions using the `@nestjs/platform-express` adapter and wrapping them for Vercel's function runtime. However, this fundamentally changes the application model: Vercel is optimized for stateless, request-response workloads with strict cold-start and execution time limits (10-60 seconds depending on plan), while NestJS is designed for long-running server processes. This means features like persistent WebSocket connections, background jobs, and in-memory caching become problematic. Most developers use Vercel for NestJS APIs that handle HTTP requests only, treating it as a lightweight REST endpoint handler rather than a full enterprise server. For production systems requiring WebSockets, real-time features, or complex state management, deploying NestJS to traditional platforms like Railway, Render, or DigitalOcean App Platform is more appropriate.
Best Use Cases
Quick Setup
npm install @nestjs/core @nestjs/common @nestjs/platform-express// src/main.ts - Vercel serverless handler
import { NestFactory } from '@nestjs/core';
import { ExpressAdapter } from '@nestjs/platform-express';
import { AppModule } from './app.module';
import express from 'express';
const expressApp = express();
export default async (req: any, res: any) => {
const app = await NestFactory.create(
AppModule,
new ExpressAdapter(expressApp),
{ logger: false },
);
await app.init();
expressApp(req, res);
};
// vercel.json
{
"functions": {
"api/index.ts": {
"memory": 1024,
"maxDuration": 30
}
}
}Known Issues & Gotchas
Cold starts and 10-60 second execution limits impact real-time features
Fix: Avoid WebSockets, streaming, and long-running operations. Use serverless-friendly patterns like request queuing to external services.
In-memory state and caching are lost between invocations
Fix: Use external databases (PostgreSQL, Redis) instead of in-memory stores. Enable function caching if using Vercel Pro.
TypeORM and heavy ORMs cause large cold start times
Fix: Use lightweight query builders like Prisma with connection pooling, or direct SQL queries.
Environment variables and secrets must be managed through Vercel dashboard
Fix: Use Vercel's environment variable UI or link your Git repository for automatic secret injection.
Alternatives
- •Express.js + Vercel (lighter weight, better cold start performance)
- •NestJS + Railway or Render (traditional containerized deployment with full feature support)
- •NestJS + AWS Lambda with Serverless Framework (more control over serverless environment)
Resources
Related Compatibility Guides
Explore more compatibility guides