Services
Services let you deploy multiple backends and frontends within a single Vercel project. For example, a Next.js frontend and a FastAPI backend in the same repository deploy together with shared routing, environment variables, and a unique domain, replacing the need to split monorepos into separate Vercel projects.
A service is an independently built unit within your project.
At build time, Vercel builds each service separately. At request time, Vercel routes incoming requests to the correct service based on the rewrite rules in your vercel.json.
A project can contain multiple services across different frameworks or runtimes, such as:
- A Next.js frontend at
/ - A Python FastAPI backend, e.g. at
/backend - A Go server, e.g. at
/svc/go
All services share the same deployment.
Services are valuable when you have:
- A polyglot monorepo: For example, a JavaScript frontend and a Python backend in the same repository that you want to deploy as one project.
- Multiple backends: Several API services, each with its own dependencies and build step.
Define services in vercel.json using the services key. A service is internal by default and will not be routable from the Internet unless you expose it.
To route a service publicly, include a top-level rewrite rule that targets the service as destination:
{
"services": {
"my_frontend": {
"root": "frontend/"
},
"my_backend": {
"root": "backend/",
"entrypoint": "main:app"
}
},
"rewrites": [
{ "source": "/api/(.*)", "destination": { "service": "my_backend" } },
{ "source": "/(.*)", "destination": { "service": "my_frontend" } }
]
}The two top-level rewrites are what expose these services. Without them, neither my_frontend nor my_backend would receive any public traffic. With the rewrites in place:
- Any request under
/api/, such as/api/users, routes tomy_backend. - Every other path routes to
my_frontend.
For the smallest possible setup, a single service with a catch-all rewrite:
{
"services": { "api": { "root": "api/" } },
"rewrites": [ { "source": "/(.*)", "destination": { "service": "api" } } ]
}Because every public request enters through the top-level route table, your deployment has one public surface. Firewall, Deployment Protection, redirects are configured once at the top level and apply across all services, instead of being redefined per service.
Read Service Routing to learn more about service public routing configuration.
A service can call another service directly over an internal binding, without going through the public internet. The calling service declares the binding, and Vercel injects the target service's URL as an environment variable for your server-side code to use.
Bindings are how services communicate privately. The target stays unreachable from the internet unless a separate top-level rewrite exposes it, so a binding grants internal access without creating a public route. See Service bindings to declare and use them.
Vercel builds each service according to the specified (or
auto-detected) runtime and framework settings. If you prefer or require
the service package to be built as a container (Docker) image instead, set
the runtime setting for the service to container.
{
"services": {
"frontend": {
"runtime": "container",
"root": "frontend/"
},
"backend": {
"runtime": "container",
"root": "backend/"
}
}
}See Container Images for more information about using container images with Vercel.
When a project does not define services, Vercel evaluates vercel.json normally. When services is present, the top-level keys split into two groups:
- Public routing and URL behavior stay at the top level, where they own public traffic for the whole deployment. See Routing.
- Build and runtime fields are not valid at the top level, because their owner would be ambiguous across services.
functions,installCommand,buildCommand,devCommand,ignoreCommand,outputDirectoryandframeworkkeys should be moved into the relevant service.
See Service configuration reference for all configuration options that can be set in a service configuration object.
Run all your services together locally with vercel dev:
vercel devTo run everything locally without authenticating with the Vercel Cloud, add the -L flag (short for --local):
vercel dev -LIn both cases, generated binding environment variables are injected automatically, so calls between services work the same locally as in production.
- Routing: How public requests reach services and how to control the path your code sees.
- Service bindings: How one service calls another.
- Pricing and Limits: How billing works for services and which limits apply.
- Queues with services: How a service consumes queue messages.
- Experimental Services: The earlier
experimentalServicesconfiguration model. - Services guides: Guides and examples for deploying with Vercel Services.
Was this helpful?
Cross-link map: Services (/docs/services)
From the Vercel docs graph (built 2026-09-06T06:25:16.735Z), spanning vercel.com docs + KB, nextjs.org, ai-sdk.dev, and other Vercel documentation sites. Full graph as JSON: https://vercel.com/docs/graph.json
Semantically closest pages
- Experimental Services — The experimentalServices configuration model for deploying multiple backends and frontends in a single Vercel project.
- The Complete Guide to Vercel Services — Vercel Services let you deploy multiple frontends and backends in one project on a shared domain. Learn how to define se
- Services — Learn how a deployment with multiple services is structured in the Build Output API.
- Services routing — Learn how Vercel routes public requests to services and how each service handles its own routes.
- Vercel Services: Run full stack on Vercel
This page links to (7)
- Container Images — Deploy OCI container images with a Dockerfile or Containerfile on Vercel Functions.
- Queues concepts — Learn delivery, retries, visibility timeouts, and deployment isolation in Vercel Queues.
- Service bindings — Call one service from another using caller-declared service bindings.
- Service configuration reference — Options available for service configuration.
- Experimental Services — The experimentalServices configuration model for deploying multiple backends and frontends in a single Vercel project.
- Services Pricing and Limits — Understand how billing works for Vercel Services, what's charged, and which limits apply.
- Services routing — Learn how Vercel routes public requests to services and how each service handles its own routes.
Pages that link here (39)
By site: eve (2) · vercel-changelog (1) · vercel-kb (19) · vercel-web (1) · vercel-docs (16)
From eve
- Nuxt — Run an eve agent and a Nuxt app as one project with the eve/nuxt module.
- SvelteKit — Run an eve agent and a SvelteKit app as one project with the eveSvelteKit Vite plugin.
From vercel-changelog
From vercel-kb
- Build Claude Managed Agents with Vercel Services — Deploy Claude Managed Agents with Vercel Services to run a streaming research analyst in a browser chat, using Anthropic
- Deploy Go apps on Vercel using Docker — Deploy an existing Dockerized Go app to Vercel using Memos as a real-world example, with Neon Postgres for durable data.
- Deploy a Node.js Fastify app on Vercel with Docker — Build a Node.js application with Fastify and Docker, then deploy it to Vercel Functions. Learn how to configure environm
- Deploy PHP on Vercel with Docker — Build a PHP application with FrankenPHP and Docker, then deploy it to Vercel Functions with managed configuration, stora
- Deploy Rust on Vercel with Docker — Build a Rust application with Axum and Docker, then deploy it to Vercel Functions. Learn how to configure environment va
- How Docker Compose concepts map to Vercel — Translate your Docker Compose file to Vercel: Compose services become Vercel Services, networks become bindings, and vol
- Running Docker on Vercel vs Render — Compare how Vercel and Render run Docker workloads, including deployment model, scaling, image sources, state, and netwo
- Deploy ASP.NET Core on Vercel with Docker — Build a .NET application with Docker and deploy it to Vercel Functions. Learn how to configure environment variables, in
- Translate Kubernetes manifests to vercel.json — Translate Kubernetes Deployments, Services, Ingress, ConfigMaps, and CronJobs into vercel.json configuration and Vercel
- Deploy Laravel on Vercel with Docker — Build a Laravel application with FrankenPHP and Docker, then deploy it to Vercel with production configuration, external
- How to migrate from Google Cloud Run to Vercel — Migrate from Cloud Run to Vercel by copying your Dockerfile to Dockerfile.vercel, aligning the PORT contract, moving sec
- How to migrate from Render to Vercel — Migrate from Render to Vercel: map web services, cron jobs, and containers to their equivalents, and handle what doesn't
- Build Figma-style multiplayer cursors with WebSockets on Vercel — Learn how to build Figma-style multiplayer cursors with Next.js and FastAPI, kept consistent across multiple Vercel Func
- Build Notion-style real-time presence with WebSockets on Vercel — Build the avatar faces that appear when a teammate opens a page and vanish when they leave. Powered by a Hono WebSocket
- Choosing how to structure your application on Vercel — Compare three ways to structure an application on Vercel \(a single framework, one project with Services, or separate pr
- Deploy Symfony on Vercel with Docker — Build a Symfony application with FrankenPHP and Docker, then deploy it to Vercel with production configuration, external
- Does Vercel support Kubernetes? — Vercel doesn't run Kubernetes clusters. Learn how Kubernetes workloads like Deployments, Ingress, ConfigMaps, and CronJo
- How Vercel Services run on Fluid compute — The backends in a Vercel Services project run as Vercel Functions on Fluid compute by default. Learn how optimized concu
- Vercel vs Kubernetes — Compare Vercel and Kubernetes on operational ownership, deployment workflow, scaling, and cost model to decide which pla
From vercel-web
From vercel-docs
- Services — Learn how a deployment with multiple services is structured in the Build Output API.
- Container Images — Deploy OCI container images with a Dockerfile or Containerfile on Vercel Functions.
- Using the Go Runtime with Vercel Functions — Learn how to use the Go runtime to run Go APIs on Vercel.
- Using the Node.js Runtime with Vercel Functions — Learn how to use the Node.js runtime to create functions and deploy Node.js servers on Vercel.
- Using the Python Runtime with Vercel Functions — Learn how to use the Python runtime to run Python applications on Vercel.
- Python Functions in the /api Directory — Configure existing Vercel projects that use file-based Python functions in an /api directory.
- Glossary — Learn about the terms and concepts used in Vercel's products and documentation.
- Static Configuration with vercel.json — Learn how to use vercel.json to configure and override the default behavior of Vercel from within your project.
- Static Configuration with vercel.toml — Configure your Vercel project with a TOML file using the same properties as vercel.json.
- Queues concepts — Learn delivery, retries, visibility timeouts, and deployment isolation in Vercel Queues.
- Poll Mode — Consume messages from Vercel Queues by polling on your own schedule, from any environment.
- Rewrites on Vercel — Learn how to use rewrites to send users to different URLs without modifying the visible URL.
- Service bindings — Call one service from another using caller-declared service bindings.
- Experimental Services — The experimentalServices configuration model for deploying multiple backends and frontends in a single Vercel project.
- Services routing — Learn how Vercel routes public requests to services and how each service handles its own routes.
- Vercel Documentation Sitemap — Browse Vercel documentation pages with summaries, prerequisites, and topics.
