Date-stamped: March 2026. Developer tools change faster than navigation commands. New versions ship, flags get added, and sometimes a tool gets replaced entirely. Check --version and --help regularly.
Cross-platform: All commands here work in bash (Git Bash on Windows) and zsh (macOS). Install commands differ by platform — I have noted those where they matter.
Package Manager and Scripts
This was my first "aha" moment in Station 3 — npm run is a launcher. Every script in package.json is a CLI tool with a nickname.
Node Package Manager
npm installs dependencies and runs project scripts. The scripts section in package.json is like a menu — I do not need to memorize the underlying commands.
npm install # install all dependencies
npm run dev # start dev server
npm run build # production build
npm run lint # run linter
npm run format # run formatter
npm run preview # preview the build To see what scripts are available in a project, I run cat package.json and look at the "scripts" section.
Version Control
git tracks changes. gh talks to GitHub. Two different tools, two different jobs — it took me a while to understand the distinction.
Version Control
Universal version control. Pre-installed on most macOS and Linux systems, bundled with Git Bash on Windows. Works with GitHub, GitLab, anything — it is agnostic to the host.
git status # what changed?
git add file.js # stage a file
git add . # stage everything
git commit -m "msg" # save a snapshot
git push # send to remote
git pull # get latest from remote
git log --oneline # recent history
git diff # see unstaged changes GitHub CLI
GitHub-specific — for PRs, issues, and repos without leaving the terminal. I think of git as the engine and gh as the GitHub dashboard.
gh repo view # see repo info
gh repo clone owner/repo # clone a repo
gh issue list # list issues
gh pr create # create a pull request
gh pr status # check PR status
gh pr checkout 42 # check out PR #42 locally Install:
# macOS
brew install gh
# Windows (Git Bash)
winget install GitHub.cli
# Linux
apt install gh Deployment and System Tools
Getting code from my machine to the internet, and installing the tools I need to get there.
Netlify CLI
Deploy, preview, and manage Netlify sites from the terminal. I like the draft deploy — it lets me see the site before it goes live.
npm install -g netlify-cli # install globally
netlify login # authenticate
netlify deploy # draft deploy (preview)
netlify deploy --prod # production deploy
netlify status # check connection Homebrew (macOS and Linux)
The package manager for installing CLI tools on macOS. Most of the modern tools on this page — fd, rg, gh — I installed with Homebrew.
brew install fd # install a tool
brew upgrade fd # update a tool
brew list # see what is installed
brew search ripgrep # find a package Windows alternative: winget is built into Windows 11 and serves the same purpose. Linux alternative: apt (Debian/Ubuntu) or your distribution's package manager.
Search Tools
Finding files and finding text inside files — two different jobs, two different tools. The built-in commands (find, grep) work everywhere. The modern alternatives (fd, rg) are faster and friendlier once installed.
find (files by name)
Search for files by name or pattern. Built into every system — no install required.
# find all .js files
find . -name "*.js"
# find files modified in last 24 hours
find . -mtime -1
# find empty directories
find . -type d -empty fd (faster find)
A modern alternative to find. Faster, simpler syntax, respects .gitignore by default. Once I started using fd, I never went back.
# find all .js files
fd ".js$"
# find files named "config"
fd config
# find only directories
fd --type d Install:
# macOS
brew install fd
# Windows (Git Bash)
winget install sharkdp.fd
# Linux (Debian/Ubuntu)
apt install fd-find
# Note: on Linux, binary installs as 'fdfind'
# Add to your .bashrc or .zshrc:
alias fd=fdfind grep (text inside files)
Search for text patterns inside files. Built into every system — the universal search tool.
# search for "TODO" in all .js files
grep -r "TODO" --include="*.js"
# case-insensitive search
grep -ri "error" src/
# show line numbers
grep -rn "function" src/ rg (faster grep)
ripgrep — a modern alternative to grep. Faster, respects .gitignore, better defaults. Prof. Teeters calls it "grep for the modern developer."
# search for "TODO" in all .js files
rg "TODO" --type js
# case-insensitive search
rg -i "error" src/
# show context around matches
rg -C 3 "function" src/ Install:
# macOS
brew install ripgrep
# Windows (Git Bash)
winget install BurntSushi.ripgrep
# Linux (Debian/Ubuntu)
apt install ripgrep