From e9d571c7ec460954d98b173e608a7d5820d3e884 Mon Sep 17 00:00:00 2001 From: Felix Schneider <99918022+trueberryless@users.noreply.github.com> Date: Fri, 3 Jul 2026 15:29:26 +0200 Subject: [PATCH] chore: drop support for Node 20 --- .github/workflows/ci-legacy-5.0.4.yml | 58 ------------------- packages/create-config/README.md | 2 +- .../content/docs/overview/getting-started.mdx | 2 +- .../fixtures/dependencies/types/package.json | 10 ++-- .../knip/fixtures/plugins/vike/package.json | 32 +++++----- packages/knip/package.json | 2 +- packages/language-server/package.json | 2 +- packages/mcp-server/package.json | 2 +- templates/demo/monorepo/package.json | 2 +- templates/playground/basic/package.json | 2 +- templates/playground/monorepo/package.json | 2 +- 11 files changed, 29 insertions(+), 87 deletions(-) delete mode 100644 .github/workflows/ci-legacy-5.0.4.yml diff --git a/.github/workflows/ci-legacy-5.0.4.yml b/.github/workflows/ci-legacy-5.0.4.yml deleted file mode 100644 index 88dcd2d6ab..0000000000 --- a/.github/workflows/ci-legacy-5.0.4.yml +++ /dev/null @@ -1,58 +0,0 @@ -# Legacy pipeline: knip v5 has typescript and @types/node as peer dependencies - -name: Tests (against typescript@5.0.4 in Node.js v20) - -on: - workflow_dispatch: - pull_request: - push: - branches: - - '**' - tags: - - '!**' - -jobs: - test: - strategy: - matrix: - os: - - macos-latest - - ubuntu-latest - - windows-latest - node: - - 20 - - 22 - - runs-on: ${{ matrix.os }} - name: ${{ matrix.os }} (Node v${{ matrix.node }}) - - steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 - with: - node-version: ${{ matrix.node }} - - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5 - with: - version: 10 - package_json_file: packages/knip/package.json - - run: echo "manage-package-manager-versions=false" >> .npmrc - - name: Install dependencies - run: pnpm install - - name: Build knip - run: pnpm run build - working-directory: packages/knip - - name: Install earliest supported peer dependencies - run: pnpm add typescript@5.0.4 @types/node@20 --config.trustPolicy=allow - working-directory: packages/knip - - name: Type-check against TS 5.0.4 - run: | - node -e "let f=require('fs'),p='tsconfig.json';f.writeFileSync(p,f.readFileSync(p,'utf8').replace(/.*(?:rewriteRelativeImportExtensions|erasableSyntaxOnly).*\n/g,''))" - pnpm tsc --noEmit - working-directory: packages/knip - - name: Test knip - run: pnpm test --runtime node --smoke - working-directory: packages/knip - - name: Run knip - run: ./packages/knip/bin/knip.js --reporter github-actions - - name: Run knip in strict mode - run: ./packages/knip/bin/knip.js --production --strict diff --git a/packages/create-config/README.md b/packages/create-config/README.md index d23626f04f..d56d0b10a7 100644 --- a/packages/create-config/README.md +++ b/packages/create-config/README.md @@ -17,7 +17,7 @@ Example result: "knip": "knip" }, "devDependencies": { - "@types/node": "^20.14.8", + "@types/node": "^22.12.0", "knip": "^5.30.1", "typescript": "^5.5.4" } diff --git a/packages/docs/src/content/docs/overview/getting-started.mdx b/packages/docs/src/content/docs/overview/getting-started.mdx index 8ec74ac154..d27701335e 100644 --- a/packages/docs/src/content/docs/overview/getting-started.mdx +++ b/packages/docs/src/content/docs/overview/getting-started.mdx @@ -7,7 +7,7 @@ import { Tabs, TabItem } from '@astrojs/starlight/components'; ## Requirements -Knip v6 requires at least Node.js v20.19.0. Or Bun. +Knip v6 requires at least Node.js v22.12.0. Or Bun. Want to try Knip without installation? Visit [the playground][1]. diff --git a/packages/knip/fixtures/dependencies/types/package.json b/packages/knip/fixtures/dependencies/types/package.json index 84571126de..779360f517 100644 --- a/packages/knip/fixtures/dependencies/types/package.json +++ b/packages/knip/fixtures/dependencies/types/package.json @@ -1,12 +1,12 @@ { "name": "@fixtures/dependencies-types", "dependencies": { - "@eslint/js": "^9.20.0", - "ajv": "^8.17.1" + "@eslint/js": "*", + "ajv": "*" }, "devDependencies": { - "@types/ajv": "^0.0.5", - "@types/eslint__js": "^8.42.3", - "@types/node": "^20.14.8" + "@types/ajv": "*", + "@types/eslint__js": "*", + "@types/node": "*" } } diff --git a/packages/knip/fixtures/plugins/vike/package.json b/packages/knip/fixtures/plugins/vike/package.json index b4d18858d2..3bf823dd46 100644 --- a/packages/knip/fixtures/plugins/vike/package.json +++ b/packages/knip/fixtures/plugins/vike/package.json @@ -7,22 +7,22 @@ "server": "node --loader ts-node/esm ./server/index.ts" }, "dependencies": { - "@types/compression": "^1.7.5", - "@types/express": "^4.17.21", - "@types/node": "^20.10.4", - "@types/react": "^18.2.42", - "@types/react-dom": "^18.2.17", - "@vitejs/plugin-react": "^4.2.1", - "compression": "^1.7.4", - "express": "^4.18.2", - "node-fetch": "^3.3.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sirv": "^2.0.3", - "ts-node": "^10.9.1", - "typescript": "^5.4.0", - "vike": "^0.4.193", - "vite": "^5.4.0" + "@types/compression": "*", + "@types/express": "*", + "@types/node": "*", + "@types/react": "*", + "@types/react-dom": "*", + "@vitejs/plugin-react": "*", + "compression": "*", + "express": "*", + "node-fetch": "*", + "react": "*", + "react-dom": "*", + "sirv": "*", + "ts-node": "*", + "typescript": "*", + "vike": "*", + "vite": "*" }, "type": "module" } diff --git a/packages/knip/package.json b/packages/knip/package.json index 6fb1a10ee9..50689675b6 100644 --- a/packages/knip/package.json +++ b/packages/knip/package.json @@ -116,7 +116,7 @@ "tsx": "^4.22.4" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=22.12.0" }, "engineStrict": true } diff --git a/packages/language-server/package.json b/packages/language-server/package.json index 9f87f5d53f..d0ba8a4043 100644 --- a/packages/language-server/package.json +++ b/packages/language-server/package.json @@ -26,6 +26,6 @@ "vscode-languageserver-textdocument": "^1.0.13" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=22.12.0" } } diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index 68c4078bf7..41dc9a2cf9 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -37,6 +37,6 @@ "zod": "^4.1.11" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=22.12.0" } } diff --git a/templates/demo/monorepo/package.json b/templates/demo/monorepo/package.json index 3a9c244470..1ae405e5d2 100644 --- a/templates/demo/monorepo/package.json +++ b/templates/demo/monorepo/package.json @@ -6,7 +6,7 @@ "packages/*" ], "devDependencies": { - "@types/node": "^20.14.8", + "@types/node": "^22.12.0", "knip": "^5.30.1", "typescript": "^5.5.4" } diff --git a/templates/playground/basic/package.json b/templates/playground/basic/package.json index 092041e8b8..1b3a9e2e91 100644 --- a/templates/playground/basic/package.json +++ b/templates/playground/basic/package.json @@ -9,7 +9,7 @@ "picocolors": "^1.1.0" }, "devDependencies": { - "@types/node": "^20.14.8", + "@types/node": "^22.12.0", "knip": "^5.30.1", "typescript": "^5.5.4" } diff --git a/templates/playground/monorepo/package.json b/templates/playground/monorepo/package.json index 4b832f985f..08a39ad82d 100644 --- a/templates/playground/monorepo/package.json +++ b/templates/playground/monorepo/package.json @@ -13,7 +13,7 @@ "tinyglobby": "^0.2.6" }, "devDependencies": { - "@types/node": "^20.14.8", + "@types/node": "^22.12.0", "knip": "^5.30.1", "typescript": "^5.5.4" }