Dev Time Run Time e18e.dev Blog
โ† All frameworks

Next.js

Version 16.1.1 ยท Measured 3/8/2026

Dev Time Performance

Measured using pnpm on GitHub Actions (ubuntu-latest, Node 24) based on the starter project set up by each framework's CLI.

Prod Deps Dev Deps Dup. Deps Size Size (Prod Only) Graph
3 6 12 560.03MB 435.99MB View
Metric Avg Min Max
Install 2.04s 1.89s 2.35s
Cold Build 7.22s 7.09s 7.51s
Warm Build 7.24s 7.21s 7.30s

Build output size: 6.18MB

Duplicate Dependencies

12 duplicate dependencies detected across this starter's node_modules.

View 12 duplicate dependencies
  • debug
    [duplicate dependency] debug has 2 installed versions:
    4.4.3 via the following 10 package(s) @babel/traverse@7.29.0, @babel/core@7.29.0, @eslint/config-array@0.21.1, @eslint/eslintrc@3.3.3, eslint@9.39.2, eslint-import-resolver-typescript@3.10.1, @typescript-eslint/project-service@8.55.0, @typescript-eslint/typescript-estree@8.55.0, @typescript-eslint/parser@8.55.0, @typescript-eslint/type-utils@8.55.0
    3.2.7 via the following 3 package(s) eslint-import-resolver-node@0.3.9, eslint-plugin-import@2.32.0, eslint-module-utils@2.12.1
    ๐Ÿ’ก Suggestions
    - Consider standardizing on version 4.4.3 as this version is the most commonly used.
    - Consider upgrading consuming packages as this may resolve this duplicate version.
    
  • json5
    [duplicate dependency] json5 has 2 installed versions:
    2.2.3 via the following 1 package(s) @babel/core@7.29.0
    1.0.2 via the following 1 package(s) tsconfig-paths@3.15.0
    ๐Ÿ’ก Suggestions
    - Consider upgrading consuming packages as this may resolve this duplicate version.
    
  • semver
    [duplicate dependency] semver has 2 installed versions:
    6.3.1 via the following 4 package(s) @babel/helper-compilation-targets@7.28.6, @babel/core@7.29.0, eslint-plugin-import@2.32.0, eslint-plugin-react@7.37.5
    7.7.4 via the following 3 package(s) sharp@0.34.5, is-bun-module@2.0.0, @typescript-eslint/typescript-estree@8.55.0
    ๐Ÿ’ก Suggestions
    - Consider standardizing on version 6.3.1 as this version is the most commonly used.
    - Consider upgrading consuming packages as this may resolve this duplicate version.
    
  • eslint-visitor-keys
    [duplicate dependency] eslint-visitor-keys has 2 installed versions:
    3.4.3 via the following 1 package(s) @eslint-community/eslint-utils@4.9.1
    4.2.1 via the following 3 package(s) espree@10.4.0, eslint@9.39.2, @typescript-eslint/visitor-keys@8.55.0
    ๐Ÿ’ก Suggestions
    - Consider standardizing on version 4.2.1 as this version is the most commonly used.
    - Consider upgrading consuming packages as this may resolve this duplicate version.
    
  • minimatch
    [duplicate dependency] minimatch has 2 installed versions:
    3.1.2 via the following 6 package(s) @eslint/config-array@0.21.1, @eslint/eslintrc@3.3.3, eslint@9.39.2, eslint-plugin-import@2.32.0, eslint-plugin-jsx-a11y@6.10.2, eslint-plugin-react@7.37.5
    9.0.5 via the following 1 package(s) @typescript-eslint/typescript-estree@8.55.0
    ๐Ÿ’ก Suggestions
    - Consider standardizing on version 3.1.2 as this version is the most commonly used.
    - Consider upgrading consuming packages as this may resolve this duplicate version.
    
  • globals
    [duplicate dependency] globals has 2 installed versions:
    14.0.0 via the following 1 package(s) @eslint/eslintrc@3.3.3
    16.4.0 via the following 1 package(s) eslint-config-next@16.1.1
    ๐Ÿ’ก Suggestions
    - Consider upgrading consuming packages as this may resolve this duplicate version.
    
  • ignore
    [duplicate dependency] ignore has 2 installed versions:
    5.3.2 via the following 2 package(s) @eslint/eslintrc@3.3.3, eslint@9.39.2
    7.0.5 via the following 1 package(s) @typescript-eslint/eslint-plugin@8.55.0
    ๐Ÿ’ก Suggestions
    - Consider standardizing on version 5.3.2 as this version is the most commonly used.
    - Consider upgrading consuming packages as this may resolve this duplicate version.
    
  • postcss
    [duplicate dependency] postcss has 2 installed versions:
    8.5.6 via the following 1 package(s) @tailwindcss/postcss@4.1.18
    8.4.31 via the following 1 package(s) next@16.1.1
    ๐Ÿ’ก Suggestions
    - Consider upgrading consuming packages as this may resolve this duplicate version.
    
  • brace-expansion
    [duplicate dependency] brace-expansion has 2 installed versions:
    1.1.12 via the following 1 package(s) minimatch@3.1.2
    2.0.2 via the following 1 package(s) minimatch@9.0.5
    ๐Ÿ’ก Suggestions
    - Consider upgrading consuming packages as this may resolve this duplicate version.
    
  • resolve
    [duplicate dependency] resolve has 2 installed versions:
    1.22.11 via the following 1 package(s) eslint-import-resolver-node@0.3.9
    2.0.0-next.5 via the following 1 package(s) eslint-plugin-react@7.37.5
    ๐Ÿ’ก Suggestions
    - Consider upgrading consuming packages as this may resolve this duplicate version.
    
  • glob-parent
    [duplicate dependency] glob-parent has 2 installed versions:
    6.0.2 via the following 1 package(s) eslint@9.39.2
    5.1.2 via the following 1 package(s) fast-glob@3.3.1
    ๐Ÿ’ก Suggestions
    - Consider upgrading consuming packages as this may resolve this duplicate version.
    
  • picomatch
    [duplicate dependency] picomatch has 2 installed versions:
    4.0.3 via the following 2 package(s) fdir@6.5.0, tinyglobby@0.2.15
    2.3.1 via the following 1 package(s) micromatch@4.0.8
    ๐Ÿ’ก Suggestions
    - Consider standardizing on version 4.0.3 as this version is the most commonly used.
    - Consider upgrading consuming packages as this may resolve this duplicate version.
    

Runtime Performance

SSR Performance

Measured on GitHub Actions (ubuntu-latest, Node 24) using custom SSR benchmark apps.

Framework Ops/sec Avg Latency Body Size Duplication
Baseline HTML 706 1.417ms 96.81kb 1x
Next.js 129 7.74ms 198.59kb 2x

Methodology

  • Each framework renders a table of 1000 rows with two UUID columns
  • Mock HTTP requests bypass TCP overhead for accurate rendering measurement
  • Data is loaded asynchronously to simulate real-world data fetching
  • Duplication factor indicates how many times each UUID appears in the response (1x = optimal, 2x = includes hydration payload)
  • Benchmarks run for 10 seconds using tinybench
  • Astro, Nuxt, and SvelteKit handle Node.js HTTP requests natively. React Router, SolidStart, and TanStack Start use Web APIs internally, so benchmarks include the cost of their Node.js adapter layers (@react-router/node, h3, and srvx respectively)
  • Next.js defaults to React Server Components (RSC), a different rendering model than traditional SSR. To keep the comparison fair, Next.js uses "use client" to opt out of RSC and use traditional SSR + hydration like most of the other frameworks
  • Inspired by eknkc/ssr-benchmark