# Run multiple frameworks in one project with Vercel Services

**Published:** June 30, 2026 | **Authors:** Ricardo Gonzalez, Nik Sidnev, Daniel Park, Michael J\. Sullivan, James Clarke, Fantix King, JJ Kasper, Elvis Pranskevichus, Casey Gowrie, Joe Haddad, Yury Selivanov

---

You can now deploy multiple frontends and backends together within a single Vercel project.

[Vercel Services is now available](https://vercel.com/blog/vercel-services-run-full-stack-on-vercel), allowing you to deploy full stack apps with multiple frameworks on a shared domain, where services talk to each other privately and deployments build, preview, and roll back together.

Services are defined in `vercel.json`:

**vercel.json**
```json
{
  "services": {
    "my_frontend": {
      "root": "frontend/",
      "framework": "nextjs"
    },
    "my_backend": {
      "root": "backend/",
      "entrypoint": "main:app"
    }
  },
  // my_backend has no public route
  // it is only reachable from my_frontend internally
  "rewrites": [
    { 
      "source": "/(.*)", 
      "destination": { "service": "my_frontend" }
    }
  ]
}
```

From there, your services show up across the dashboard and CLI:

- The Deployments panel visualizes the services graph
- The Logs UI filters by individual service
- `vercel dev` runs every service locally for a production-like environment

![A visualization of Services Graph in the Deployment UI](//images.ctfassets.net/e5382hct74si/19SAmPB60ySDbDWxvh3WZT/c5918391753d1810686a591e46e84b52/graph-light.png)
*A visualization of Services Graph in the Deployment UI*

### Service bindings

Services talk to each other internally with the new `bindings` key, without routing through the public internet:

**vercel.json**
```json
{
  "services": {
    "my_frontend": {
      "root": "frontend/",
      "framework": "nextjs",
      "bindings": [
        {
          "type": "service",
          "service": "my_backend",
          "format": "url",
          "env": "BACKEND_INTERNAL_URL"
        }
      ]
    },
    "my_backend": { ... }
  },
  "rewrites": [ ... ]
}
```

The frontend reaches the backend privately through the URL in `BACKEND_INTERNAL_URL`:

**app/api/users/route.ts**
```typescript
export async function GET() {
  const url = new URL("/users", process.env.BACKEND_INTERNAL_URL);
  const res = await fetch(url);
  const users = await res.json();
  return Response.json(users);
}
```

### Framework-defined infrastructure

Most frameworks run with zero configuration. [Framework-defined infrastructure](https://vercel.com/blog/framework-defined-infrastructure) means each service's framework is auto-detected and auto-provisioned, from FastAPI and Flask to Express and Hono, with first-class support for Go and Rust. Services run on [Fluid compute](https://vercel.com/fluid) with Active CPU pricing, so you only pay for the time your code is actually running.

Read the [documentation](https://vercel.com/docs/services) to get started.

---

📚 **More updates:** [View all changelog entries](/changelog/sitemap.md) | [Blog](/blog/sitemap.md)