Read about our Commitment to Open Source. To contribute to our examples, please see Adding examples below.
The development branch is canary, and this is the branch that all pull
requests should be made against. After publishing a stable release, the changes
in the canary branch are rebased into master. The changes on the canary
branch are published to the @canary dist-tag daily.
To develop locally:
-
Fork this repository to your own GitHub account and then clone it to your local device.
-
Create a new branch:
git checkout -b MY_BRANCH_NAME -
Install yarn:
npm install -g yarn -
Install the dependencies with:
yarn -
Start developing and watch for code changes:
yarn dev -
In a new terminal, run
yarn typesto compile declaration files from TypeScript.Note: You may need to repeat this step if your types get outdated.
For instructions on how to build a project with your local version of the CLI, see Developing with your local version of Next.js below. (Naively linking the binary is not sufficient to develop locally.)
You can build the project, including all type definitions, with:
yarn build
# - or -
yarn prepublishBy default the latest canary of the next-swc binaries will be installed and used. If you are actively working on Rust code or you need to test out the most recent Rust code that hasn't been published as a canary yet you can install Rust and run yarn --cwd packages/next build-native.
If you need to clean the project for any reason, use yarn clean.
See the testing readme for information on writing tests.
yarn testonlyIf you would like to run the tests in headless mode (with the browser windows hidden) you can do
yarn testheadlessRunning a specific test suite (e.g. production) inside of the test/integration directory:
yarn testonly --testPathPattern "production"Running one test in the production test suite:
yarn testonly --testPathPattern "production" -t "should allow etag header support"To check the formatting of your code:
yarn lintIf you get errors, you can fix them with:
yarn lint-fixRunning examples can be done with:
yarn next ./test/integration/basic
# OR
yarn next ./examples/basic-css/To figure out which pages are available for the given example, you can run:
EXAMPLE=./test/integration/basic
(\
cd $EXAMPLE/pages; \
find . -type f \
| grep -v '\.next' \
| sed 's#^\.##' \
| sed 's#index\.js##' \
| sed 's#\.js$##' \
| xargs -I{} echo localhost:3000{} \
)There are two options to develop with your local version of the codebase:
-
In your app's
package.json, replace:"next": "<next-version>",
with:
"next": "file:/path/to/next.js/packages/next",
-
In your app's root directory, make sure to remove
nextfromnode_moduleswith:rm -rf ./node_modules/next
-
In your app's root directory, run:
yarn
to re-install all of the dependencies.
Note that Next will be copied from the locally compiled version as opposed to from being downloaded from the NPM registry.
-
Run your application as you normally would.
-
To update your app's dependencies, after you've made changes to your local
nextrepository. In your app's root directory, run:yarn install --force
or
-
Move your app inside of the Next.js monorepo.
-
Run with
yarn next-with-deps ./app-path-in-monorepo
This will use the version of next built inside of the Next.js monorepo and the
main yarn dev monorepo command can be running to make changes to the local
Next.js version at the same time (some changes might require re-running yarn next-with-deps to take effect).
In Next.js we have a system to add helpful links to warnings and errors.
This allows for the logged message to be short while giving a broader description and instructions on how to solve the warning/error.
In general, all warnings and errors added should have these links attached.
Below are the steps to add a new link:
-
Create a new markdown file under the
errorsdirectory based onerrors/template.md:cp errors/template.md errors/<error-file-name>.md
-
Add the newly added file to
errors/manifest.json -
Add the following url to your warning/error:
https://nextjs.org/docs/messages/<file-path-without-dotmd>.For example, to link to
errors/api-routes-static-export.mdyou use the url:https://nextjs.org/docs/messages/api-routes-static-export
When you add an example to the examples directory, don’t forget to add a README.md file with the following format:
- Replace
DIRECTORY_NAMEwith the directory name you’re adding. - Fill in
Example NameandDescription. - To add additional installation instructions, please add it where appropriate.
- To add additional notes, add
## Notessection at the end. - Remove the
Deploy your ownsection if your example can’t be immediately deployed to Vercel. - Remove the
Previewsection if the example doesn't work on StackBlitz and file an issue here.
# Example Name
Description
## Preview
Preview the example live on [StackBlitz](http://stackblitz.com/):
[](https://stackblitz.com/github/vercel/next.js/tree/canary/examples/DIRECTORY_NAME)
## Deploy your own
Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example):
[](https://vercel.com/new/git/external?repository-url=https://github.com/vercel/next.js/tree/canary/examples/DIRECTORY_NAME&project-name=DIRECTORY_NAME&repository-name=DIRECTORY_NAME)
## How to use
Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app) with [npm](https://docs.npmjs.com/cli/init) or [Yarn](https://yarnpkg.com/lang/en/docs/cli/create/) to bootstrap the example:
```bash
npx create-next-app --example DIRECTORY_NAME DIRECTORY_NAME-app
# or
yarn create next-app --example DIRECTORY_NAME DIRECTORY_NAME-app
```
Deploy it to the cloud with [Vercel](https://vercel.com/new?utm_source=github&utm_medium=readme&utm_campaign=next-example) ([Documentation](https://nextjs.org/docs/deployment)).Repository maintainers can use yarn publish-canary to publish a new version of all packages to npm.