Skip to main content

cli-recipes

Next.js 16 command-line recipes — create-next-app, next dev and next build with Turbopack as the default (--webpack to opt out), next start, the built-in bundle analyzer, next upgrade with codemods, and linting now that next lint is removed. Use when the question is which next command, flag or package script to run. Docker packaging is docker-patterns.

Source facts

Repository
Agents-Store/codex-plugins
Last source activity
November 1, 2026 at 02:46
Detected SKILL.md language
English
Stars
0
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
cli-recipes
description
Next.js 16 command-line recipes — create-next-app, next dev and next build with Turbopack as the default (--webpack to opt out), next start, the built-in bundle analyzer, next upgrade with codemods, and linting now that next lint is removed. Use when the question is which next command, flag or package script to run. Docker packaging is docker-patterns.
# Next.js CLI Recipes Command-line recipes for creating, developing, building, and deploying Next.js applications. Current as of Next.js 16.3; keep `next` at `^16.3.8` or later for the security fixes (`npm view next@latest version` shows the latest patch). ## Create a New Project ```bash npx create-next-app@latest my-app ``` The first prompt asks whether to use the recommended defaults (TypeScript, ESLint, Tailwind CSS, App Router, AGENTS.md); answering no walks through each option. Non-interactive with the defaults: ```bash npx create-next-app@latest my-app --ts --tailwind --eslint --app --src-dir --import-alias "@/*" --yes ``` Useful flags (Next.js 16): | Flag | Purpose | |------|---------| | `--biome` / `--no-linter` | Use Biome instead of ESLint, or skip linter setup | | `--react-compiler` | Enable the React Compiler in the new project | | `--api` | Route-handlers-only project (no UI) | | `--empty` | Minimal empty project | | `--agents-md` | Write AGENTS.md + CLAUDE.md for coding agents (default: on) | | `--webpack` | Configure webpack instead of the default Turbopack | | `--skip-install` | Skip installing dependencies | | `--disable-git` | Skip git initialization | From a template: ```bash npx create-next-app@latest --example with-tailwindcss my-app npx create-next-app@latest --example https://github.com/user/repo my-app ``` ## Development Server Turbopack is the **default bundler** in Next.js 16 for both `next dev` and `next build` — no flag needed. Opt out with `--webpack`. ```bash # Standard dev server (Turbopack by default in 16+) next dev # Opt out of Turbopack next dev --webpack # Custom port next dev -p 4000 # Custom hostname (default is 0.0.0.0) next dev -H 127.0.0.1 # Attach the Node.js debugger to the correct process (16.1+) next dev --inspect # HTTPS (local development) next dev --experimental-https # Show verbose output next dev --verbose ``` Since Next.js 16, dev output goes to `.next/dev`, so `next dev` and `next build` can run concurrently, and a lockfile prevents two `next dev` instances on one project. ## Build for Production ```bash # Production build (Turbopack by default in 16+) next build # Opt out of Turbopack next build --webpack # Debug prerender errors with full output next build --debug-prerender # Build only a subset of routes (faster iteration on build issues) next build --debug-build-paths="app/**/page.tsx" ``` Build output appears in `.next/`. For standalone output (Docker), set `output: 'standalone'` in `next.config.ts`. `next build` still type-checks but **no longer lints** (Next.js 16) — run ESLint or Biome separately. Since 16.3, `typescript@^7` is supported for much faster type checking, and Turbopack's filesystem cache makes repeat builds up to 5.5x faster. The build reports: - **Route sizes** — JS sent to client per route - **First Load JS** — Total JS for initial page load - **Static vs Dynamic** — Which routes are statically generated vs server-rendered ## Start Production Server ```bash # Start built application next start # Custom port next start -p 4000 # Attach the Node.js debugger (16.2+) next start --inspect # Keep-alive timeout for proxied deployments (ms) next start --keepAliveTimeout 70000 ``` Requires `next build` first. Serves the production build with Node.js. ## Linting **`next lint` was removed in Next.js 16**, and `next build` no longer runs linting. Migrate with the official codemod, then run ESLint (or Biome) directly: ```bash # Migrate from next lint to the ESLint CLI npx @next/codemod@canary next-lint-to-eslint-cli . # Lint with ESLint directly (flat config: eslint.config.mjs) npx eslint . # Fix auto-fixable issues npx eslint . --fix ``` `eslint-config-next` still catches common Next.js issues (incorrect image usage, missing `alt` attributes, incorrect `<link>`/`<script>` usage, accessibility issues), and `@next/eslint-plugin-next` now defaults to ESLint Flat Config. Biome is the supported alternative (`--biome` in create-next-app). ## Type Checking ```bash # Generate route types, then type-check (recommended for CI) next typegen && npx tsc --noEmit ``` `next typegen` (15.5+) generates route and `PageProps` types into `.next/types` without running a full build, and also writes `next-env.d.ts`. `next build` includes type checking as well. ## Useful Environment Variables | Variable | Description | Example | |----------|-------------|---------| | `PORT` | Dev/prod server port | `PORT=4000 next dev` | | `HOSTNAME` | Server hostname | `HOSTNAME=0.0.0.0 next start` | | `NODE_ENV` | Environment | `development`, `production`, `test` | | `NEXT_TELEMETRY_DISABLED` | Disable telemetry | `NEXT_TELEMETRY_DISABLED=1` | | `ANALYZE` | Enable `@next/bundle-analyzer` (webpack builds only — prefer `next experimental-analyze`) | `ANALYZE=true next build --webpack` | | `NEXT_PUBLIC_*` | Client-side env vars | `NEXT_PUBLIC_API_URL=...` | ## Package Scripts Typical `package.json` scripts: ```json { "scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "eslint .", "lint:fix": "eslint . --fix", "type-check": "next typegen && tsc --noEmit", "format": "prettier --write .", "test": "vitest", "test:e2e": "playwright test" } } ``` ## Bundle Analysis Use the built-in Turbopack bundle analyzer (16.1+): ```bash # Interactive treemap UI on port 4000 next experimental-analyze # Write static analysis files to .next/diagnostics/analyze next experimental-analyze --output ``` The analyzer filters by route, shows import chains, and provides separate client/server views. > `@next/bundle-analyzer` (`ANALYZE=true`) is webpack-based and only works with `next build --webpack`. ## Docker Deployment ```dockerfile FROM node:22-alpine AS base FROM base AS deps WORKDIR /app COPY package.json pnpm-lock.yaml ./ RUN corepack enable pnpm && pnpm install --frozen-lockfile FROM base AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . RUN corepack enable pnpm && pnpm build FROM base AS runner WORKDIR /app ENV NODE_ENV=production RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjs COPY --from=builder /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static USER nextjs EXPOSE 3000 ENV PORT=3000 CMD ["node", "server.js"] ``` Requires `output: 'standalone'` in `next.config.ts`. ## Telemetry ```bash # Disable telemetry next telemetry --disable # Enable telemetry next telemetry --enable ``` ## Upgrading & Codemods ```bash # Recommended upgrade path (16.1+): built-in upgrade command next upgrade next upgrade --revision canary # or latest / a specific version # Codemod-driven upgrade (works from any version) npx @next/codemod@canary upgrade latest # Run a specific codemod npx @next/codemod@canary <transform> <path> ``` Key codemods for Next.js 16: - `middleware-to-proxy` — rename `middleware.ts` to `proxy.ts` with the `proxy` export - `next-lint-to-eslint-cli` — migrate from the removed `next lint` to the ESLint CLI - Async API migrations (`params`, `cookies`, `headers`), configuration changes, and deprecated API removals
View on GitHub