@nesvel/knip-config
v1.0.3
Published
Shared Knip configuration for unused code detection in monorepos
Maintainers
Readme
@nesvel/knip-config
Shared configuration presets for Knip, the analyzer that finds unused files, exports, and dependencies in JavaScript/TypeScript projects.
Features
- 🎯 Multiple Presets: base, library, vite, nextjs, workspace
- 📦 One-command installation: Copy preset to your project
- ⚙️ Customizable: Override any configuration as needed
- 🚀 Production-ready: Opinionated defaults for common setups
Installation
pnpm add -D @nesvel/knip-config knip
# or
npm i -D @nesvel/knip-config knipQuick start
Using Installation Script (Recommended)
Install a preset using the built-in command:
# Install base preset (simple library)
pnpm knip-install
# Or specify a preset
pnpm knip-install library
pnpm knip-install vite
pnpm knip-install nextjs
pnpm knip-install workspaceManual Installation
Copy a preset to your project root:
cp node_modules/@nesvel/knip-config/src/presets/base.json knip.jsonAvailable Presets
base
Simple library with a single entry point (src/index.ts). Best for basic TypeScript libraries.
library
Library with multiple entry points and test framework support. Includes Jest/Vitest configuration.
vite
Vite/React application with proper handling of index.html, main.tsx, and Vite config.
nextjs
Next.js application supporting both Pages Router and App Router.
workspace
Monorepo/workspace configuration with patterns for apps/*, packages/*, and packages/tools/*.
Usage
Add scripts to your package.json:
{
"scripts": {
"knip": "knip",
"knip:fix": "knip --fix",
"knip:strict": "knip --strict",
"knip:install": "knip-install"
}
}Run knip:
# Check for unused code
pnpm knip
# Auto-remove unused dependencies
pnpm knip --fix
# Strict mode (fails on any issue)
pnpm knip --strictCustomization
After installing a preset, you can customize knip.json as needed:
{
"$schema": "https://unpkg.com/knip@5/schema.json",
"entry": ["src/index.ts"],
"project": ["src/**/*.{ts,tsx}"],
"ignore": [
"**/node_modules/**",
"**/dist/**",
"**/my-custom-ignore/**"
],
"ignoreDependencies": [
"my-special-package"
]
}CI/CD Integration
Add Knip to your CI pipeline:
# .github/workflows/ci.yml
- name: Check for unused code
run: pnpm knip --productionOr add it to your package.json:
{
"scripts": {
"ci": "pnpm typecheck && pnpm lint && pnpm test && pnpm knip --production"
}
}Recommendations
- ✅ Run
pnpm kniplocally before committing to keep dependencies tidy - ✅ Use
--fixcautiously; review changes in PRs - ✅ Add
pnpm knip --productionto CI to catch issues early - ✅ Start with a permissive config and tighten over time
- ✅ Use
ignoreExportsUsedInFilefor type-only exports
Troubleshooting
False positives
If Knip reports something as unused but it's actually used:
- Add it to
ignoreorignoreDependenciesinknip.json - Check if the file/export is actually being imported correctly
- Use
includeEntryExports: trueto mark entry point exports as used
Config not working
Make sure:
knip.jsonexists in your project root- Patterns use glob syntax (e.g.,
src/**/*.tsnotsrc/) - Entry points are correctly specified
License
MIT © Nesvel
