barnphp / cnkill
Remove composer vendor and node_modules directories in your projects to save disk space.
Requires
- php: ^8.1|^8.2
- ext-pcntl: *
- ext-posix: *
- laravel/prompts: ^0.1.9
- nunomaduro/termwind: ^1.15.1
Requires (Dev)
- laravel-zero/framework: ^10.2
- laravel/pint: ^1.13
- mockery/mockery: ^1.6
- pestphp/pest: ^2.22
This package is auto-updated.
Last update: 2026-05-06 00:32:57 UTC
README
█████████ ██████ █████ █████ ████ █████ █████ █████ ███░░░░░██ ░██████ ░███ ░███ ███░ ░███ ░███ ░███ ███ ░░░ ░███░███ ░███ ░███ ███ ░███ ░███ ░███ ░███ ░███░░███░███ ░███████ ░███ ░███ ░███ ░███ ░███ ░░██████ ░███░░███ ░███ ░███ ░███ ░░███ ███ ░███ ░░█████ ░███ ░░███ ░███ ░███ █ ░███ █ ░░█████████ █████ ░░█████ █████ ░░████ █████ ███████████ ███████████ ░░░░░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░ ░░░░░ ░░░░░░░░░░░ ░░░░░░░░░░░
A Blazing Fast, Interactive TUI tool (like npkill) to find and delete vendor/ and node_modules/ directories in your old projects — freeing up disk space fast.
Installation && Update
We provide multiple installation methods to suit your preferences. The recommended way is the standalone executable for Linux and macOS.
- Quick install (Linux/macOS, standalone executable):
curl -fsSL https://raw.githubusercontent.com/barnphp/cnkill/master/install.sh | sh
- System-wide install (requires sudo):
curl -fsSL https://raw.githubusercontent.com/barnphp/cnkill/master/install.sh | sh -s -- --system
- Install via cpx (the npx for PHP):
cpx barnphp/cnkill
- Install globally via Composer:
composer global require barnphp/cnkill
You will find it installed in ~/.composer/vendor/bin or ~/.config/composer/vendor/bin.
Add it to your PATH or create an alias:
alias cnkill="~/.composer/vendor/bin/cnkill" # or alias cnkill="~/.config/composer/vendor/bin/cnkill"
Usage
cnkill [path: defaults to current path] [options]
## Examples cnkill # find both vendor/ and node_modules/ in current path cnkill /path/to/projects # find both vendor/ and node_modules/ in a specific path cnkill /path/to/projects --node # find node_modules/ only cnkill /path/to/projects --composer # find vendor/ only cnkill /path/to/projects --sort=size # sort by size cnkill /path/to/projects --maxdepth=4 # limit search depth cnkill cache --sort=modified # sort caches by last modified
Configuration
cnkill stores its configuration at ~/.config/cnkill/config.json (respects $XDG_CONFIG_HOME).
Use the config command to manage which targets are scanned and to define custom ones.
Toggle enabled targets
cnkill config
Opens an interactive multi-select list of all known targets (built-in and custom). Use Space to toggle a target on or off, Enter to save, and q to quit without saving.
Add a custom target
cnkill config add
Runs an interactive 4-step wizard:
- Folder name or pattern — a simple name (e.g.
.venv) or a wildcard path pattern (e.g.*/ios/build) - Label — human-readable name shown in
cnkill config - Manifest files — comma-separated files that must exist in the parent directory to confirm it's a real project (e.g.
pyproject.toml, requirements.txt); leave blank to match any - Lock / reference files — files used to determine the "last modified" timestamp; defaults to manifests if left blank
After the wizard, the new target is saved and automatically enabled.
Remove a custom target
cnkill config remove
Presents a list of user-defined custom targets. Select one and confirm to delete it.
Built-in targets
| Target | Directory | Enabled by default |
|---|---|---|
vendor |
vendor (Composer) | Yes |
node |
node_modules (npm/pnpm/yarn/bun) | Yes |
next |
.next (Next.js build output) | Yes |
expo |
.expo (Expo / React Native) | Yes |
turbo |
.turbo (Turborepo cache) | Yes |
svelte-kit |
.svelte-kit (SvelteKit) | Yes |
nuxt |
.nuxt (Nuxt build output) | Yes |
cache |
.cache (generic tool cache) | Yes |
parcel-cache |
.parcel-cache (Parcel bundler) | Yes |
coverage |
coverage (test coverage reports) | Yes |
output |
.output (Nitro / Nuxt server output) | Yes |
dist |
dist (build distribution) | No |
build |
build (generic build output) | No |
derived-data |
DerivedData (Xcode) | No |
android |
android/build (Android / Gradle) | No |
Note: Per-run flags like
--nodeand--composeroverride the saved config for that invocation only.
Controls
| Key | Action |
|---|---|
↑ / ↓ |
Navigate the list |
← / → |
Page through the list |
s |
Cycle sort mode |
Shift + s |
Toggle sort direction |
Space |
Delete the highlighted directory |
q / Ctrl-C |
Quit |
Roadmap
- Interactive TUI with real-time streaming results
- Support for
vendor/directories (Composer) - Support for
node_modules/directories (npm/yarn) - Async size calculation and deletion
- Add support for Windows
- Add a build workflow to publish release binaries automatically
- ... share your ideas in the issues
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please open an issue to report any security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.