npm выпустил два обновления безопасности для пакетного менеджера, оба доступны в npm CLI 11.15.0 и новее.
Первое — staged publishing, которое теперь стало общедоступным. Раньше публикация пакета сразу делала новую версию доступной всем пользователям. Теперь можно загрузить собранный tarball в очередь (stage queue), и только после явного одобрения мейнтейнера он попадает в реестр. Очередь видна на npmjs.com и в CLI. Такой механизм подтверждает «доказательство присутствия» (proof of presence) при каждой публикации, включая неинтерактивные CI/CD-пайплайны и trusted publishing с OIDC. Чтобы одобрить staged-пакет, нужна 2FA-проверка живого человека. Для использования npm stage требуется npm CLI 11.15.0, а в CI/CD вместо npm publish нужно вызывать npm stage publish. Вместе с trusted publishing (OIDC) это даёт максимальную защиту: можно настроить, чтобы npm publish из CI отклонялся, а принимался только npm stage publish. CI работает неинтерактивно, а мейнтейнер потом подтверждает версию через сайт или CLI. Можно запускать npm stage publish и локально, но самый полезный сценарий — публикация в очередь из CI и подтверждение с доверенного устройства. Если вы уже управляете конфигурациями trusted publishing массово (функция, выпущенная в феврале 2026), её можно использовать для миграции пакетов на staged publishing.
Второе обновление — новые флаги --allow-* для контроля источников установки. Ещё в npm 11.10.0 появился --allow-git, который разрешает или запрещает npm install из Git-репозиториев. Начиная с 11.15.0 добавили три флага для остальных нереестровых источников: --allow-file (локальные пути и tarball-файлы), --allow-remote (удалённые URL, включая https tarball), --allow-directory (локальные директории). Каждый может быть all (текущий дефолт) или none, настройки можно прописать в .npmrc или package.json. Напоминаем: в следующей мажорной версии CLI (v12) дефолт --allow-git изменится с all на none. Новые флаги уже позволяют ужесточить политику, установив их в none. Релиз жив — можно обновляться и делиться обратной связью в обсуждении на GitHub.