Develop. Preview. Ship.
$ npx -y skills add vercel/vercel --agent claude-code
Run the curl in your terminal, the rest in Claude Code.
Repo: vercel/vercel
What's inside

Vercel’s AI Cloud is a unified platform for building modern applications, giving teams the tools to be flexible, move fast, and stay secure while focusing on their products instead of infrastructure.
Get started by importing a project, choosing a template, or using the Vercel CLI. Then, git push to deploy.
The standard npm installation remains unchanged:
npm i -g vercel
Native CLI binaries are distributed separately and do not affect the vercel npm package. To opt into the native binary and replace existing global vercel and vc commands, install the native package explicitly:
npm i -g @vercel/vc-native --force
The --force flag allows npm to replace existing global vercel and vc bin links. Users who do not install @vercel/vc-native continue using the regular Node.js-based CLI from npm i -g vercel.
Platform-specific packages are also available for direct installation when a specific binary is needed:
npm i -g @vercel/vc-native-darwin-x64 --force
For details on how to use Vercel, check out our documentation.
This project uses pnpm to install dependencies and run scripts.
You can use the vercel script to run local changes as if you were invoking Vercel CLI. For example, vercel deploy --cwd=/path/to/project could be run with local changes with pnpm vercel deploy --cwd=/path/to/project.
When contributing to this repository, please first discuss the change you wish to make via Vercel Community with the owners of this repository before submitting a Pull Request.
Please read our Code of Conduct and follow it in all your interactions with the project.
This project is configured in a monorepo, where one repository contains multiple npm packages. Dependencies are installed and managed with pnpm, not npm CLI.
To get started, execute the following:
git clone https://github.com/vercel/vercel
cd vercel
corepack enable
pnpm install
pnpm build
pnpm lint
pnpm test-unit
Make sure all the tests pass before making changes.
You can use pnpm vercel from the cli package to invoke Vercel CLI with local changes:
cd ./packages/cli
pnpm vercel <cli-commands...>
See CLI Local Development for more details.
Once you are done with your changes (we even suggest doing it along the way), make sure all the tests still pass by running:
pnpm test-unit
from the root of the project.
If any test fails, make sure to fix it along with your changes. See Interpreting test errors for more information about how the tests are executed, especially the integration tests.
Once you are confident that your changes work properly, open a pull request on the main repository.
The pull request will be reviewed by the maintainers and the tests will be checked by our continuous integration platform.
There are 2 kinds of tests in this repository – Unit tests and Integration tests.
Unit tests are run locally with jest and execute quickly because they are testing the smallest units of code.
Integration tests create deployments to your Vercel account using the test project name. After each test is deployed, the probes key is used to check if the response is the expected value. If the value doesn't match, you'll see a message explaining the difference. If the deployment failed to build, you'll see a more generic message like the following:
[Error: Fetched page https://test-8ashcdlew.vercel.app/root.js does not contain hello Root!. Instead it contains An error occurred with this application.
NO_STATUS_CODE_FRO Response headers:
cache-control=s-maxage=0
connection=close
content-type=text/plain; charset=utf-8
date=Wed, 19 Jun 2019 18:01:37 GMT
server=now
strict-transport-security=max-age=63072000
transfer-encoding=chunked
x-now-id=iad1:hgtzj-1560967297876-44ae12559f95
x-now-trace=iad1]
In such cases, you can visit the URL of the failed deployment and append /_logs to see the build error. In the case above, that would be https://test-8ashcdlew.vercel.app/_logs
The logs of this deployment will contain the actual error which may help you to understand what went wrong.
While running the full integration suite locally is not recommended, it's sometimes useful to isolate a failing test by running it on your machine. To do so, you'll need to ensure you have the appropriate credentials sourced in your shell:
https://vercel.com/<MY-TEAM>/~/settings.echo 'export VERCEL_TOKEN=<MY-TOKEN> VERCEL_TEAM_ID=<MY-TEAM-ID>' >> ~/.zshrcFrom there, you should be able to trigger an integration test. Choose one that's already isolated to check that things work:
cd packages/next
Run the test:
pnpm test test/fixtures/00-server-build/index.test.js
[!NOTE] If you receive a
401status code while fetching the deployment, you need to disable Deployment Protection on the project.
Some of the Builders use @vercel/nft to tree-shake files before deployment. If you suspect an error with this tree-shaking mechanism, you can create the following script in your project:
const { nodeFileTrace } = require('@vercel/nft');
nodeFileTrace(['path/to/entrypoint.js'], {
ts: true,
mixedModules: true,
})
.then(o => console.log(o.fileList))
.then(e => console.error(e));
When you run this script, you'll see all the imported files. If files are missing, the bug is in @vercel/nft and not the Builder.
Sometimes you want to test changes to a Builder against an existing project, maybe with vercel dev or actual deployment. You can avoid publishing every Builder change to npm by uploading the Builder as a tarball.
cd ./packages/nodepnpm build to compile typescript and other build stepsnpm pack to create a tarball file. It is imporant to not use pnpm pack because it will not preserve the file permissionsvercel <directory> to upload the tarball file and get a URL. Remember to append /<tarball name> to then end of your URLvercel.json project and replace use with the URLvercel or vercel dev to deploy with the experimental BuilderNote: You will need to turn off vercel authentication in settings -> deployment protection so the builder can be downloaded
.changeset/
active-production-logs.md
alert-rules-schema-help.md
chamisa-cuesta-root-directory.md
config.json
dev-service-rewrites-path.md
entrypoint-detection-parity.md
fast-static-files.md
git-metadata-root-directory.md
go-provided-al2023.md
linear-trigger-events.md
logs-branch-opt-in.md
nightly-no-cache-tests.md
post-build-entrypoint-detection.md
prerender-classification.md
python-bytecode-packing.md
quiet-phones-sip.md
README.md
remove-provided-al2.md
strong-pots-exercise.md
turbo-upgrade.md
typescript-typecheck-parity.md
unarchive-feature-flags.md
.claude/
skills/
vercel-runtime-implementation-guide.md
.editorconfig
.gitattributes
.github/
AFFECTED_TESTING.md
aw/
actions-lock.json
CODE_OF_CONDUCT.md
CODEOWNERS
CONTRIBUTING.md
DISCUSSION_TEMPLATE/
general.yml
help.yml
ideas.yml
show-and-tell.yml
EXAMPLE_README_TEMPLATE.md
ISSUE_TEMPLATE/
cli_bug_report.md
config.yml
workflows/
agentics-maintenance.yml
bootstrap-vercel-aws-placeholder.yml
canary.yml
ci-doctor.lock.yml
ci-doctor.md
cli-evals.yml
comment-cli-tarball.yml
cron-update-gatsby-fixtures.yml
cron-update-next-canary.yml
cron-update-next-latest.yml
cron-update-turbo.yml
discussions-auto-close.yml
faster-template-prebuild-nextjs.yml
nightly-test-no-cache.yml
release-binary.yml
release-crates.yml
release-python-package.yml
release.yml
rollback-latest-tag.yml
test-lint.yml
test-python-packages.yml
test.yml
update-remix-run-dev.yml
update-sandbox.yml
validate-binary.yml
zizmor.yml
.gitignore
.husky/
.gitignore
pre-commit
.node_version
.npmrc
.nvmrc
.prettierignore
.syncpackrc.json
.vercel.approvers
.vercelignore
AGENTS.md
api/
_lib/
examples/
example-list.ts
github-repo-info.ts
gitlab-repo-info.ts
map-old-to-new.ts
summary.ts
script/
build.ts
types.ts
util/
assert-env.ts
error-handler.ts
with-api-handler.ts
examples/
info.ts
frameworks.ts
package.json
tsconfig.json
biome.jsonc
Cargo.lock
Cargo.toml
crates/
vercel_runtime/
Cargo.toml
src/
actix/
mod.rs
awaiter.rs
axum/
mod.rs
ipc/
ipc_utils.rs
core.rs
log.rs
metric.rs
mod.rs
lib.rs
types.rs
DEVELOPING_A_RUNTIME.md
errors/
cant-solve-challenge.md
deploy-invalid-dc.md
deployment-error.md
dns-configuration-error.md
domain-verification.md
env-value-invalid-type.md
invalid-route-source.md
invalid-token-value.md
missing-env-file.md
missing-env-key-value.md
missing-scope-value.md
missing-token-value.md
next-functions-config-optimized-lambdas.md
next-legacy-routes-optimized-lambdas.md
no-credentials-found.md
no-open-port-found.md
no-single-file-deployments.md
no-token-allowed.md
now-dev-as-dev-script.md
now-next-legacy-mode.md
now-next-no-serverless-pages-built.md
now-next-routes-manifest.md
now-static-build-failed-to-detect-a-server.md
path-not-deployable.md
scope-not-accessible.md
scope-not-existent.md
solve-challenges-manually.md
unauthorized-domain.md
examples/
__tests__/
integration/
actix-web.test.ts
angular.test.ts
astro.test.ts
axum.test.ts
blitzjs.test.ts
brunch.test.ts
create-react-app.test.ts
django.test.ts
docusaurus-2.test.ts
docusaurus.test.ts
eleventy.test.ts
elysia.test.ts
ember.test.ts
express.test.ts
fastapi.test.ts
fasthtml.test.ts
fastify.test.ts
flask.test.ts
gatsby.test.ts
gin.test.ts
h3.test.ts
hexo.test.ts
hono.test.ts
hugo.test.ts
hydrogen-2.test.ts
ionic-angular.test.ts
ionic-react.test.ts
jekyll.test.ts
koa.test.ts
mastra.test.ts
middleman.test.ts
nestjs.test.ts
nextjs.test.ts
nitro.test.ts
node_modules.test.ts
node.test.ts
nuxtjs.test.ts
parcel.test.ts
polymer.test.ts
preact.test.ts
react-router.test.ts
redwoodjs.test.ts
remix.test.ts
sanity-v2.test.ts
sapper.test.ts
sinatra.test.ts
solidstart-1.test.ts
starlette.test.ts
stencil.test.ts
svelte.test.ts
sveltekit-1.test.ts
sveltekit.test.ts
tanstack-start.test.ts
umijs.test.ts
vite-react.test.ts
vite.test.ts
vitepress.test.ts
vue.test.ts
vuepress.test.ts
xmcp.test.ts
zola.test.ts
test-utils.ts
unit/
index.test.ts
actix-web/
.gitignore
Cargo.lock
Cargo.toml
public/
favicon.ico
index.html
README.md
src/
main.rs
angular/
.editorconfig
.gitignore
angular.json
package-lock.json
package.json
README.md
src/
app/
app-routing.module.ts
app.component.css
app.component.html
app.component.spec.ts
app.component.ts
app.module.ts
assets/
.gitkeep
favicon.ico
index.html
main.ts
styles.css
tsconfig.app.json
tsconfig.json
tsconfig.spec.json
astro/
.gitignore
.npmrc
astro.config.ts
package.json
public/
favicon.ico
README.md
src/
assets/
logo.png
components/
Card.astro
env.d.ts
layouts/
Layout.astro
pages/
image.astro
index.astro
ssr-with-swr-caching.astro
ssr.astro
axum/
.gitignore
Cargo.lock
Cargo.toml
public/
favicon.ico
index.html
README.md
src/
main.rs
blitzjs/
.editorconfig
.env
.env.test
.gitignore
.npmrc
.prettierignore
next-env.d.ts
next.config.js
package-lock.json
package.json
public/
favicon.ico
logo.png
README.md
src/
blitz-client.ts
core/
layouts/
Layout.tsx
pages/
_app.tsx
_document.tsx
404.tsx
index.tsx
styles/
globals.css
Home.module.css
test/
setup.ts
tsconfig.json
vitest.config.ts
brunch/
.gitignore
.vercelignore
app/
assets/
brunch-napkin.svg
index.html
initialize.js
styles.css
brunch-config.js
package.json
README.md
yarn.lock
CHANGELOG.md
create-react-app/
.env.production
.gitignore
package.json
pnpm-lock.yaml
public/
favicon.ico
index.html
logo192.png
logo512.png
manifest.json
robots.txt
README.md
src/
App.css
App.js
App.test.js
index.css
index.js
logo.svg
reportWebVitals.js
setupTests.js
vitals.js
django/
.gitignore
app/
__init__.py
settings.py
static/
app/
style.css
urls.py
views.py
wsgi.py
manage.py
pyproject.toml
README.md
docusaurus/
docusaurus-2/
.gitignore
babel.config.js
blog/
2019-05-28-first-blog-post.md
2019-05-29-long-blog-post.md
2021-08-01-mdx-blog-post.mdx
2021-08-26-welcome/
docusaurus-plushie-banner.jpeg
index.md
authors.yml
docs/
intro.md
tutorial-basics/
_category_.json
congratulations.md
create-a-blog-post.md
create-a-document.md
create-a-page.md
deploy-your-site.md
markdown-features.mdx
tutorial-extras/
_category_.json
img/
docsVersionDropdown.png
localeDropdown.png
manage-docs-versions.md
translate-your-site.md
docusaurus.config.js
package.json
README.md
... 1600 moreShowing a partial view of a very large repo.
FAQ
vercel is a Claude Code plugin with 1 hand-picked skill for deployment work, indexed on Flowy. Install it with the command on its page. It includes vercel-cli. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.