Go TUI v0.1.9

packwatch

TUI interactivo para gestionar actualizaciones de dependencias npm. Detecta vulnerabilidades, respeta tu versión de Node, y te deja elegir qué actualizar.

¿Qué hace packwatch?

Lee tu package-lock.json, consulta el npm registry de forma concurrente, detecta vulnerabilidades vía la base de datos OSV (incluye GitHub Security Advisories), y presenta un TUI interactivo para elegir qué actualizar.

  • Detecta tu versión de Node (.nvmrc → .node-version → node --version). Una versión parcial (ej. 20) se resuelve a tu node activo si es de esa línea, o a la última release de esa línea en nodejs.org
  • Lee tu .npmrc de usuario y de proyecto: registry, registries por scope (@scope:registry=) y _authToken con expansión de ${ENV_VAR}. Un token de una ruta padre aplica a todos los registries bajo ella, igual que en npm
  • Parsea package-lock.json v1/v2/v3 y package.json
  • Fetch concurrente al registry para versiones nuevas
  • Revisa advisories de seguridad vía OSV
  • TUI interactivo para seleccionar paquetes a actualizar
  • Genera y ejecuta npm install separando prod/dev y manteniendo el estilo de rango de cada dependencia (^/~/exacta)
  • Detecta dependencias que ya no usas con --unused
terminal — packwatch demo
$ █

Instalación

# via Homebrew (instala node como dependencia)
$ brew install jee4nc/tap/packwatch

Primer uso

Dentro de cualquier proyecto Node.js con package-lock.json:

terminal — quickstart
$ █

Flags disponibles

Flag Tipo Descripción
--prod-only bool Solo revisa dependencias de producción (excluyente con --dev-only)
--dev-only bool Solo revisa dependencias de desarrollo (excluyente con --prod-only)
--unused bool Detecta dependencias no usadas en el código y permite desinstalarlas (combinable con --json)
--json bool Output en JSON por stdout, sin TUI (el progreso va a stderr)
--no-color bool Desactiva colores y emojis (equivale a NO_COLOR=1)
--version bool Muestra versión, commit y fecha de build, y sale
--help, -h — Muestra la ayuda

Atajos de teclado

Tecla Pantalla Acción
↑ / k, ↓ / j selector Navegar
space / tab selector Marcar / desmarcar paquete
a selector Marcar todos
p selector Solo updates patch
m selector Patch + minor
v selector Expandir vulnerabilidades (cuando hay más de 3)
enter selector Confirmar selección
q / esc / ctrl+c selector Salir
y · n / q / esc confirmación Ejecutar · cancelar

El TUI de --unused usa los mismos atajos, sin p, m ni v.

Node version awareness

Cuando la última versión de un paquete requiere un Node más nuevo del que tienes activo, packwatch no la sugiere. En vez de eso, recorre versiones de la más nueva a la más antigua y sugiere la mejor compatible con tu Node:

terminal — node awareness
$ █

Si ya estás en la versión compatible más nueva, el paquete aparece como held back en vez de ofrecer un update que rompería:

terminal — held back
$ █

@types/node se mantiene en el major de Node que apunta tu proyecto: el mínimo de engines.node o, si no está definido, tu Node activo. Si engines.node no acepta tu Node activo, packwatch lo advierte al inicio.

Peer dependencies

Las peerDependencies se revisan en ambas direcciones y sobre todo el plan de updates. Paquetes que se fijan mutuamente (ej. vitest y @vitest/coverage-v8, react y react-dom) se evalúan juntos y se marcan update together: seleccionar uno selecciona a sus pares, y packwatch agrega cualquier par faltante antes de correr npm install.

Nunca sugiere versiones deprecadas ni por encima del dist-tag latest.

Dependencias no usadas

packwatch --unused escanea tu código (import/require, incluidos los nombres cortos de plugins de ESLint) y lista las dependencias directas que no se usan. Puedes elegir cuáles desinstalar desde el TUI.

terminal — unused
$ █

JSON mode

Usa --json para CI pipelines o scripting. Stdout contiene solo el documento JSON; el progreso y los mensajes van a stderr:

terminal — json mode
$ █

El documento trae packwatchVersion, nodeVersion y packages[]. Cada paquete incluye name, installed, available, updateType, isDev, nodeWarning, peerWarning, compatVersion, requiresWith, vulnCount, vulnSeverity, vulnFixedByUpdate y vulnerabilities[]. Con --unused: packwatchVersion, unusedPackages[], totalDependencies y scannedFiles.

Build from source

terminal — build
$ █

Changelog

  1. v0.1.9 latest
    • Añadido Updates coordinados para paquetes con peer deps mutuos (ej. react + react-dom): se sugieren juntos, se marcan update together y se auto-seleccionan los pares.
    • Añadido @types/node se mantiene en el major de Node del proyecto (engines.node o el Node activo).
    • Corregido Los tokens de .npmrc se resuelven subiendo por la ruta del registry, como npm — arregla registries privados tipo JFrog.
  2. v0.1.8
    • Corregido Versiones parciales en .nvmrc/.node-version (ej. 20) se resuelven a una release real.
    • Corregido npm install mantiene el estilo de rango declarado (^, ~, exacto).
    • Corregido El lockfile ignora las instalaciones locales de workspaces.
    • Corregido Fetch al registry más robusto; nunca sugiere versiones deprecadas ni por encima de latest.
  3. v0.1.7
    • Corregido En --json, stdout solo lleva JSON y el progreso va a stderr.
    • Corregido Las vulnerabilidades ya no se marcan como resueltas cuando falla la consulta a OSV.
    • Corregido Paquetes sin versión compatible más nueva se muestran como held back en vez de ofrecer un update que rompería.
    • Corregido Evaluación correcta de rangos semver x-range, exactos y con guion.
    • CI GitHub App token en vez de PATs expirados.
  4. v0.1.6
    • Cambiado --unused resuelve los nombres cortos de plugins/configs de ESLint — menos falsos positivos.
  5. v0.1.5
    • Añadido Detección de conflictos de peer dependencies, con avisos en el TUI.
  6. v0.1.4
    • Añadido Flag --unused para detectar y desinstalar dependencias no usadas, con TUI propio y salida --json.
  7. v0.1.3
    • CI Primera versión con GitHub Release y artefactos (Homebrew, Scoop, .deb, .rpm, binarios).
  8. v0.1.2
    • CI setup-go pasa a v6.
  9. v0.1.1
    • CI Mejora del auto-tagging en GitHub Actions.
  10. v0.1.0
    • Añadido Primera versión: TUI para elegir updates, detección de Node, soporte de .npmrc, lockfile v1/v2/v3, fetch concurrente y chequeo de seguridad.
    • Añadido Flags --prod-only, --dev-only, --json, --no-color y --version.