Vercel CLI
npx @buildinternet/releases get vercel-clinpx @buildinternet/releases get vercel-clipnpm deploy --frozen-lockfile (hoisted layout) and prune the tree to what the CLI's non-builder runtime dependencies can reach, instead of a handwritten, flattened allowlist. The binary now ships exactly the versions in pnpm-lock.yaml, nested dependency versions are preserved (fixes vercel sandbox loading lru-cache@6 instead of lru-cache@10), and platform-specific optional dependencies are resolved for the --target platform. Staging happens outside the repository so pkg cannot follow stray requires into workspace node_modules, and dependency test files are excluded from the snapshot. The binary smoke test accepts the usage exit code 2 that most --help commands return..vercel/builders copy does not match the pin, instead of npm-installing the preview tarball. Publish preview tarballs at flat filenames (e.g. vercel-node.tgz) so yarn 1 and pnpm 8 can both install them. Preview pack also hoists nested registry deps of those tarball pins onto the parent (e.g. js-yaml from @vercel/python-analysis) because yarn 1 does not install them.vercel flags split and vercel flags rules add help examples to use false/true variant values, and treat flags / @flags-sdk/vercel as notable dependencies in vercel skills.--trigger-branch help on vercel connect create and vercel connect attach. The flag targets a git branch's preview deployment; production is selected by omitting the flag, not by passing production as a branch name.firewall overview failing on plans without IP Bypass. The command no longer errors when the bypass endpoint is unavailable, and reports system mitigation status from the project rather than the plan-gated bypass API. With --json, a bypassUnavailable field now explains why bypass is null.vercel deploy startup time by lazy-loading modules that are only needed for first-time project setup, --dry output, and experimental services detection (@vercel/frameworks, @vercel/fs-detectors, the vercel.json schema validator, and vercel env pull).vercel traces config ls.vercel build on Windows for nested static App Router routes (NEXT_MISSING_LAMBDA). Lambda keys from getServerlessPages now use posix separators so routes like /a/b look up correctly..vercel/project.json or a matching project in .vercel/repo.json, so commands like vc ai-gateway are not flagged just because a matching folder exists.next build) — with [vc:service:<name>]. The Vercel build-container strips this tag and uses it to attribute each build log line to a service. Single-project builds are unaffected.schedules from vercel.json into the Build Output API config.json during vercel build, and validate the property against the schedules schema--scope for teams that the user can access without a direct membership.VERCEL_EXPERIMENTAL_BUILD_CONCURRENCY. The default of 1 preserves fully-sequential behavior; values above 1 (an integer, a percentage of available parallelism, or auto) run fork-eligible service builds concurrently, grouped by install scope so package-manager installs never race.vercel connect contacts add to register phone contacts for Connect connectors.vercel flags rules and segment rules for Timestamp attributes. Input needs a full date and time; without a timezone, the machine's timezone applies.flags use-targeting to enable rules, keeping the current fallthrough unless --default-variant replaces it.vc version describes installer, native, and package-manager installs with the same language. When the package manager is unknown, vc version says npm is assumed. vc upgrade --disable-binary now fails on the native CLI instead of writing a no-op config change.vercel connect --help and its subcommands.--region/--failover-regions) to vercel sandbox.vercel sandbox ls).f42a78a: Serve a shared Runtime Cache from vercel dev. Every service, sidecar, function, and framework dev command is pointed at one in-memory store owned by the dev server, so a value written by one process is readable by the others the way it is in a deployment. Previously each process fell back to its own in-process cache and cross-service reads always missed. A RUNTIME_CACHE_ENDPOINT you set yourself still takes precedence.
b9339d3: Derive monorepo-aware default build commands for services
Projects that define services in vercel.json took a build path that bypassed
monorepo default settings entirely, so a service in a Turborepo/Nx workspace fell
through to its leaf package.json build script instead of running through the
monorepo task graph and build cache — unlike the equivalent non-services project.
Each configured service without an explicit buildCommand now gets a default
derived from its own root (e.g. turbo run build). Explicit
services.<name>.buildCommand values, service roots with a vercel-build
script, services on a non-JavaScript runtime (Python, Go, Rust, Ruby,
container), and repos without a detected monorepo manager are all left
untouched. Gated behind VERCEL_BUILD_MONOREPO_SUPPORT.
connect create <server-url> auto-picks the connection method the API resolved for that URL instead of re-asking through the target and method choosers.7ab8f26: Split flag evaluation bucket variants into variantId and variantValue, and label evaluations that used the code default as Default in Code.
44be84d: Default middleware.[jt]s to the Node.js runtime for projects created on or after 2026-09-01, and warn that the edge runtime is deprecated.
Outside of vercel dev the new default also requires VERCEL_MIDDLEWARE_DEFAULT_RUNTIME_NODEJS=1, which the platform sets during rollout. An explicit export const config = { runtime: 'edge' } keeps the edge runtime.
1240946: Recover vcr login from a stale macOS keychain entry ("The specified item already exists in the keychain. (-25299)") by logging out of the registry and retrying the login once.
Updated dependencies [44be84d]
Updated dependencies [2c363fd]
bulkRedirectsPath redirects in vercel dev.vercel ai-gateway budgets to every budget scope: set|remove accept user <email|username|id> and api-key <name|id> alongside team and project (api-key writes go through the api-keys quota endpoint; remove archives the key's quota), budgets inspect <scope> [name] shows a single budget (including default-inherited ones), and budgets list shows member handles and API key names instead of raw scope ids. Default budgets are surfaced during CRUD: budgets remove names what takes over (the scope's default, or no spend cap), budgets defaults set|remove state which resources they affect, and api-keys create without --budget lists the caps a new key still counts toward. Also fixes budgets defaults set resetting the refresh period when re-run with only --limit, and requires --yes for removals when stdin is not a TTY.budgets defaults set|list|remove accept the user scope (a per-member spend limit applied to every team member without their own budget), the budgets ls footer names an active user default, and api-keys create counts it among the caps a new key inherits.vc build output validation now understands the services/<name>/ layout. A services-only build no longer false-warns about missing functions/static output, and each service's config.json and deployable output are validated the same way as the top-level Build Output API directory.build() in a forked child process during vercel build. This isolates each build's stdout/stderr and environment, so build output can be captured (and later attributed per service), and lays the groundwork for parallel builds. Builders that can't cross a process boundary — the built-in @vercel/static, and builds that register a build callback — continue to run in-process.vercel project update: --fluid-compute, --function-cpu, --sandbox-region, --build-machine, --elastic-concurrency, and --node-version. Paid-plan settings are checked against the resolved project only when their value changes. Lower-risk updates support --yes in TTY and non-TTY modes, while settings that may affect charges always require interactive confirmation. Resource configuration updates send only changed fields so the API can preserve or normalize related settings, and elastic build machine selection is detected and reported correctly.claude plugins list and fetched the latest plugin version over the network after every deploy, adding ~200mssrc/main.rs so api/**/*.rs function projects (which declare a [[bin]] per handler) remain framework-less and build zero-config; [[bin]]-only servers and cargo workspaces are supported by setting the Rust preset manually. Projects with an explicit output directory (e.g. wasm frontends built with Trunk) keep the static-build path instead of the Rust runtime, while preserving api/**/*.rs functions, and committed prebuilt output is served directly when no build command is configured.vercel traces config ls, which lists the trace sampling rules for a project as a table of environment, path prefix, and percentage rate, along with the count against the ten-rule limit. A project with no rules prints an empty state and the command that adds one. --json prints the bare rows in the same vocabulary the command line uses, and non-interactive runs print an agent envelope with the project, a message, and suggested next commands. A bare vercel traces config prints the group help. The project comes from the linked directory, or from --project looked up in the scope --scope selects; both are resolved to ids before the request, so a team slug cannot silently read a same-named project in the personal account. A --scope that disagrees with the linked project is reported instead of applied. When the API refuses the request, a non-interactive run reports it on stdout with a machine-readable reason.vercel traces config rm <environment> [requestPath], which removes trace sampling rules. A path prefix removes the one rule that carries it, --default removes only the rule that covers all paths, and neither removes every rule for that environment. rm any removes only the rules that apply to every environment, not every rule in the project. The command lists every rule it is about to remove and asks once to confirm. That answer is the only consent it takes: no flag stands in for it, so a session that cannot prompt — --non-interactive, an agent, or a caller with no TTY — is refused rather than left waiting. It fails without writing and reports which rules were at risk, along with the command to run by hand. The path prefix in that command is quoted, so a prefix carrying shell metacharacters cannot run as a second command when it is pasted into a shell. When nothing matches, the command fails and makes no write. Drain domains and ignore paths are read and written back untouched.vercel traces config set <environment> <rate> [requestPath], which adds or replaces one trace sampling rule without a confirmation prompt. The environment is any, preview, or production, and the rate is a whole percentage from 1 to 100; both are checked before the command calls the API. A rule is identified by its environment and path prefix, so running set again on the same pair replaces the rate and the success line reports the old rate, the new rate, and the rule count. Drain domains and ignore paths are read and written back untouched, as is every rule the command was not asked to change: only the rule being written is rebuilt from the command line, so a rate the CLI cannot spell — the API accepts any fraction, the command line whole percentages — is not rounded by an edit to a different rule. An eleventh rule is refused with an error that names the ten-rule limit.b83c139: Remove the beta wording from vercel connect ahead of general availability.
f8add0a: Replace prerenderClassification on Prerender with initialMetadata.
The platform consumes only the request-time compute mode and the HTML shell
size, so the flattened four-field taxonomy (routeType, response,
compute, htmlSize) is reduced to a single grouped field:
initialMetadata?: {
compute: 'blocking' | 'resuming' | 'static';
htmlSize?: number;
}
The group is named initialMetadata because the values describe the
deployment as it was built: revalidation can regenerate a route's output over
the deployment's lifetime, so readers must treat them as initial values, not
live state. @vercel/next reads compute and htmlSize off the v4
prerender-manifest taxonomy and deliberately ignores routeType and
response; the values are still carried unvalidated so a compute mode added
by a future framework release cannot hard-fail a deploy, and they are still
set only on the primary output of each prerender group. htmlSize: 0 is a
real size (a shell that postponed everything); htmlSize is absent when
there is no HTML shell to measure (route handlers, Pages Router). Absence of
the whole group remains legitimate (notFoundRoutes, Pages Router
fallback: false, older frameworks).
803da2a: Restrict anonymous deployment credentials to the current user.
Updated dependencies [90543c2]
Updated dependencies [f8add0a]
--yes from vercel blob delete-store. Deleting a Blob store cannot be undone, so it now always requires interactive confirmation and can no longer be run non-interactively (CI, scripts, or agents).vercel dns update via --srv-priority, --srv-weight, --srv-port, and --srv-targetvercel project update accepts --sandbox-region and --sandbox-failover-regions, and vercel project inspect prints a Sandbox section with the configured regions.vercel project resume to restore production traffic for a paused projectpreview-pack-mismatch, so a recoverable install error became fatal.vercel dev --local.@vercel/fs-detectors are no longer available.vercel dev file watcher ignoring anchored ignore patterns. Absolute paths from the watcher were passed to a filter that expects paths relative to the project root, so any pattern with a leading slash never matched. This left the default /target rule inert for Cargo projects, causing vercel dev to recursively watch the entire build directory, and silently ignored anchored entries such as /dist in a .vercelignore.--help examples for recently added commands: dns update and dns inspect in vercel dns --help, domains renew and domains auto-renew in vercel domains --help, and project pause, project resume, project members add/remove, project observability, project web-analytics, and project speed-insights in vercel project --helpvercel dns update now confirms before overwriting a record and handles non-interactive/agent mode. Interactive runs prompt for confirmation (no --yes flag); when a prompt isn't possible (non-interactive, agent, or no TTY) the command refuses to act and emits a structured agent-output payload (interactive_confirmation_required) telling the caller a human must re-run it in a terminal. Local validation errors are likewise surfaced as parseable JSON in non-interactive mode instead of stderr-only text.vercel domains auto-renew <domain> on|off for registrar-managed domains, with structured JSON output (--json/--format) and structured errors when run in non-interactive/agentic modevercel domains renew <domain> for registrar-managed domainsvercel project members add to add a member to a project by email, username, or user id with a role. The add requires interactive confirmation and is refused for agents and non-TTY pipes with a structured confirmation_required payload. Invalid team/project role combinations are translated into actionable guidance listing which project roles each team role can hold.vercel project members remove to remove a member from a project (resolves email/username/uid via the project members listing, with --yes to skip confirmation)vercel project observability enable and vercel project observability disable to toggle Observability Plus for a project. Both actions ask for confirmation first and emit an action_required payload in non-interactive or agent contexts.visibility from vercel env add and vercel env update. Remove the VERCEL_ENV_VAR_CONFIG_SECRET_UI opt-in. Allow secrets in Development.vercel project speed-insights disable to turn off Speed Insights. Disabling asks for confirmation and emits an action_required payload in non-interactive or agent contexts.vercel project web-analytics disable to turn off Web Analytics for a project. Enabling now asks for confirmation first; in non-interactive or agent contexts it emits an action_required payload instead of enabling silently. On Hobby the confirmation explains that Web Analytics is free with the limits documented at https://vercel.com/docs/analytics/limits-and-pricing, while Pro and Enterprise keep the paid-feature charges warning. Disabling also asks for confirmation and emits an action_required payload in non-interactive or agent contexts.--bypass-all-settings to vercel ai-gateway api-keys create. When passed, the key is created with the bypassAll metadata fact exempting it from all of the team's restrictions (ZDR-only models, the provider/model allowlist, and the HIPAA and disallow-prompt-training filters); the API only accepts it from team owners. Adds telemetry tracking for the new flag and surfaces it in api-keys inspect.payment-failed / unexpected-error), but the CLI compared underscored literals, making the "Your card was declined." branch unreachable for domains buy and domains transfer-in--prebuilt filePathMap entries under default-ignored dependency/output directories (node_modules, .next, Yarn PnP, Python venv, Rust target) even when those paths are also listed in .vercelignore. Other ignore rules, including .env* secrets, are still applied.c2b4241: Add vercel dns inspect <id> to show a single DNS record in full
cd7eb26: Add vercel dns update <id> to edit an existing DNS record in place
3e66683: Add an opt-in environment flag for routing metrics catalog and query requests through the Observability v1 API, announce the upcoming KQL-only filter syntax, and omit backend execution statistics from JSON output.
36cca20: Add vercel project pause to pause production traffic for a project
2ada476: Upgrade the bundled Sandbox CLI from 3.4.0 to 4.0.0, catching up 10 stable releases. Behavior changes that reach vercel sandbox users:
fork now copies the source sandbox's environment variables. 3.4.0 documented the opposite ("env vars are NOT copied and must be re-supplied via --env"); Sandbox.fork() now calls POST /v2/sandboxes/:name/fork, which copies env and image server-side (SDK 2.9.0, vercel/sandbox#259). Anything secret in a source sandbox propagates into forks by default. Flags passed to fork override the copied values.--image or --runtime previously used the node24 runtime on Amazon Linux 2023; they now use vercel/sandbox/universal, based on Ubuntu with Node.js 24, Bun, Python 3.14, coding agents, and common development and debugging tools. --runtime is deprecated in favor of --image and existing --runtime calls keep working through the legacy v2 API. Pass --image vercel/sandbox/node:24 for an Ubuntu-based equivalent of the old default.sandbox list renames the RUNTIME column to RUNTIME/IMAGE, falling back to the image reference for image-based sandboxes (3.5.0, vercel/sandbox#253). This breaks anything parsing that output.sandbox sh is no longer deprecated (3.4.1, vercel/sandbox#241).vercel sandbox --help shows vercel sandbox ... rather than the standalone sandbox ... form that is not on PATH for Vercel CLI users (vercel/sandbox#269).The pin had been frozen at 3.4.0 since 2026-07-03 because the update-sandbox workflow that bumps it has never run, so vercel sandbox and a current standalone sandbox install booted different operating systems from an identical command.
~/.vercel.after() callbacks registered from WebSocket close handlers to run during vc dev.vercel comments crashing in the native binary when rendering comment previews.vc dev failing with ENOENT ... copyfile '/snapshot/...' in the native binary when the devCommand triggers the Next.js dev WebSocket shim. The shim is now extracted from the SEA virtual filesystem with a read+write instead of copyFileSync, which does not support copying across the VFS boundary.--temporary for deployments without credentials.e1aa02b: Native binary builds now embed a pinned builders manifest in the staged package.json. Previously the binary shipped without any builders pins, so importBuilders installed builders from npm latest instead of the versions the CLI was released with.
The native binary now resolves Builders exclusively from the Builders directory (no fallback to CLI-bundled dependencies), and the directory is configurable via VERCEL_BUILDERS_DIR (default: .vercel/builders in the project). Builder installs respect project and user npm settings, including minimum release age. If npm rejects a CLI-pinned Builder version, the CLI warns and retries the original bare Builder spec so npm can select an allowed version.
20f1ba4: vc security check --findings lists every stored finding by paging the findings endpoint, instead of the first 100 samples.
36dead1: Publish PR binaries and workspace tarballs under immutable commit-scoped Blob paths.
Updated dependencies [bded29c]
Updated dependencies [a684b77]
vercel kms (beta) for managing KMS issuers, signing keys, and project grants. Issuers can be listed, inspected, created, imported, renamed, and deleted; signing keys can be added, imported, activated, and revoked; and project grants can be added, updated, and removed./metrics/v1 API proxy, while preserving the existing schema and query paths for vercel.* metrics.--limit and --next while preserving existing pagination flags as compatibility aliases.vercel dev failing with PROXY_AND_BUILDS for any project that configures proxy in vercel.json. The dev server synthesizes the proxy build into its in-memory config and then re-ran the authored-config validator over that derived plan, which rejected the pairing it had just created itself.vercel env pull runs in an unlinked directory, then continue pulling environment variables in the same invocation.vercel buy addon observabilityPlus.