Platforms registry is in beta.

Ship your own

website builder

Vercel for Platforms lets you build hosted products that create, deploy, and operate web applications for customers or teams.

Vercel Multi Domain
Customers bring their own domain → host from a single codebase
customer-a.combrand-b.io/custom-siteblog.startup-c.devVercel ProjectNext.js App • Single codebaseMulti-tenant routingCustomers can bring their own domain, use a custom wildcard domain,or host their site under a custom subpath — all hosted on the same Vercel application
View documentation
Vercel Fluid Subhosting
Programmatic hosting for user or AI-generated code
Vercel SDKCreate projectsManage deploymentsCustomer 1 ProjectCustomer 2 ProjectCustomer 3 ProjectDeploymentapp.example.comDeploymentblog.example.comDeploymentshop.example.comcreateProject()deployFiles()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,  type UploadedFile,} from "@vercel/sdk/models/createdeploymentop.js";import { VERCEL_TEAM_ID, vercel } from "../lib/vercel";export async function deployFiles(  files: Array<InlinedFile | UploadedFile>,  args: {    projectId?: string;    deploymentName?: string | undefined;    config?: ProjectSettings;    domain?: string;  }) {  const {    projectId,    deploymentName = crypto.randomUUID(),    config,    domain,  } = args;  const deployment = await vercel.deployments.createDeployment({    requestBody: {      name: deploymentName,      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,  };}