6eb572e: Add vercel edge-config backups for listing, inspecting, and restoring Edge Config backups.
Examples:
vercel edge-config backups my-storevercel edge-config backups my-store --backup-version <backup-version-id> --format jsonvercel edge-config backups my-store --restore <backup-version-id> --yes7cecf55: Make hand-written service-targeted route/rewrite destination config less repetitive and verbose by making the type discriminator optional.
{
"rewrites": [{
- "type": "service",
"service": "my_backend",
"path": "/api/$1"
}]
}
The explicit { "type": "service", "service": NAME } format continues to
validate. Normalized route output continues to include "type": "service", so
machine-facing config remains canonical.
5d37c78: Handle deployments containing very large files without crashing. Files larger than Node's fs.readFile limit (~2 GiB) are now hashed and uploaded by streaming instead of being read into a single Buffer (which threw ERR_FS_FILE_TOO_LARGE — "File size ... is greater than 2 GiB"), and the CLI upload progress no longer assumes every file is held in memory. When a file still exceeds the server's per-request upload limit (HTTP 413), the CLI now suggests --archive=tgz, which uploads the deployment in smaller chunks.
--prod shortcut for metrics queries, and update Speed Insights metric examples.vc build now writes experimentalServicesV2 services into the Build Output API config.json services array (previously only experimentalServices were included), so V2 services are recorded on the deployment.vercel deploy --dry to inspect the detected framework preset and local deployment file set without uploading or creating a deployment, with complete JSON output for non-TTY consumers.vercel dev.action/link (and newer ctaLabel/ctaUrl) fields on repo_links_exceeded_limit errors from vercel git connect instead of dropping them, so users hitting the projects-per-repository limit see the relevant next step and URL.vercel dev for standalone Node servers, including projects without a package.json, and reuse the server process between requests.services as the canonical multi-service project configuration and keep experimentalServicesV2 as a deprecated backwards-compatible alias.6a43bf2: Adding 2 additional headers to Vercel API calls
186014d: Fix vc dev erroring with "Project framework is set to 'services', but no
services are declared" for experimentalServicesV2 (services) projects. When
the dev server already has resolved services, it now skips zero-config builder
detection and lets the services orchestrator build and run them. Previously
detectBuilders ran with the remote framework: "services" setting but no
service config threaded in, which failed even though detection had succeeded.
186014d: Add an experimental container service runtime. A service with
runtime: "container" either builds its Dockerfile/Containerfile and pushes
the resulting OCI image to the Vercel Container Registry (VCR), or passes a
prebuilt image reference through as build output.
@vercel/container (new builder): authenticates to VCR with the project's
VERCEL_OIDC_TOKEN, ensures the repository exists, builds and pushes the
image, and emits a digest-pinned reference in handler (container functions
are type: "Lambda" with runtime: "container"; the platform surfaces
handler as the image downstream). Uses docker on developer machines and
buildah (daemonless) in the Vercel build container behind a shared
ContainerEngine interface. Supports vc dev via startDevServer (local
build/run, env parity, log forwarding) and prepareCache for buildah layer
reuse between builds. Build flow is instrumented with tracing spans
(non-secret diagnostics) and debug logging gated on BUILDER_DEBUG.@vercel/build-utils: add the ContainerImage build-output type.@vercel/fs-detectors: resolve container services from vercel.json
(the services config and its deprecated experimentalServices /
experimentalServicesV2 aliases). A Dockerfile, Containerfile, or
*.dockerfile entrypoint triggers a build; any other entrypoint is treated as
a prebuilt OCI image reference.vercel: wire container output into vercel build result writing and
config validation.Buildah specifics in the build container: host networking for RUN steps,
native storage on the XFS volume (deferring to the image's
), zstd push compression, and registry credentials read from the
provisioned auth file when present. Several knobs are available for debugging:
, ,
, and .
vercel inspect now supports Vercel dashboard URLs and deployment IDs without prefixes.experimentalServicesV2 for bindings in vc dev8dec9ea: Add deploy-manifest as an extension of project manifest.
d99dbf8: Add vercel domains verify <domain> for DNS misconfiguration feedback. The command checks the domain's DNS configuration, reports dashboard-aligned configuration and project-verification states, triggers a verification re-check when needed, and lists actionable fixes: recommended A/CNAME records, Vercel nameservers, conflicting records, DNSSEC guidance, and the TXT ownership challenge. Domains eligible for automatic configuration also receive a Domain Connect URL, with manual DNS guidance as a fallback. Supports --project, --strict, and --format json; non-interactive runs emit structured status, simultaneous issue details, automatic-configuration metadata, and shell-safe, context-preserving next commands. Human and structured output share one diagnosis so status, remediation, and exit behavior stay consistent. The command exits non-zero when action is required so scripts and agents can gate on it.
a5245fd: Add vercel flags segments commands for listing, inspecting, creating, updating, and deleting feature flag segments.
Examples:
vercel flags segments ls
vercel flags segments inspect beta-users --json
vercel flags segments create beta-users --label "Beta users" --add include:user.id=user_123 --add
request.path transforms on routes and high-level rewrites, lowering path-to-regexp parameters such as /:path* to low-level capture references such as /$1
[config] support request path transforms in the router builder
[cli] preserve request path transform syntax and environment metadata across AI/manual route editsvc logs, and follow the latest READY production deployment when using --project --follow.gantt value for vercel traces get --view to waterfall.experimentalServicesV2 config identifies an already-built entrypoint as a service, and disable immutable static asset env flags for service-specific builds.vercel blob signed-token and vercel blob presign commands, and allow blob presign to accept explicit delegation/client-signing tokens or issue them automatically when omitted.vercel metrics function duration example to use the supported metric name.flags command in CLI help output.vc dev.traces create as an alias for curl --tracevercel blob store commands work non-interactively for agentsVercel CLI <version> without the Node.js suffix, and vercel upgrade reports the version it upgraded to and says "No upgrade available" when already on the latest version.vercel buy addon customEnvironment <quantity> by adding customEnvironment to the CLI add-on allowlist and help examples.vc metrics: source groupable dimensions from the metric schema instead of a hardcoded list, preserve the requested time bounds so the query endpoint owns bucket rounding, and add an optional --bucket-timezone flag for calendar bucket alignment (it only affects bucket boundaries, not the --since/--until range or output timestamps).--functions-beta / --no-functions-beta deploy flags and the size-limit hint messagingpublic from deployment test fixtures and helpers, and stop the CLI from sending the removed public field on deploy (including the --public flag).vercel metrics to combine repeated --filter/-f values with OData and.--no-wait, --skip-domain)vercel ai-gateway rules add/list/edit/remove commands--category / -c filter to vercel integration discover and a new vercel integration categories subcommand. The filter scopes marketplace integrations to a single category (e.g. storage, ai, monitoring) — filtering happens server-side. The new categories subcommand lists the valid slugs (Slug | Title table or --json for scripts/agents).vercel connect create --data now accepts @<path> to read the JSON from a file and @- to read it from stdin, so non-managed connector credentials (e.g. client secrets) no longer have to be passed inline where they leak into shell history and process listings. Inline --data still works but now warns when it looks like it contains a secret.vercel connect command output (attach, detach, remove, revoke-tokens, and the list table's type/projects cells), not just the list UID/name cells. Prevents terminal escape injection from maliciously-named connectors visible across a team.vc api --spec-url <url> for loading endpoints from a custom OpenAPI spec instead of the default public Vercel spec. Custom specs are fetched fresh, can use the current CLI token to pass Vercel deployment protection via the SSO handshake, and replace the public spec entirely for listing, interactive selection, and tag/operation resolution.vc dev for experimentalServicesV2.EUNSUPPORTEDPROTOCOL inside pnpm/yarn workspaces8d8e871: Evaluate the maxDuration upper bound at validation time so VERCEL_CLI_SKIP_MAX_DURATION_LIMIT works regardless of import order.
The gate was read when @vercel/build-utils' functionsSchema was constructed and when the CLI compiled its vercel.json validator — both at module load. Any process that imports these modules before setting the env var baked in the default 900-second maximum and ignored the flag, failing with Invalid vercel.json - functions[...].maxDuration should be <= 900.
@vercel/build-utils now exposes getFunctionsSchema(), which reads the limit at call time (the existing functionsSchema const is kept but deprecated). The CLI builds and compiles its config validator lazily, caching one validator per resolved limit, so setting the variable after import takes effect. Default behavior is unchanged — the 900s maximum, the lower bound, and the integer check are all still enforced when the variable is unset.
Updated dependencies [8d8e871]
strip, which removes the exported napi_* symbols that native
addons (@napi-rs/keyring) bind against at dlopen time. The runtime is now stripped with
strip -SXx, which keeps exported symbols. Also makes the @vercel/vc-native bin shim launch
the platform binary directly when the postinstall script did not run (pnpm blocks dependency
build scripts by default), instead of always failing.vercel upgrade crashing with ENOENT: no such file or directory, realpath '…/.pkg-staging/pkg.js'
in the native binary. The command tried to realpath process.argv[1], which points into the binary's
virtual filesystem snapshot. Native installs now detect the package manager (npm, pnpm, or yarn) from
the binary's real install location and suggest the matching global upgrade command.sandbox CLI to 3.1.2 (@vercel/sandbox 2.1.1) to fix vc sandbox commands crashing with a segmentation fault.
login, whoami, logout, and any
command that reads config) with ERR_MODULE_NOT_FOUND: '@vercel/cli-auth'. The package is now
staged into the binary. The binary release is also hardened with a real command smoke test and a
build-time check that every statically-imported dependency is bundled, so a binary missing a
required package can no longer be released.f6a6e55: Only offer the Claude Code plugin in projects that have actually been used with Claude Code. Previously the prompt could appear in any directory as long as a ~/.claude directory existed on disk. The CLI now checks whether the current project (walking up from the working directory) appears in Claude Code's per-project history before offering the plugin.
a4f7dc9: CLI help and command-schema cleanups from the docs audit:
blob: remove orphan addStoreSubcommand, removeStoreSubcommand, and getStoreSubcommand exports that duplicated the wired create-store / delete-store / get-store specs. Handlers and telemetry now import the actual wired subcommand definitions.dns list: the <domain> argument is now declared required: false to match the runtime, which already supports listing every domain's records when no argument is given.routes delete: declare the <name-or-id> argument as multiple: true so the help synopsis and schema match the variadic behavior already supported by the handler and shown in the existing examples.init: fix the "Initialize example project into specified directory" help example, which was missing the init literal (vercel <example> <dir> → vercel init <example> <dir>).promote status and rollback status: declare --timeout on the status subcommand options so --help matches the examples (promote status --timeout 30s, rollback status --timeout 30s). The flag is also kept on the parent command, where parsing actually happens.33efa25: Added non-managed Connex connector creation with --data and optional --connector-type.
3a2d61e: Add vercel domains search <query> for client-side Domain Discovery with fast bulk availability and registrar pricing, renewal pricing, --available and exact TLD filters, ordering, candidate windows of up to 200 domains, and JSON output.
c5eeb30: Gate the client-side 900-second maxDuration upper bound behind the VERCEL_CLI_SKIP_MAX_DURATION_LIMIT environment variable. The limit is now owned by a single helper in @vercel/build-utils instead of being hardcoded in multiple validators. When the variable is set to , the client-side maximum is skipped and validation defers to the server. Default behavior is unchanged — the maximum, the lower bound, and the integer check are all still enforced when the variable is unset.
f5ab607: [evals] Shrink eval result uploads and fix run discovery
The eval ingest transform (transform-agent-eval-to-canonical.js) now excludes raw transcripts (transcript-raw.jsonl) from the --upload-artifacts all path, roughly halving each ingest payload. The parsed transcript.json is still uploaded and still read for resolvedModels metadata.
It also normalizes provider-prefixed model paths before upload. Models that resolve to provider/model (e.g. openai/gpt-5.5-pro) write results one directory deeper, pushing the timestamp past the experiment/model/timestamp shape the ingest endpoint discovers runs from, which previously failed with Could not discover any experiment/model/timestamp runs. The model is now collapsed to a single segment (openai-gpt-5.5-pro) so discovery succeeds.
2b31813: Fix vc build --standalone failing to zip Lambdas when run from a monorepo
subdirectory. When dependencies are hoisted to the monorepo root (e.g. pnpm's
node_modules/.pnpm/...), the recorded function file paths could escape the
function root (../../node_modules/...), which later caused zipping to fail
with invalid relative path: ../../node_modules/.... These paths are now
re-anchored inside the function so the standalone output is self-contained.
252c6eb: [cli] Show claim in vercel integration resource --help
The claim subcommand was missing from resourceSubcommand.subcommands, so vercel integration resource --help only listed connect, disconnect, remove, and create-threshold. The legacy vercel integration-resource --help and the dispatcher's runtime resolution both already included claim — this was purely a help/discoverability gap on the canonical nested path. Adds claimSubcommand to the subcommand list and updates the parent description accordingly.
0a170fd: [services] wire experimentalServicesV2 into fs-detectors.
Updated dependencies [aeb5bfa]
Updated dependencies [0a170fd]
integration list shows a new Claim column, integration-resource claim <name> opens the provider claim URL in the browser and polls until completion, and integration add offers to claim sandbox resources after provisioning with new --claim / --no-claim flags.fddeb55: Add configurable credentials storage handling across the CLI auth stack. Storage of credentials can be configured by the new credStorage key in global config.json or the new VERCEL_TOKEN_STORAGE environment variable. The environment variable takes precedence over the configuration key. Accepted values are file (store credentials in auth.json), keyring (store credentials in system keyring, e.g macOS Keychain or Secrets Service on Linux), and auto (try storing in keyring if available, fall back to file if keyring is not available).
@vercel/oidc supports keyring-stored authentication credentials by delegating the OIDC minting to the CLI executable via @vercel/cli-exec.
a869874: [connect] Rename user-facing "client" references to "connector"
Updates the vercel connect CLI commands to use the official "connector" terminology in all user-facing surfaces: help text argument names (remove/attach/detach), usage strings in error messages, and the --format=json output key (clients → connectors) for vercel connect list.
200aa3b: [connect] Forward --scopes and --installation-id into the authorize/install recovery URL
When vercel connect token hits an action-required error (user_authorization_required or client_installation_required), the CLI builds an authorize/install URL for the user to complete consent in the browser. Previously this URL carried only teamId and request_code, dropping the --scopes and --installation-id the user supplied. As a result the consent flow fell back to provider defaults (e.g. Slack's users.profile:read), and the post-authorization token retry mismatched the requested scopes. The CLI now forwards scopes (comma-joined) and installationId as query params, which the authorize and install endpoints already accept.
3019788: [services] Remove the services field from vercel.json and the VERCEL_USE_SERVICES gate.
fe893ec: [services] Add experimentalServicesV2 field to vercel.json implementing the new schema for services.
d22d812: [cli] Nest integration-resource under integration resource and add integration resource connect
The marketplace resource subcommands (disconnect, remove, create-threshold) are now discoverable under vercel integration resource <sub>. The standalone vercel integration-resource and vc ir forms still work as hidden aliases — no scripts or tests break.
Adds a new vercel integration resource connect <resource> [project] command (the inverse of disconnect). Accepts --environment (repeatable, defaults to all three), --prefix for env var namespacing, --yes, and --format=json. Defaults to the project linked in the current directory when <project> is omitted.
Tightens to error (exit 1) when the specified project is not connected to the resource, instead of exiting 0 with a "not found" message.
vercel connect revoke-tokens subcommand to revoke tokens issued from a connector._deploy eval grader passing --token "" in the Docker sandbox where VERCEL_TOKEN isn't in process env. Only pass --token when set; CLI falls back to auth.json otherwise.experimentalServices from Build Output API config during vercel build.vercel env add to ask whether a value is sensitive before collecting the value and selecting environments. Sensitive adds hide Development; teams with the sensitive env policy still prompt, and non-sensitive adds are limited to Development with clearer messaging.env support for the new service-ref shape for services.--standalone flag in pnpm monorepos by skipping external node_modules symlinks and copying traced files at their logical paths instead.--open and --view flags to vercel traces get. --open opens the trace in the Vercel Dashboard instead of printing the markdown summary. --view <timeline|tree|gantt> selects the dashboard view and is only valid with --open.--type, --service, and --search filter flags to vercel connect list.vercel domains check subcommand for registrar availability and extend
vercel domains price to support bulk price lookups for multiple domains.overlay/vercelstorage.confVERCEL_CONTAINER_ENGINEVERCEL_VCR_STRICT_STORAGEVERCEL_VCR_DISABLE_LAYER_CACHEVERCEL_VCR_FORCE_LOGIN007af8f: Deduplicate the team billing settings URL into a shared getTeamBillingUrl helper.
edb7256: [vc dev] Apply route transforms under vercel dev.
1c5d3b3: Fixed scope resolution for Northstar accounts whose username collides with the slug of their default team.
vc whoami showing "Active team: my-user") while requests were sent with no teamId, silently scoping to the resource-less personal account. This caused commands like vc projects ls to report "No projects found" even though the team has projects.--scope <name> now resolves against the user's teams before falling back to personal-account handling. A team whose slug matches the user's username (e.g. a Northstar default team) can now be selected by name instead of being rejected with "You cannot set your Personal Account as the scope."ded2d92: Refresh VERCEL_OIDC_TOKEN after vercel link without overwriting other
variables or formatting in an existing .env.local file.
Updated dependencies [fdb6121]
Updated dependencies [9fb2976]
Updated dependencies [186014d]
Updated dependencies [186014d]
Updated dependencies [186014d]
Updated dependencies [e6759d0]
Updated dependencies [68ed45c]
Updated dependencies [cb0988f]
19f9eed3: Nest Build Output API files for experimentalServicesV2 under .vercel/output/services/<name>.
fb30b76: Strip ANSI escape sequences from connector UID and name cells in connect list table output.
Updated dependencies [c5eeb30]
Updated dependencies [09c39af]
disconnectBoth commands emit a structured outputAgentError payload with reason: confirmation_required and a next: [{command}] retry hint when run in non-interactive / agent mode without --yes. When connect fails because an env var with the same name already exists on the target project, the error names the conflicting variable and suggests --prefix or vercel env rm as remediation.
Updated dependencies [3019788]
Updated dependencies [fe893ec]
Updated dependencies [fddeb55]