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.

Vercel Multi Domain

Customers can use their own domain, a custom wildcard, or a subpath, all on the same Vercel app.

View documentation

Build multi-codebase platforms. Programmatic hosting for user or AI-generated code.

Vercel Multi Domain

One SDK creates multiple isolated projects, each with their own domain.

View documentation

Blocks

Open source and fully customizable blocks to help you build your platform.

View all blocks
TypeNameValueTTL
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.
Deployment

Actions

Functions built on the Vercel SDK to help ship faster.

View all actions
"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