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
- Quickstart: Get started with multi-project platforms
- Reference: API reference and troubleshooting