All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Source NVM before resolving npm tooling for global Node updates, so NVM-managed npm/ncu binaries are preferred in non-interactive runs.
- Suppress the expected first-pass npm
ERESOLVEdetails when the--legacy-peer-depsretry succeeds. - Retry once with npm's suggested one-shot
--allow-scripts=...list when npm reports skipped global install scripts.
- Retry global npm upgrades with
--legacy-peer-depsonly when npm fails withERESOLVE, allowing packages with upstream optional peer metadata conflicts to update while keeping normal npm failures strict.
- Native Windows support via
updates.cmdandupdates.ps1with PowerShell 7 (pwsh) as the only supported Windows runtime. - Native Windows installer/bootstrap script for the official
%LOCALAPPDATA%\\Programs\\updatesstandalone layout. - New Windows-facing release artifacts:
updates-windows.zip,updates-release.json, andinstall-source.json. - CI now builds and verifies release dist artifacts on normal push/PR runs.
- Windows modules:
wingetandbun. - Native Windows support for
node,python,uv,pipx,rustup, andgo.
updatesself-update is now GitHub Releases only for the canonical repoamanthanvi/updates.- Self-update trust now requires release asset digests,
SHA256SUMS,updates-release.json, and immutable published releases. - Native Windows self-update is limited to official standalone installs rooted at
%LOCALAPPDATA%\\Programs\\updates. - Config parsing/documentation now treats
~/.updatesrcas a BOM-tolerant line-orientedKEY=valuefile instead of a shell-sourced file.
UPDATES_SELF_UPDATE_REPO; custom self-update repos are no longer supported.- Any documented expectation that
updatesitself ships through third-party package-manager channels.
pimodule: updates installed extensions of thepiAI coding CLI viapi update.
reposmodule: auto-discovers and updatesaman-*-setupgit repos under~/GitRepos, with optional./scripts/update.shpost-pull execution.REPOS_DIRconfig key in~/.updatesrcto override the default repos base directory.
- 15 new test cases:
--strict,--log-file,--parallelvalidation, Linux dnf/pacman/zypper/apk modules, config quoted values, config boolean keys, pipx/rustup/claude module assertions, empty ncu output handling. Test count: 33 → 48. - 11 navigable section markers (
grep '^# SECTION:' updates) for codebase orientation. config_set_bool()helper to DRY 7 identical boolean config patterns.
- Python parallel pip upgrades no longer interleave output across packages. Each process writes to a temp file and output is replayed sequentially.
- Self-update re-exec now uses original CLI args captured at script entry instead of
main()'s$@, ensuring consistent behavior when config changes between versions.
- Bug report template now supports Linux (renamed "macOS version" → "Operating system").
- Use fd 3 for MODULE_REGISTRY reads to preserve stdin for interactive commands.
- Centralized module metadata into a single registry so module validation, listing, platform support, and dispatch stay in sync.
- Normal self-update checks now use a best-effort per-repo cache for GitHub release metadata and
--self-updateforces a live refresh. - On macOS, the default Homebrew formula-only reminder is now info-level; cask/App Management advisories remain warnings.
- JSON mode now keeps stdout pure while reusing cached timestamps and internal stdout-only helpers.
- Self-update now skips git checkouts and symlink installs before network checks and falls back to cached release metadata when the live GitHub tag lookup fails.
- Removed deprecated flags introduced in
0.9.0:-q/--quiet,-v/--verbose,--python-break-system-packages,--[no-]brew-casks,--[no-]brew-greedy.
--log-level <error|warn|info|debug>(replaces--quiet/--verbose).--jsonmode: JSONL events on stdout; human output on stderr.~/.updatesrcconfig file support +--no-config.--brew-mode <formula|casks|greedy>(replaces--brew-casks/--brew-greedy).--pip-force(replaces--python-break-system-packages).-nalias for--non-interactive.- New modules:
uv,mise,go(goreadsGO_BINARIESfrom~/.updatesrc, defaulting to@latest). - CI runs lint/tests on macOS and Linux.
-q/--quiet(use--log-level warn).-v/--verbose(use--log-level debug).--python-break-system-packages(use--pip-force).--brew-casks,--brew-greedy(use--brew-mode).
- Self-update now accepts checksum entries that include a path prefix (e.g.
dist/updates). - Release
SHA256SUMSnow uses basenames (enables self-update fromv0.8.0).
- Self-update support: checks GitHub Releases and updates the installed
updatesscript.
shellmodule to update Oh My Zsh and custom git plugins/themes.
--fullpreset to enable app/system update modules (Homebrew casks,mas,macos).--brew-casks/--no-brew-casksflags.--mas-upgrade/--no-mas-upgradeflags.--macos-updates/--no-macos-updatesflags.
- On macOS, Homebrew cask upgrades are disabled by default (formula upgrades still run).
- On macOS, the
masandmacosmodules are disabled by default.
- TTY-only ANSI colors for boundary lines and
WARN:/ERROR:prefixes (disable with--no-colororNO_COLOR=1).
- Standardized per-module boundary lines (
==> <module> START/END) and a summary line. - SIGINT/SIGTERM handling with explicit exit codes.
- Linux
apt-getnon-interactive upgrades setDEBIAN_FRONTEND=noninteractive. - Python
pipcalls disable the version check to reduce overhead/noise. --onlynow validates that selected modules are supported on the current platform.
SPEC.mdas a centralized, living specification for the CLI/module contract.PLAN.mdas the execution checklist for this release.- Linux support (including WSL detection).
linuxmodule to upgrade system packages via an auto-detected package manager.--python-break-system-packagesflag to opt into unsafe PEP 668 overrides.
updatesnow supports macOS and Linux (no longer macOS-only).- Python upgrades default to user-site packages when PEP 668 externally-managed is detected.
- Modular CLI with
--only/--skip,--dry-run,--log-file, and--strict. - Modules:
mas,pipx,rustup(in addition to existing brew/npm/pip/claude/macos checks). - Lint + tests + CI workflow.