Platform registry is in beta
Ship your own
Vercel for Platforms lets you build hosted products that create, deploy, and operate web applications for customers or teams.
Build single-codebase platforms. Bring your own domain and host from a single codebase.
Customers can use their own domain, a custom wildcard, or a subpath, all on the same Vercel app.
View documentationBuild multi-codebase platforms. Programmatic hosting for user or AI-generated code.
One SDK creates multiple isolated projects, each with their own domain.
View documentation| Type | Name | Value | TTL |
|---|---|---|---|
A | example.com | 93.184.216.34 | Auto |
AAAA | example.com | 2606:2800:220:1:248:1893:25c8:1946 | 3600 |
CNAME | www | example.com | 300 |
MX | example.com | 10 mail.example.com. | 600 |
NS | example.com | ns1.dnsprovider.com. | 86400 |
Your Deployment is Ready
Claim it to manage it from your own account and make future updates.
"use server";import { type InlinedFile, type ProjectSettings, SkipAutoDetectionConfirmation,} from "@vercel/sdk/models/createdeploymentop.js";import { VERCEL_TEAM_ID, vercel } from "../lib/vercel";const MAX_PROJECT_NAME_LENGTH = 100;function sanitizeProjectName(name: string): string { return name .toLowerCase() .replace(/[^a-z0-9._-]/g, "-") .replace(/-{2,}/g, "-") .replace(/^-+|-+$/g, "") .slice(0, MAX_PROJECT_NAME_LENGTH);}export async function deployFiles(args?: { deploymentName?: string | undefined; config?: ProjectSettings; domain?: string;}) { const projectId = "prj_Hqwmuw82v21IcW7bY59PsZvhGu6E"; const files: InlinedFile[] = [ { file: "index.html", data: `<h1 style="color: #${Math.floor(Math.random() * 16_777_215).toString(16)}; font-size: ${Math.floor(Math.random() * 20) + 24}px;">Hello, world!</h1>`, }, ]; const { deploymentName = crypto.randomUUID(), config, domain, } = args ?? {}; const sanitizedName = sanitizeProjectName(deploymentName); const deployment = await vercel.deployments.createDeployment({ requestBody: { name: sanitizedName, files, project: projectId, projectSettings: config, target: "production", }, skipAutoDetectionConfirmation: config ? SkipAutoDetectionConfirmation.Zero : SkipAutoDetectionConfirmation.One, teamId: VERCEL_TEAM_ID, }); // if you want your preview deployments to be public, you can do this by setting the ssoProtection to null if (!projectId) { await vercel.projects.updateProject({ requestBody: { ssoProtection: null }, idOrName: deployment.projectId, teamId: VERCEL_TEAM_ID, }); } if (domain) { await vercel.projects.addProjectDomain({ idOrName: deployment.projectId, requestBody: { name: domain, }, teamId: VERCEL_TEAM_ID, }); } return deployment;}export async function getDeploymentStatus(id: string) { const deployment = await vercel.deployments.getDeployment({ idOrUrl: id, }); return { readyState: deployment.readyState, url: deployment.url, id: deployment.id, };}Customers using Vercel for Platforms
Scaling a powerful documentation platform with Vercel
From idea to acquisition: how Potion shipped 4k sites on Vercel
How Vercel helps MMM page manage over 30,000 custom domains
Hashnode runs the fastest blogs on the web with Vercel
Super serves thousands of domains on one project with Next.js and Vercel
How Dub grew to 3000 active domains with Vercel's multi-tenant SaaS toolkit