54 CLI Tools I Built with Node.js — Sorted by Usefulness
I built 54 command-line tools with Node.js over the past year. Some solve real problems I hit daily. Others were 2 AM rabbit holes I never returned to. Here they are, ranked honestly from "I'd be lost without this" to "I can't believe I spent four hours on that."
Every tool is on npm. Every install command works. And I've tagged each one with the tier it actually deserves.
Tier S — Must-Have (Top 5)
These are the tools I actually use every single day. If my machine got wiped, these get reinstalled before VS Code.
1. envcheck-cli
Validate .env files against .env.example — catch missing variables before production does.
npm install -g @chengyixu/envcheck-cli
envcheck --source .env --template .env.example
# Missing: DATABASE_URL, REDIS_HOST
# Extra: OLD_API_KEY (not in template)
# Empty: SMTP_PASSWORD (defined but blank)
I built this after deploying to staging with a missing STRIPE_SECRET_KEY and watching the checkout page throw 500s for an hour. It now runs in my CI pipeline on every push. The --ci flag exits with code 1 on any mismatch, so the build fails before bad config ever reaches a server.
2. depcheck-ai
Smart dependency auditing — find outdated, vulnerable, and deprecated packages with risk scoring.
npm install -g @chengyixu/depcheck-ai
depcheck-ai --audit --score
# lodash 4.17.20 → 4.17.21 [SECURITY] Prototype pollution Risk: HIGH
# left-pad 1.3.0 [DEPRECATED] Use String.padStart Risk: LOW
# express 4.18.2 → 4.21.0 [OUTDATED] 6 months behind Risk: MEDIUM
This combines npm audit, npm outdated, and deprecation checks into one command with a risk score. The --score flag ranks every dependency by how urgently you should deal with it. The difference between this and npm audit alone: this actually tells you what to do about each finding.
3. filewatch-cli
Watch files and run commands on change. Zero dependencies. Glob support. Process restart.
npm install -g @chengyixu/filewatch-cli
filewatch "src/**/*.ts" --run "npm test" --debounce 500
# Watching 47 files...
# [changed] src/utils/parser.ts
# Running: npm test
# ✓ 23 tests passed
Yes, nodemon exists. Yes, chokidar exists. But this is 400 lines of code with zero dependencies, and it does exactly what I need: watch a glob, run a command, debounce intelligently, and restart long-running processes cleanly. It starts in under 50ms where nodemon takes 200-300ms on my machine.
4. dotenv-vault-cli
Encrypt .env files so you can commit them safely. Share secrets without Slack DMs.
npm install -g @chengyixu/dotenv-vault-cli
dotenv-vault encrypt .env --key my-team-passphrase
# Encrypted → .env.vault (safe to commit)
dotenv-vault decrypt .env.vault --key my-team-passphrase
# Decrypted → .env (19 variables restored)
Every team has the "how do we share .env files" problem. Slack DMs? Google Drive? 1Password? This encrypts the file with AES-256 using a shared passphrase. New developer joins? Give them the passphrase, they run decrypt, done. The diff command compares two vault files without decrypting them fully, so you can see what changed in a PR.
5. gitpulse
Instant health check for any GitHub repo — activity score, bus factor, response times.
npm install -g @chengyixu/gitpulse
gitpulse facebook/react
# Health Score: 92/100
# Bus Factor: 14 (healthy)
# Avg Issue Response: 4.2 hours
# Last Commit: 2 hours ago
# Verdict: Actively maintained, low risk
Before adding a dependency, I run this. Before contributing to a project, I run this. It checks commit frequency, contributor distribution, issue response times, and PR merge velocity. The bus factor calculation alone has saved me from adopting three "maintained by one person who last committed 8 months ago" libraries.
Tier A — Very Useful (10 Tools)
I reach for these weekly. They solve real problems, just not daily ones.
6. json-diff
Compare JSON files with color-coded structural diffs and JSON Patch output.
npm install -g @chengyixu/json-diff
json-diff config.old.json config.new.json --patch
# [ADDED] settings.darkMode: true
# [CHANGED] settings.timeout: 3000 → 5000
# [REMOVED] settings.legacyMode
# JSON Patch (RFC 6902): 3 operations written to patch.json
The killer feature is RFC 6902 JSON Patch output. You get a machine-readable patch file you can apply programmatically, not just a human-readable diff. I use this in deployment scripts to validate config changes before they go live.
7. apispec-cli
Generate OpenAPI specs from Express/Fastify/Koa route files.
npm install -g @chengyixu/apispec-cli
apispec-cli scan ./src/routes --framework express --output openapi.yaml
# Scanned 23 route files
# Found 47 endpoints
# Generated OpenAPI 3.0 spec → openapi.yaml
Point it at your routes directory and it reverse-engineers an OpenAPI spec from your code. It reads JSDoc comments for descriptions, infers request/response types from TypeScript annotations, and validates the output spec. Not perfect — it misses middleware-injected params — but it gets you 80% of the way there in seconds.
8. httpstat
Visualize HTTP timing like curl, but actually readable.
npm install -g @chengyixu/httpstat
httpstat https://api.example.com/users
# DNS Lookup TCP Connection TLS Handshake Server Processing Transfer
# 12ms 34ms 89ms 142ms 8ms
# Total: 285ms Status: 200 OK
A waterfall chart in your terminal showing exactly where time is being spent. DNS slow? TLS renegotiating? Server just being sluggish? You see it instantly. I use this more than I use Postman now.
9. api-health
Monitor API endpoints with response times, status codes, and SSL expiry.
npm install -g @chengyixu/api-health
api-health check https://api.myapp.com https://api.myapp.com/health --interval 30
# ✓ / 200 OK 142ms SSL: 83 days remaining
# ✓ /health 200 OK 23ms SSL: 83 days remaining
# Monitoring every 30s... (Ctrl+C to stop)
Simple uptime monitoring from your terminal. Set it running in a tmux pane and you have a poor man's Pingdom. The SSL certificate expiry warning alone has saved me from two embarrassing outages.
10. commitviz-cli
GitHub-style commit heatmaps in your terminal.
npm install -g @chengyixu/commitviz-cli
commitviz --repo . --period 6months
# ░░▓▓██░░▓▓▓▓██████▓▓░░░░▓▓██▓▓
# Mon ░░▓▓██░░▓▓▓▓██████▓▓░░░░▓▓██
# 523 commits | Top day: March 19 (87 commits)
# Top contributor: wilsonxu (100%)
Great for README screenshots. Even better for sprint retrospectives. "Why did velocity drop in week 3?" Pull up the heatmap and the answer is usually obvious. The file churn analysis shows which files change most frequently — a reliable indicator of where bugs will appear next.
11. csvutil-cli
Swiss Army knife for CSV in the terminal — view, filter, sort, stats, convert.
npm install -g @chengyixu/csvutil-cli
csvutil stats sales.csv --column revenue
# Count: 1,247 Mean: $3,421 Median: $2,800 StdDev: $1,893
# Min: $12 Max: $48,200 Sum: $4,267,987
I stopped opening Excel for quick data questions after building this. Column stats, filtering by regex, sorting, converting to JSON or Markdown tables — it covers the 90% of CSV operations that don't require a full spreadsheet. The join command for merging CSVs on a shared column is genuinely useful.
12. websnap-reader
Convert any webpage to clean Markdown. Reader mode for the terminal.
npm install -g websnap-reader
websnap https://example.com/long-article --format markdown
# Extracted 2,847 words from "Understanding TCP/IP"
# Saved to: understanding-tcp-ip.md
I use this to save articles I want to read offline, strip paywalls (ethically — for content I've paid for), and feed web content into other scripts. The --batch flag takes a file of URLs and processes them in parallel.
13. npmdeps-cli
Visualize dependency trees in the terminal with colored ASCII output.
npm install -g @chengyixu/npmdeps-cli
npmdeps tree express --depth 2
# express@4.21.0
# ├── body-parser@1.20.3
# │ ├── bytes@3.1.2
# │ └── content-type@1.0.5
# ├── cookie@0.7.1
# └── ... (34 dependencies, 847 total)
npm ls exists, but it's noisy and doesn't highlight problems. This color-codes by status (outdated = yellow, vulnerable = red, deprecated = strikethrough), shows size contribution, and flags duplicate packages pulled in at different versions.
14. changelog-gen-cli
Generate changelogs from conventional commit history.
npm install -g @chengyixu/changelog-gen-cli
changelog-gen --from v1.2.0 --to HEAD
# ## [1.3.0] - 2026-03-20
# ### Features
# - Add dark mode toggle (a3f2b1c)
# - Support CSV export (7d1e4a9)
# ### Bug Fixes
# - Fix memory leak in watcher (2c8f1b3)
If your team uses conventional commits (feat:, fix:, chore:), this generates a clean changelog automatically. If your team doesn't use conventional commits, this tool is useless to you. I tried adding "smart commit message parsing" for non-conventional commits. It was a disaster. Garbage in, garbage out.
15. ghprofile-stats
Beautiful CLI dashboard for any GitHub user's stats.
npm install -g ghprofile-stats
ghprofile-stats chengyixu
# Repos: 43 Stars: 127 Forks: 34 Followers: 89
# Top Language: TypeScript (67%) PRs Merged: 156
# Contribution Streak: 23 days
# Most Active: Tuesday 2-4 PM
Built this partly for vanity, partly because it's useful for evaluating potential collaborators. The "most active hours" feature is oddly fascinating. Turns out I write 40% of my code between midnight and 3 AM.
Tier B — Nice to Have (15 Tools)
Solid tools that solve narrower problems. I use them monthly or when a specific situation arises.
16. compose-viz-cli
Visualize Docker Compose files as ASCII trees with Mermaid export.
npm install -g @chengyixu/compose-viz-cli
compose-viz docker-compose.yml --mermaid
# Generated mermaid diagram → compose.mmd
17. scaffold
Scaffold projects from templates with variable substitution.
npm install -g @chengyixu/scaffold
scaffold create my-api --template express-ts --var DB=postgres
18. clitest-runner
Test CLI tools with YAML-defined test cases and snapshot testing.
npm install -g @chengyixu/clitest-runner
clitest run tests.yaml --snapshot --parallel
# ✓ 12/12 tests passed (3 snapshots updated)
19. urlmeta-cli
Extract Open Graph, Twitter Cards, and meta tags from any URL.
npm install -g urlmeta-cli
urlmeta https://github.com/nodejs/node
# Title: Node.js OG:Image: https://... Twitter:Card: summary_large_image
20. portfinder-cli
Find open ports, check what's listening, and kill processes by port.
npm install -g @chengyixu/portfinder-cli
portfinder --scan 3000-3100
# 3000: node (PID 12847) 3001: open 3002: open
portfinder --kill 3000
# Killed PID 12847 on port 3000
21. logparse-cli
Parse, filter, and aggregate structured log files (JSON, Apache, nginx).
npm install -g @chengyixu/logparse-cli
logparse access.log --format nginx --top-paths 10 --status 5xx
22. gitstats-cli
Local git statistics — lines added/removed per author, per week.
npm install -g @chengyixu/gitstats-cli
gitstats --period 30d --by-author
# wilsonxu: +12,847 / -3,291 (142 commits)
23. readme-gen
Generate README.md from package.json, JSDoc, and directory structure.
npm install -g @chengyixu/readme-gen
readme-gen --scan . --output README.md
# Generated README with: install, usage, API docs, license
24. semver-bump
Interactively choose version bumps with changelog preview.
npm install -g @chengyixu/semver-bump
semver-bump
# Current: 1.2.3
# patch → 1.2.4 (3 fixes since last release)
# minor → 1.3.0 (2 features + 3 fixes)
25. tsconfig-lint
Lint your tsconfig.json for common mistakes and anti-patterns.
npm install -g @chengyixu/tsconfig-lint
tsconfig-lint
# WARN: strict is false — consider enabling for new projects
# ERROR: outDir same as rootDir — compiled files will overwrite source
26. gitignore-gen
Generate .gitignore files from templates. Covers 400+ technologies.
npm install -g @chengyixu/gitignore-gen
gitignore-gen node,macos,vscode > .gitignore
27. pkgjson-lint
Validate and fix common package.json issues.
npm install -g @chengyixu/pkgjson-lint
pkgjson-lint --fix
# Fixed: missing "repository" field
# Fixed: inconsistent dependency versions
28. color-convert-cli
Convert colors between hex, RGB, HSL, and CMYK from the terminal.
npm install -g @chengyixu/color-convert-cli
color-convert "#FF5733" --to hsl
# hsl(11, 100%, 60%)
29. mdtoc-cli
Generate a table of contents for Markdown files.
npm install -g @chengyixu/mdtoc-cli
mdtoc README.md --insert
# Inserted TOC with 14 entries after first heading
30. license-checker-cli
Scan all dependencies and report their licenses. Flag problematic ones.
npm install -g @chengyixu/license-checker-cli
license-checker --deny GPL-3.0 --allow MIT,Apache-2.0
# 2 packages with denied licenses: pkg-a (GPL-3.0), pkg-b (GPL-3.0)
Tier C — Niche (15 Tools)
These solve very specific problems. If you have the problem, they're great. If you don't, you'll wonder why they exist.
31. regex-test-cli
Test regular expressions against input strings with match highlighting.
npm install -g @chengyixu/regex-test-cli
regex-test "(\d{3})-(\d{4})" "Call 555-1234 or 555-5678"
# Match 1: [555-1234] Groups: [555] [1234]
# Match 2: [555-5678] Groups: [555] [5678]
32. jwt-decode-cli
Decode JWT tokens and check expiry from the terminal.
npm install -g @chengyixu/jwt-decode-cli
jwt-decode eyJhbGciOi...
# Header: {"alg":"RS256","typ":"JWT"}
# Payload: {"sub":"user123","exp":1711036800}
# Expires: 2026-03-22T00:00:00Z (2 days from now)
33. base64-cli
Encode/decode base64 with file support and URL-safe variants.
npm install -g @chengyixu/base64-cli
base64-cli encode "Hello, World!" --url-safe
34. hash-cli
Hash strings or files with MD5, SHA-1, SHA-256, SHA-512.
npm install -g @chengyixu/hash-cli
hash-cli sha256 ./package-lock.json
# a3f2b1c8e9d4... (sha256)
35. ip-info-cli
Look up IP geolocation, ASN, and reverse DNS from the terminal.
npm install -g @chengyixu/ip-info-cli
ip-info 8.8.8.8
# Location: Mountain View, CA, US ASN: AS15169 Google LLC
36. cron-explain-cli
Translate cron expressions to human-readable descriptions.
npm install -g @chengyixu/cron-explain-cli
cron-explain "0 */6 * * 1-5"
# "At minute 0, every 6 hours, Monday through Friday"
# Next 3 runs: Mon 06:00, Mon 12:00, Mon 18:00
37. uuid-cli
Generate UUIDs (v4, v5, v7) and ULID from the terminal.
npm install -g @chengyixu/uuid-cli
uuid-cli v4 --count 5
38. timestamp-cli
Convert between Unix timestamps, ISO 8601, and relative time.
npm install -g @chengyixu/timestamp-cli
timestamp-cli 1711036800
# 2026-03-22T00:00:00Z "2 days from now" "Saturday"
39. placeholder-img-cli
Generate placeholder images with custom dimensions, color, and text.
npm install -g @chengyixu/placeholder-img-cli
placeholder-img 800x600 --bg "#eee" --text "Hero Image" --out hero.png
40. password-gen-cli
Generate secure passwords and passphrases with entropy calculation.
npm install -g @chengyixu/password-gen-cli
password-gen --length 24 --symbols --entropy
# G$k9!mP2@vX4nR7&wQ1 (entropy: 143 bits)
41. http-mock-cli
Spin up a mock HTTP server from a JSON definition file.
npm install -g @chengyixu/http-mock-cli
http-mock --config mocks.json --port 4000
# Mock server running on http://localhost:4000
# GET /users → 200 (3 routes loaded)
42. sitemap-gen-cli
Crawl a website and generate an XML sitemap.
npm install -g @chengyixu/sitemap-gen-cli
sitemap-gen https://example.com --depth 3 --output sitemap.xml
# Crawled 147 pages in 12s → sitemap.xml
43. ssl-check-cli
Check SSL certificate details and chain validity for any domain.
npm install -g @chengyixu/ssl-check-cli
ssl-check example.com
# Issuer: Let's Encrypt Valid: 67 days Grade: A+ Chain: ✓ valid
44. dns-lookup-cli
DNS record lookup with all record types and trace mode.
npm install -g @chengyixu/dns-lookup-cli
dns-lookup example.com --type ALL
# A: 93.184.216.34 AAAA: 2606:2800:: MX: mail.example.com TXT: "v=spf1..."
45. whois-cli
WHOIS lookup with parsed, structured output.
npm install -g @chengyixu/whois-cli
whois-cli example.com --json
# Registrar: ICANN Created: 1995-08-14 Expires: 2026-08-13
Tier D — Built for Fun (9 Tools)
These exist because I was curious, bored, or procrastinating on something more important. No regrets.
46. ascii-art-cli
Convert images to ASCII art in the terminal.
npm install -g @chengyixu/ascii-art-cli
ascii-art ./photo.jpg --width 80
# @@@@@@%%##**++==--..
# (it looks cool, I promise)
47. weather-cli
Check the weather from your terminal. Because alt-tabbing is hard.
npm install -g @chengyixu/weather-cli
weather-cli "Toronto"
# 🌤 12°C Feels like: 9°C Humidity: 45% Wind: 15 km/h NW
48. fortune-cli
Random programming quotes and jokes for your terminal startup.
npm install -g @chengyixu/fortune-cli
fortune-cli
# "There are only two hard things in Computer Science:
# cache invalidation and naming things." — Phil Karlton
49. pomodoro-cli
Terminal Pomodoro timer with system notifications.
npm install -g @chengyixu/pomodoro-cli
pomodoro-cli start --work 25 --break 5
# 🍅 Focus: 24:59 remaining...
50. matrix-rain-cli
The Matrix digital rain effect in your terminal. No practical use whatsoever.
npm install -g @chengyixu/matrix-rain-cli
matrix-rain --color green --speed fast
# ╎ヨ₧╎ヨ₧╎ヨ₧╎ヨ₧ (you've seen the movie)
51. cowsay-node
ASCII cow says your message. A classic, reimplemented.
npm install -g @chengyixu/cowsay-node
cowsay-node "Ship it!"
# __________
# < Ship it! >
# ----------
# \ ^__^
# \ (oo)\_______
# (__)\ )
52. lolcat-cli
Rainbow-colored text output. Because plain white text is boring.
npm install -g @chengyixu/lolcat-cli
echo "Hello World" | lolcat-cli
# H e l l o W o r l d (in beautiful rainbow gradient)
53. typewriter-cli
Print text with a typewriter animation effect.
npm install -g @chengyixu/typewriter-cli
typewriter-cli "Deploying to production..." --speed 50
54. elevator-music-cli
Play elevator music while your build runs. That's it. That's the tool.
npm install -g @chengyixu/elevator-music-cli
elevator-music-cli & npm run build
# ♫ Playing smooth jazz... (build completes) ♫ Stopped.
What I Learned Building 54 Tools
Tier S tools solve recurring pain. Every S-tier tool was born from a real production incident or a workflow friction I hit repeatedly. envcheck-cli exists because I deployed with missing variables. filewatch-cli exists because nodemon was too slow. The tools I use most are the ones that were born from genuine frustration, not "wouldn't it be cool if."
Tier D tools taught me the most. Building ascii-art-cli taught me about terminal escape codes and image processing in Node. matrix-rain-cli taught me about terminal rendering performance. The "useless" tools were the ones where I explored the most unfamiliar territory.
Zero-dependency tools are underrated. Most of my Tier S and A tools have zero runtime dependencies. They install in under a second, have no supply chain risk, and never break because a transitive dependency pushed a bad update. I wrote my own arg parser, my own colored output, my own file watcher. It was more work, but the result is tools I trust completely.
Naming is half the battle. envcheck-cli gets more installs than dotenv-validator ever would. Short, descriptive names that tell you exactly what the tool does in one compound word are the sweet spot. If I have to explain the name, I've already lost.
Ship fast, iterate never. Controversial take: most of these tools were "done" in a single session. I published them and moved on. The ones that got traction (like gitpulse) I came back to. The rest? They work fine as v1.0.0 and probably always will.
The Full Tier List
| Tier | Count | Philosophy |
|---|---|---|
| S | 5 | "I'd be lost without this" |
| A | 10 | "Reach for it weekly" |
| B | 15 | "Right tool for the right job" |
| C | 15 | "If you have the problem, it's great" |
| D | 9 | "Built for fun, no regrets" |
Which tier would YOU put them in? Let me know in the comments. And if you've built your own CLI tools, I'd love to see your tier list. The best tools are always the ones someone built to scratch their own itch.
Top comments (0)