Update to Vercel
Snapshot Sep 30, 2026 · 23:18 UTC · version 0.21.4
Collection source: not recorded for this historical snapshot. These snapshots do not have a confirmed matching collection source. Differences in file lists alone do not establish changes to the package.
Supporting file metadata differs
Newly listed paths: agents/openai.yaml. This compares saved file lists, not package contents; a different collection source can change the list.
Observed in package metadata. These changes alone do not establish a new customer-facing feature.
Supporting files
[{"relative_path":"references/fastapi-vite/backend/pyproject.toml","size_in_bytes":165},{"relative_path":"references/fastapi-vite/frontend/package.json","size_in_bytes":320},{"relative_path":"references/fastapi-vite/frontend/vite.config....
[{"relative_path":"agents/openai.yaml","size_in_bytes":144},{"relative_path":"references/fastapi-vite/backend/pyproject.toml","size_in_bytes":165},{"relative_path":"references/fastapi-vite/frontend/package.json","size_in_bytes":320},{"re...
Compare saved observations
Download comparison JSONFull technical diff · 1 changed fields
changed /included_files
[
{
"relative_path": "references/fastapi-vite/backend/pyproject.toml",
"size_in_bytes": 165
},
{
"relative_path": "references/fastapi-vite/frontend/package.json",
"size_in_bytes": 320
},
{
"relative_path": "references/fastapi-vite/frontend/vite.config.ts",
"size_in_bytes": 133
},
{
"relative_path": "references/fastapi-vite/vercel.json",
"size_in_bytes": 208
}
][
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 144
},
{
"relative_path": "references/fastapi-vite/backend/pyproject.toml",
"size_in_bytes": 165
},
{
"relative_path": "references/fastapi-vite/frontend/package.json",
"size_in_bytes": 320
},
{
"relative_path": "references/fastapi-vite/frontend/vite.config.ts",
"size_in_bytes": 133
},
{
"relative_path": "references/fastapi-vite/vercel.json",
"size_in_bytes": 208
}
]Full snapshot data
{
"name": "vercel-services",
"description": "Vercel Services — deploy multiple services within a single Vercel project. Use for monorepo layouts or when combining a backend (Python, Go) with a frontend (Next.js, Vite) in one deployment.",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 144
},
{
"relative_path": "references/fastapi-vite/backend/pyproject.toml",
"size_in_bytes": 165
},
{
"relative_path": "references/fastapi-vite/frontend/package.json",
"size_in_bytes": 320
},
{
"relative_path": "references/fastapi-vite/frontend/vite.config.ts",
"size_in_bytes": 133
},
{
"relative_path": "references/fastapi-vite/vercel.json",
"size_in_bytes": 208
}
],
"skill_md_contents": "---\nname: vercel-services\ndescription: \"Vercel Services — deploy multiple services within a single Vercel project. Use for monorepo layouts or when combining a backend (Python, Go) with a frontend (Next.js, Vite) in one deployment.\"\nmetadata:\n priority: 7\n docs:\n - \"https://vercel.com/docs/services\"\n sitemap: \"https://vercel.com/sitemap/docs.xml\"\n pathPatterns:\n - 'backend/**'\n - 'backend/main.py'\n - 'backend/main.go'\n - 'backend/go.mod'\n - 'backend/pyproject.toml'\n - 'backend/requirements.txt'\n - 'frontend/**'\n - 'apps/*/backend/**'\n - 'apps/*/frontend/**'\n - 'services/*/vercel.json'\n - '*/pyproject.toml'\n - '*/go.mod'\n bashPatterns:\n - '\\bvercel\\s+dev\\b.*-L'\n - '\\bpip\\s+install\\b.*fastapi'\n - '\\buv\\s+(sync|pip|run)\\b'\n - '\\bgo\\s+(run|build|mod)\\b'\n - '\\bpython\\s+-m\\s+uvicorn\\b'\n - '\\buvicorn\\b'\n importPatterns:\n - \"fastapi\"\n promptSignals:\n phrases:\n - \"services api\"\n - \"vercel services\"\n - \"multi-service\"\n - \"python backend\"\n - \"go backend\"\n - \"fastapi\"\n - \"deploy backend\"\n - \"backend and frontend\"\n - \"multiple services\"\n allOf:\n - [backend, frontend]\n - [python, vercel]\n - [go, vercel]\n - [backend, deploy]\n - [service, monorepo]\n - [fastapi, deploy]\n anyOf:\n - \"backend\"\n - \"monorepo\"\n - \"service\"\n - \"python\"\n - \"golang\"\n noneOf:\n - \"turborepo cache\"\n - \"turbo.json\"\n - \"aws lambda\"\n - \"docker compose\"\n minScore: 6\n---\n\n# Deploy multi-service projects with Vercel\n\nServices let you deploy multiple independently-built units within a single Vercel project. The typical use case is combining different runtimes (e.g. Python + JavaScript) in one deployment with shared routing and environment variables, but services work for any combination — multiple services of the same runtime, different frameworks, or a mix.\n\nThis skill covers **project structure and configuration**. For the actual deployment, defer to the **deployments-cicd** skill.\n\n## How It Works\n\nA service is an independently built unit within your project, deployed to the same domain under a unique subpath. At build time, Vercel builds each service separately. At request time, Vercel routes incoming requests to the correct service based on the URL path prefix (longest prefix wins).\n\n- Services are enabled via the `experimentalServices` field in `vercel.json` (see reference project).\n- `vercel dev -L` auto-detects frameworks and runs all services locally as one application, handling routing automatically. The `-L` flag (short for `--local`) runs without authenticating with Vercel Cloud.\n- Only `vercel.json` lives at the root. Each service manages its own dependencies independently.\n\n## Configuration\n\nDefine services in `vercel.json`:\n\n```json\n{\n \"experimentalServices\": {\n \"web\": {\n \"entrypoint\": \"apps/web\",\n \"routePrefix\": \"/\"\n },\n \"api\": {\n \"entrypoint\": \"backend/main.py\",\n \"routePrefix\": \"/server\"\n }\n }\n}\n```\n\nThe project's Framework Preset must be set to **Services** in the Vercel dashboard.\n\n### Configuration fields\n\n| Field | Required | Description |\n|----------------|----------|------------------------------------------------------------|\n| `entrypoint` | Yes | Path to the service entrypoint file or directory. |\n| `routePrefix` | Yes | URL path prefix for routing (e.g. `/`, `/api`, `/svc/go`). |\n| `framework` | No | Framework slug. Pins detection; auto-detected if unset. |\n| `memory` | No | Max available RAM in MB (128–10,240). |\n| `maxDuration` | No | Execution timeout in seconds (1–900). |\n| `includeFiles` | No | Glob patterns for files to include in the deployment. |\n| `excludeFiles` | No | Glob patterns for files to exclude from the deployment. |\n\nDo not add unknown fields — they will cause the build to fail.\n\n## Supported runtimes and frameworks\n\nServices is in beta. **Python** and **Go** are tested and production-ready. Other runtimes may work but are not yet validated.\n\n### Python\n\nWorks with FastAPI, Flask, Django, or any ASGI/WSGI application. Framework is auto-detected. Set `entrypoint` to the application file (e.g. `\"backend/main.py\"`). Dependencies go in `pyproject.toml` in the service directory.\n\n### Go\n\nSet `entrypoint` to the service **directory** (e.g. `\"backend\"`), not a file. **Must** set `\"framework\": \"go\"` explicitly in `vercel.json` — auto-detection does not work for Go services. Dependencies in `go.mod` in the service directory.\n\n### Other runtimes (untested)\n\nVercel supports Node.js, Bun, Rust, Ruby, Wasm, and Edge runtimes for functions. These can theoretically be used as services but are not yet validated.\n\n## Routing\n\nVercel evaluates route prefixes from longest to shortest (most specific first), with the primary service (`/`) as the catch-all. Vercel automatically mounts services at their `routePrefix`, so service handlers should **not** include the prefix in their routes.\n\nFor frontend frameworks mounted on a subpath (not `/`), configure the framework's own base path (e.g. `basePath` in `next.config.js`) to match `routePrefix`.\n\n## Environment variables\n\nVercel auto-generates URL variables so services can find each other:\n\n| Variable | Example value | Availability | Use case |\n|---------------------------------|------------------------------------------|--------------|---------------------------------------|\n| `{SERVICENAME}_URL` | `https://your-deploy.vercel.app/svc/api` | Server-side | Server-to-server requests |\n| `NEXT_PUBLIC_{SERVICENAME}_URL` | `/svc/api` | Client-side | Browser requests (relative, no CORS) |\n\n`SERVICENAME` is the key name from `experimentalServices`, uppercased. If you define an env var with the same name in project settings, your value takes precedence.\n\n## Usage\n\n1. Read `references/fastapi-vite/` for the canonical project layout.\n2. Adapt the structure to the user's chosen runtimes — services can use any supported runtime, not just the ones in the reference.\n3. Define service routes **without** the route prefix — Vercel strips the prefix before forwarding.\n4. Validate that each service in `vercel.json` has `entrypoint` and `routePrefix`. Only set `framework` when auto-detection fails (required for Go).\n\n## Output\n\nAfter scaffolding, present the created file structure to the user. After deployment, present the deployment URL (refer to the **deployments-cicd** skill for details).\n\n## Troubleshooting\n\n### 404 on routes after deployment\n\nThe project needs the Services framework preset:\n\n1. Go to Project Settings → Build & Deployment → Framework Preset\n2. Select **Services** from the dropdown\n3. Redeploy\n\n### Routes return unexpected results\n\n1. Ensure all services are picked up by `vercel dev` — check logs. If a service is missing, verify `vercel.json`. Try setting `framework` explicitly.\n2. Validate route prefix behavior: handlers declare routes without `routePrefix` (e.g. `/health`), but requests from other services use the full prefix (e.g. `/api/health`).\n3. For frontend services on a subpath, confirm the framework's base path config matches `routePrefix`.\n"
}SHA-256: a684015d06e7b672724888aee979571e2503a7a5d6506ffcefbb78815cc95d13