Make informed updates - see what changed in your Homebrew packages
# Show simple outdated list (like brew outdated)
brew-change
# Show outdated packages with version information
brew-change -v
# Show detailed changelog for specific package
brew-change node
# Show detailed changelogs for all outdated packages in parallel
brew-change -a
# Show changelogs with interactive upgrade prompt
brew-change -u
# Preview the no-signal package plan without executing it
brew-change -u --dry-run
# Highlight packages with breaking changes (-b implies -a)
brew-change -b
# Show version information
brew-change --version
# Show help
brew-change --help- Developers who want to understand package changes before updating
- DevOps Engineers managing production dependencies
- Security-Conscious Users checking for vulnerability fixes
- Power Users who like knowing what's changing in their tools
- Curious Learners exploring how their tools evolve
- Smart Package Detection: GitHub, npm, third-party taps, hybrid packages, and more
- Parallel Processing: Handles multiple packages simultaneously (45-50s for 13 packages)
- Honest Update Assessment: Separates packages into attention, no-signal, and unknown instead of claiming an update is safe
- Preview Before Mutation: Shows Homebrew's
upgrade --dry-runoutput, warns about dependency/dependent effects, and asks for final confirmation - TTY-Aware Progress: Animates interactive work while keeping piped output deterministic
- Breaking Changes Detection: Highlights packages with breaking-change evidence using
-b - Rich Release Info: Full changelogs, commit history, and helpful links
- Revision Support: Advanced handling of Homebrew revision numbers
- Performance Optimized: 75% faster than original with intelligent caching
brew-change -u defaults only to packages whose fresh release evidence produced no risk signal. Packages marked attention or unknown are never bulk-selected. Before any upgrade, brew-change previews the exact named package list with Homebrew, then asks for immediate confirmation. Homebrew can still act on dependencies or dependents shown in that preview.
In a pipe or other non-interactive environment, brew-change prints guidance and never starts an upgrade.
# Install directly via Homebrew tap (dependencies included)
brew install shrwnsan/tap/brew-change
# Verify installation
brew-change --version- Homebrew: Core package manager
- jq: JSON parsing and processing
- curl: HTTP requests with retry logic
- bash: Version 4.0+ for modern shell features
brew-change works seamlessly across all platforms where Homebrew is available:
| Platform | Homebrew Path | Status |
|---|---|---|
| macOS (Intel) | /usr/local/bin/brew |
β Fully supported |
| macOS (Apple Silicon) | /opt/homebrew/bin/brew |
β Fully supported |
| Linux | Detected with brew --prefix |
β Fully supported |
| WSL (Windows Subsystem for Linux) | Detected with brew --prefix |
β Fully supported |
The script automatically detects the correct library path using brew --prefix, ensuring compatibility across all Homebrew installations.
brew-change intelligently handles different package sources:
- GitHub packages: Full release notes with commit history
- npm packages: Registry information with release dates
- Hybrid packages: npm distribution + GitHub development
- Third-party taps: Community tap support (charmbracelet, oven-sh/bun)
- Modern CLI tools: Documentation-repository pattern (alpha)
β See detailed package type examples: Package Types Documentation β Full documentation index: All Documentation
"Package not found" errors
brew info package-name # Check if package exists
brew search package-name # Search for similar packagesSlow performance
brew-change -a # Auto-adjusts if system is busy
export BREW_CHANGE_JOBS=2 # Reduce parallel jobs manuallyNetwork timeouts
curl -I https://api.github.com # Check connectivityClear cache
rm -rf ~/.cache/brew-change/*- Unreleased trusted-update foundation: Honest three-state assessments, canonical cask identities, exact package previews, final confirmation, deterministic tests, signal-safe terminal cleanup, and a strict evidence URL policy
- v1.11.0βv1.11.5: Made
-uinteractive by default, added--dry-run, and refined prompt/spinner behavior - v1.10.0βv1.10.1: Improved interactive upgrade UX and ensured Homebrew receives
--yes - v1.9.0βv1.9.2: Removed prompt timeouts and simplified prompt formatting
- v1.8.0βv1.8.8: Added selective upgrades and iteratively hardened
/dev/ttyprompt handling and animation - v1.7.0: Applied the post-refactor code-review fixes
- v1.6.0: Added positional multi-package support
β Full changelog: CHANGELOG.md
- Homebrew - The missing package manager for macOS
- jq - Command-line JSON processor
- GitHub CLI - Official GitHub command-line tool
MIT License - see LICENSE file for details.
Looking for more?