vercel/vercel
{ "createdAt": "2016-09-09T01:12:08Z", "defaultBranch": "main", "description": "Develop. Preview. Ship.", "fullName": "vercel/vercel", "homepage": "https://vercel.com", "language": "TypeScript", "name": "vercel", "pushedAt": "2025-11-27T06:16:40Z", "stargazersCount": 14412, "topics": [ "cli", "cloud", "command", "hosting", "jamstack", "ship", "vercel" ], "updatedAt": "2025-11-27T06:43:28Z", "url": "https://github.com/vercel/vercel"}Vercel
Develop. Preview. Ship.
Documentation · Changelog · Templates · CLI
Vercel
Section titled “Vercel”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.
Deploy
Section titled “Deploy”Get started by importing a project, choosing a template, or using the Vercel CLI. Then, git push to deploy.
Documentation
Section titled “Documentation”For details on how to use Vercel, check out our documentation.
Contributing
Section titled “Contributing”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]!(./.github/CODE_OF_CONDUCT.md) and follow it in all your interactions with the project.
Local development
Section titled “Local development”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/vercelcd vercelcorepack enablepnpm installpnpm buildpnpm lintpnpm test-unitMake sure all the tests pass before making changes.
Running Vercel CLI Changes
Section titled “Running Vercel CLI Changes”You can use pnpm vercel from the cli package to invoke Vercel CLI with local changes:
cd ./packages/clipnpm vercel <cli-commands...>See [CLI Local Development]!(../packages/cli#local-development) for more details.
Verifying your change
Section titled “Verifying your change”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-unitfrom 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.
Pull Request Process
Section titled “Pull Request Process”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.
Interpreting test errors
Section titled “Interpreting test errors”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
Section titled “Integration tests”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.
Running integration tests locally
Section titled “Running integration tests locally”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:
- Create an access token. Follow the instructions here https://vercel.com/docs/rest-api#creating-an-access-token. Ensure the token scope is for your personal account.
- Grab the team ID from the Vercel dashboard at
https://vercel.com/<MY-TEAM>/~/settings. - Source these into your shell rc file:
echo 'export VERCEL_TOKEN=<MY-TOKEN> VERCEL_TEAM_ID=<MY-TEAM-ID>' >> ~/.zshrc
From there, you should be able to trigger an integration test. Choose one that’s already isolated to check that things work:
cd packages/nextRun 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.
@vercel/nft
Section titled “@vercel/nft”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.
Deploy a Builder with existing project
Section titled “Deploy a Builder with existing project”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.
- Change directory to the desired Builder
cd ./packages/node - Run
pnpm buildto compile typescript and other build steps - Run
npm packto create a tarball file - Run
vercel *.tgzto upload the tarball file and get a URL - Edit any existing
vercel.jsonproject and replaceusewith the URL - Run
vercelorvercel devto deploy with the experimental Builder
Reference
Section titled “Reference”- [Code of Conduct]!(./.github/CODE_OF_CONDUCT.md)
- [Contributing Guidelines]!(./.github/CONTRIBUTING.md)
- [Apache 2.0 License]!(./LICENSE)