All skills
vercel-labs avatar

/vercel-services

@756d11e official

Configure and troubleshoot Vercel Services for multiple frontends and backends in one project. Use when composing a polyglot or multi-service application on one Vercel deployment; defining the `services` key, service-targeted rewrites, or service bindings in `vercel.json`; or running all services with `vercel dev`.

  • 2 files
  • 14.5 KB
  • Updated last week
  • GitHub

Use this Skill: https://skilld.dev/gh/vercel-labs/vercel-plugin/vercel-services

This session only. Nothing lands on disk.

referencesexperimental-services.md

≈727 tokens on demand. Your agent reads this file only when SKILL.md points to it.

Experimental Services

The Experimental Services docs describe experimentalServices as the earlier configuration model: new projects use services, and experimentalServices remains available while you migrate. A project on it has an experimentalServices key in vercel.json, with entries that use entrypoint and routePrefix:

{
  "experimentalServices": {
    "web": {
      "entrypoint": "apps/web",
      "routePrefix": "/"
    },
    "backend": {
      "entrypoint": "backend/main.py",
      "routePrefix": "/server"
    }
  }
}

The project framework setting must be Services for experimentalServices to deploy.

How the two models route

experimentalServices routes by routePrefix: Vercel evaluates prefixes longest to shortest, with "/" as the catch-all, and mounts each backend at its prefix. services routes only through top-level rewrites with destination.service: a service is private by default, and a rewrite that exposes it passes the original request path through unchanged, with no automatic prefix mounting.

Migrate to services

experimentalServices services
entrypoint, a path from vercel.json root set to the service directory, plus entrypoint relative to that root when the runtime needs one
root root (required on every service)
routePrefix A top-level rewrite such as { "source": "/server/(.*)", "destination": { "service": "backend" } }, ordered most specific first. The service receives the original path, so handle the prefix in the app or change the path your code sees with a request.path transform in the service's own routes
framework framework on the service
memory, maxDuration The service's functions object
includeFiles, excludeFiles The service's functions object, where each takes a single glob string. experimentalServices also accepts an array, so fold an array into one glob pattern when you move it

A service's functions object uses the same schema as the top-level functions:

{
  "services": {
    "backend": {
      "root": "apps/backend",
      "functions": {
        "**/*.py": {
          "memory": 1024,
          "maxDuration": 30
        }
      }
    }
  }
}

Replace the whole experimentalServices key in one change: validation rejects a vercel.json that declares both services and experimentalServices.

Source: SKILL.md on GitHub

No third-party reports yet.

Signed by skilld at 756d11e. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 14 hours ago.

Activeupdated last week
summary
Compose multiple frontends and backends in one Vercel project (Beta)
Other metadata
metadata
{
  "priority": 7,
  "docs": [
    "https://vercel.com/docs/services",
    "https://vercel.com/docs/services/routing",
    "https://vercel.com/docs/services/bindings",
    "https://vercel.com/docs/services/config-reference",
    "https://vercel.com/docs/services/experimental",
    "https://vercel.com/docs/services/pricing"
  ],
  "sitemap": "https://vercel.com/sitemap.xml",
  "pathPatterns": [
    "vercel.json",
    "apps/*/vercel.json"
  ],
  "bashPatterns": [
    "\\b(?:vercel|vc)\\s+dev\\b[^\\n]*(?:--local|-L)(?:\\s|$)"
  ],
  "importPatterns": [],
  "promptSignals": {
    "phrases": [
      "vercel services",
      "vercel service binding",
      "vercel service bindings",
      "multi-service vercel",
      "multiple services on vercel",
      "frontend and backend on vercel"
    ],
    "allOf": [
      [
        "backend",
        "vercel"
      ],
      [
        "polyglot",
        "vercel"
      ],
      [
        "multiple",
        "services",
        "vercel"
      ],
      [
        "services",
        "vercel.json"
      ],
      [
        "vercel",
        "service",
        "binding"
      ]
    ],
    "anyOf": [
      "backend",
      "monorepo",
      "polyglot",
      "service",
      "binding",
      "vercel"
    ],
    "noneOf": [],
    "minScore": 6
  }
}
retrieval
{
  "aliases": [
    "Vercel Services",
    "multi-service project",
    "polyglot project",
    "service binding",
    "service rewrite"
  ],
  "intents": [
    "deploy frontend and backend together in one project",
    "configure the services key in vercel.json",
    "configure service rewrites",
    "call the backend privately with a service binding",
    "keep a service private with no public route",
    "serve a service on a subdomain",
    "strip a route prefix before it reaches the backend service",
    "run all services locally"
  ],
  "entities": [
    "services",
    "bindings",
    "destination.service",
    "root",
    "experimentalServices"
  ],
  "examples": [
    "put a Next.js frontend and a FastAPI backend in one project",
    "deploy a Vite SPA with an Express API behind /api",
    "add a Go service to an existing Next.js project",
    "my frontend cannot reach the backend service",
    "the backend returns 404 for every /api route",
    "point api.example.com at the backend"
  ]
}

README badge

README badge for vercel-labs/vercel-plugin/vercel-services