Concepts
Understanding the core concepts of multi-project architecture helps you build scalable platforms with isolated tenant environments.
Projects
What is a project
A Vercel project represents a single application with its own Git repository, environment variables, and deployment history. In multi-project architecture, each tenant gets their own dedicated Vercel project.
Key characteristics:
- Unique project ID
 - Independent configuration
 - Separate deployment history
 - Isolated builds and functions
 
Programmatic creation
Create projects using the Vercel SDK:
import { projectsCreateProject } from "@vercel/sdk/funcs/projectsCreateProject.js";
const { value: project } = await projectsCreateProject(vercel, {
  teamId: "team_1234",
  requestBody: {
    name: `tenant-${tenantId}`,
    framework: "nextjs",
  },
});Project templates
Generate projects from templates to ensure consistency:
const { value: project } = await projectsCreateProject(vercel, {
  teamId: "team_1234",
  requestBody: {
    name: `tenant-${tenantId}`,
    gitRepository: {
      type: "github",
      repo: "your-org/tenant-template",
    },
  },
});Deployments
Isolated deployments
Each project has independent deployments:
- Separate build processes
 - Independent function execution
 - Isolated environment variables
 - Individual deployment URLs
 
Deployment lifecycle
- Create: Deploy code to project
 - Build: Vercel builds the application
 - Preview: Test deployment before promoting
 - Production: Promote deployment to production
 - Rollback: Revert to previous deployment if needed
 
Preview vs production
Preview deployments:
- Generated for every Git push
 - Unique URL per deployment
 - Test changes before production
 
Production deployments:
- Live on project domains
 - Promoted from preview or direct deploy
 - Serves end users
 
Domains
Per-project domains
Each tenant project can have its own domains:
import { projectsAddProjectDomain } from "@vercel/sdk/funcs/projectsAddProjectDomain.js";
await projectsAddProjectDomain(vercel, {
  idOrName: project.id,
  requestBody: {
    name: "tenant1.com",
  },
});Automatic URLs
Every project gets automatic Vercel URLs:
- Production: 
project-name.vercel.app - Preview: 
project-name-git-branch.vercel.app 
Custom domains per project
Configure custom domains independently for each tenant:
- Add domain via SDK
 - Tenant configures DNS
 - Verify ownership
 - SSL certificate issues automatically
 
Architecture
Multiple projects vs single project
Multi-Project:
- Each tenant = separate Vercel project
 - Complete isolation
 - Independent scaling
 - Higher management overhead
 
Multi-Tenant (single project):
- All tenants = one Vercel project
 - Shared infrastructure
 - Lower management overhead
 - Application-level isolation
 
Use cases
When to use Multi-Project vs Multi-Tenant
Use Multi-Project when:
- Tenants deploy their own code
 - Each tenant needs custom functionality
 - Complete isolation is required (security, compliance)
 - AI agents are generating and deploying code
 - Users create applications from templates
 
Use Multi-Tenant when:
- All tenants use the same application
 - Content differs but code is the same
 - You want to deploy once, update all tenants
 - Lower operational overhead preferred
 
AI coding platforms
Perfect for platforms where:
- AI generates unique code per tenant
 - Each tenant's app is different
 - Users can deploy custom logic
 - Examples: Spawn, Orchids, v0
 
Template-based platforms
Ideal for:
- Creating projects from templates
 - Customizing per tenant
 - Maintaining consistency
 - Rapid tenant onboarding
 
User-generated applications
Well-suited for:
- Users creating their own apps
 - Hosting user-generated content
 - Platform controls infrastructure
 - Users focus on their code
 
Next steps
- How-to Guide: Implement multi-project features
 - Reference: API reference and troubleshooting