user@macos : ~ $ nxtupdate
NxtUpdate
One command finds Homebrew, npm, pip, Cargo, and macOS, then updates them.
NxtUpdate is a universal package updater for macOS. It detects the package managers already installed on your Mac, shows what is outdated, and lets you review and apply those updates from an interactive terminal interface or from direct commands. Missing managers are ignored. There is no config file: install the command and run it.
What it does Example output Questions Commands, flags, and managers
Install
macOS only. Runtime required: Bun 1.0+.
Both install methods below still use Bun as the runtime, so Bun
has to be on your PATH either way. If you have just
installed Bun, open a new terminal first. Then confirm the
command with nxtupdate --version and start the
interface with nxtupdate.
user@macos
:
~
$
npm install -g nxtupdate
user@macos
:
~
$
bun add -g nxtupdate
npmjs.com/package/nxtupdate github.com/scorpion7slayer/NxtUpdate Commands, flags, and managers
What it does
The same five sources are available from the terminal interface and from the CLI. A source is included only when its command is already installed.
-
nxtupdate scandetects Homebrew, Node, Python, Cargo, and macOS. Each hit is printed with its command. Anything that is not installed is listed at the end and left alone. -
nxtupdate listchecks for outdated packages. When more than one manager is present it asks which ones to include, unless you pass--yes. A current manager prints "up to date". A manager that cannot be updated safely is marked skipped, with the reason. -
nxtupdate updatescans first, then asks which managers to update unless you pass--onlyor--yes.--dry-runpreviews the work and does not modify anything.--verboseprints package names during the update. When nothing is outdated it reports that everything is already up to date. -
nxtupdatewith no arguments, ornxtupdate tui, opens the full-screen interface. It scans, then the main menu lets you update packages, view the outdated list, or uninstall. You choose the packages to update or remove, and the update screen shows progress for each manager. Arrow keys move, Enter confirms, and Ctrl+C quits.--dry-runand--no-sudowork ontuithe same way they do onupdate.
Homebrew updates formulae and casks. When you select individual
casks, they are upgraded with brew upgrade --cask,
separate from formulae. Node
covers global packages for the active manager among npm, pnpm,
Yarn, and Bun. Python uses pip3 or pip.
It skips a virtual environment, and it skips an externally
managed environment instead of passing
--break-system-packages. Cargo can be detected from
the cargo command, but listing outdated installed
binaries requires
cargo-install-update.
Install that helper once with
cargo install cargo-install-update. macOS system
updates go through softwareupdate and may ask for
your administrator password. --no-sudo leaves those
updates out of a TUI or CLI run. System updates cannot be
uninstalled.
--only limits list and
update to one manager. It matches the manager name
or its command, for example homebrew,
npm, pip, cargo, or
softwareupdate. Run
nxtupdate <command> --help to see the options
accepted by one command. The full reference is in the
docs.
Example output
nxtupdate scan and nxtupdate list print
plain text. The session below shows the real messages for a Mac
where Homebrew, npm, pip, and softwareupdate are
installed, Cargo is not, and pip reports an externally managed
environment. The wget line is only an example of the
name current โ latest format. Your package names
and versions come from the machine you run it on.
user@macos:~$ nxtupdate scan
๐ Scanning for installed package managers...
โ Found 4 package manager(s):
ยท ๐บ Homebrew (brew)
ยท ๐ฆ Node (npm) (node)
ยท ๐ Python (pip) (pip3) โ skipped: externally managed (PEP 668); use Homebrew, pipx, or a virtual environment
ยท ๐ macOS System (softwareupdate)
Not installed: Rust (Cargo)
nxtupdate list --yes skips the manager picker and
prints one block per manager. A skipped manager keeps the reason
from detection. The total line appears only when at least one
package is outdated.
user@macos:~$ nxtupdate list --yes
๐ Checking for outdated packages...
๐บ Homebrew (1 outdated)
ยท wget 1.21.3 โ 1.25.0
๐ฆ Node (npm) โ up to date
๐ Python (pip) โ skipped: externally managed (PEP 668); use Homebrew, pipx, or a virtual environment
๐ macOS System โ up to date
Total: 1 outdated package(s)
A dry run uses the same scan, then stops before any upgrade.
nxtupdate update --dry-run prints "Dry run mode โ
nothing will be modified", and finishes with "Dry run complete.
Run without --dry-run to apply updates." If the scan finds
nothing to do, the update command prints "Everything is already
up to date!"
Questions
Which computers can run it?
macOS only. The runtime is Bun 1.0 or later.
npm install -g nxtupdate and
bun add -g nxtupdate both need that runtime, because
the published package executes with Bun. After installing Bun,
open a new terminal so the updated PATH is loaded,
then run nxtupdate --version.
What if a package manager is missing?
It is ignored. nxtupdate scan prints the managers it
found and a "Not installed" line for the rest. NxtUpdate does not
install Homebrew, Node, Python, Cargo, or any other manager for
you.
Will it change a Python virtualenv or system Python?
No. Inside a virtual environment, pip is not used. If pip reports
an externally managed environment (PEP 668), Python is shown as
skipped and NxtUpdate will not modify it with
--break-system-packages. The skip text points to
Homebrew, pipx, or a virtual environment.
How do I update one manager, or preview first?
nxtupdate list --only homebrew and
nxtupdate update --only npm limit the run.
--dry-run on update or
tui shows what would change and writes nothing.
--no-sudo skips macOS updates that need an
administrator password. --yes skips confirmation
and the interactive manager picker. --verbose on
update prints the package names being updated.
Can packages be removed?
The terminal interface has an uninstall action. You review the installed packages before anything is removed. Homebrew, Node, Python, and Cargo can remove packages they installed. macOS system updates cannot be uninstalled.
What does Cargo need beyond the cargo command?
Detection only needs cargo on your
PATH. Listing and updating installed binaries uses
cargo-install-update. Without that helper, Cargo
has nothing to list. Install it once:
cargo install cargo-install-update.