# Next.js
Nx comes with first-class Next.js support. In this guide we will look at how to use it.
## Creating a New Nx Workspace
Create a new Nx workspace. The easiest way to do it is to use npx.
```bash
npx --ignore-existing create-nx-workspace happynrwl
```
You can also create a workspace with a Next.js application in place by running:
```bash
npx --ignore-existing create-nx-workspace happynrwl --preset=next
```
## Adding Next.js capabilities to a workspace
If you used the Next.js preset, you are all set and can skip this. If you created an empty workspace or have an existing workspace, you can add Next.js capabilities to the workspace:
```bash
yarn add --dev @nrwl/next
```
## Generating a Next.js Application
Run
```bash
nx g @nrwl/next:app tuskdesk
```
and you will see the following:
```treeview
happynrwl/
├── apps/
│ ├── tuskdesk/
│ │ ├── pages/
│ │ │ ├── index.css
│ │ │ └── index.tsx
│ │ ├── jest.conf.js
│ │ ├── tsconfig.json
│ │ ├── tsconfig.spec.json
│ │ └── .eslintrc.json
│ └── tuskdesk-e2e/
│ │ ├── src/
│ │ │ ├── integrations/
│ │ │ │ └── app.spec.ts
│ │ │ ├── fixtures/
│ │ │ ├── plugins/
│ │ │ └── support/
│ │ ├── cypress.json
│ │ ├── tsconfig.e2e.json
│ │ └── .eslintrc.json
├── libs/
├── workspace.json
├── nx.json
├── package.json
├── tools/
├── tsconfig.json
└── .eslintrc.json
```
Run:
- `nx serve tuskdesk` to serve the application
- `nx serve tuskdesk --prod` to serve the application in the production mode
- `nx build tuskdesk` to build the application
- `nx lint tuskdesk` to lint the application
- `nx test tuskdesk` to test the application using Jest
- `nx export tuskdesk` to export the application
- `nx e2e tuskdesk-e2e` to test the application using Cypress
When using Next.js in Nx, you get the out-of-the-box support for TypeScript, Cypress, Jest. No need to configure anything: watch mode, source maps, and typings just work.
## Generating a React Library
Run
```bash
nx g @nrwl/react:lib shared-components
```
and you will see the following:
```treeview
happynrwl/
├── apps/
│ ├── tuskdesk/
│ └── tuskdesk-e2e/
├── libs/
│ └── shared-components/
│ ├── src/
│ │ ├── lib/
│ │ │ ├── home.css
│ │ │ ├── home.tsx
│ │ │ └── home.spec.tsx
│ │ └ index.ts
│ ├── jest.config.js
│ ├── tsconfig.json
│ ├── tsconfig.lib.json
│ ├── tsconfig.spec.json
│ └── tslint.json
├── nx.json
├── workspace.json
├── package.json
├── tools/
├── tsconfig.json
└── tslint.json
```
Run:
- `nx test shared-components` to test the library
- `nx lint shared-components` to lint the library
## Using the Library in an Application
You can import the shared-components library into the Next.js application like this.
```typescript jsx
import { Home } from '@happynrwl/shared-components';
import React from 'react';
export const Index = () => {
return (
<>