
Git-нативный контроллер допуска зависимостей. Оценивает сигналы доверия при каждом изменении зависимостей и блокирует коммиты или сборки, когда пакеты не соответствуют политике вашей команды. Pre-commit hook + CI-шлюз со встроенным рабочим процессом утверждения.
Git-родной контроллер допуска зависимостей. Оценивает сигналы доверия при каждом изменении зависимостей.

trustlock работает как Git-хук pre-commit (рекомендательный режим) и как проверка в CI (режим принуждения):
--enforce): блокирует при нарушениях, завершается с кодом 1, никогда не обновляет базовую линию.Сигналы доверия, оцениваемые для каждого пакета:
npm install -g trustlock
Требуется Node.js >= 18.3.
# 1. Инициализация trustlock в вашем проекте
trustlock init
# 2. Установка Git-хука pre-commit
trustlock install-hook
# 3. Опционально: просмотр текущей ситуации с зависимостями
trustlock audit
После init trustlock создаёт:
.trustlockrc.json — конфигурация политик.trustlock/baseline.json — снимок доверенных зависимостей.trustlock/approvals.json — записи об утверждениях.trustlock/.cache/ — кеш реестра (игнорируется git)Зафиксируйте .trustlockrc.json и .trustlock/baseline.json в своём репозитории.
# Выполните обычную установку зависимостей
npm install [email protected]
# trustlock check запускается автоматически через хук pre-commit.
# Для ручного запуска:
trustlock check
# Вывод, когда все пакеты допущены:
# ✔ [email protected] — допущен
Когда все пакеты проходят проверку, trustlock check автоматически обновляет базовую линию (только в рекомендательном режиме) и завершается с кодом 0.
# Новый пакет не проходит правило «остывания»:
trustlock check
# ✖ [email protected] — заблокирован
# exposure:cooldown Опубликован 2ч назад (политика требует 72ч)
# Запустите для утверждения: trustlock approve [email protected] --override cooldown --reason "..." --expires 7d
# Утвердите переопределение, затем перепроверьте:
trustlock approve [email protected] \
--override cooldown \
--reason "Необходимо для функции X; безопасность подтверждена ревью команды" \
--expires 7d
trustlock check
# ✔ [email protected] — допущен с утверждением
# Обнаружение расхождений версий и несоответствий происхождения в пакетах монорепозитория
trustlock audit --compare packages/frontend packages/backend packages/shared
trustlock поставляется с двумя встроенными профилями, выбираемыми через --profile:
| Профиль | Действие |
|---|---|
strict | 168ч остывание, требуется происхождение для всех пакетов |
relaxed | 24ч остывание, без блокировки по регрессу происхождения или смене издателя |
# Использовать строгий профиль в CI
trustlock check --enforce --profile strict
Команды могут централизовать политику в общем URL и расширять её для каждого репозитория:
{
"extends": "https://policy.example.com/trustlockrc.json",
"cooldown_hours": 96
}
Конфигурации репозиториев могут только ужесточать политику организации — защита от понижения порогов предотвращает снижение обязательных порогов организации.
.trustlockrc.jsonДобавьте trustlock в ваш пайплайн CI:
# GitHub Actions — см. examples/ci/github-actions.yml
- run: npx trustlock check --enforce
Смотрите examples/ для конфигураций GitHub Actions, Lefthook и Husky.
Trustlock оценивает изменения файла блокировки в момент фиксации. Он не перехватывает и не изолирует npm install. Если вредоносный пакет выполняет скрипт postinstall, он выполняется до того, как trustlock его увидит. Trustlock предотвращает фиксацию и слияние скомпрометированного файла блокировки, ограничивая радиус поражения одной машиной разработчика вместо всей команды и продакшена. Для блокировки скриптов во время установки используйте --ignore-scripts или стандартные средства управления скриптами жизненного цикла pnpm.
--ignore-scripts.npm audit или Snyk для баз данных уязвимостей.license-checker или аналоги.trustlock был создан из разочарования в том, насколько пассивен стандартный инструментарий Node.js в отношении того, что на самом деле попадает в проект. npm install загрузит что угодно — пакет, опубликованный две минуты назад, тот, который запускает произвольные скрипты при установке, тот, который за ночь переключился с tarball из реестра на git-URL — и единственная обратная связь, которую вы получаете, — это diff файла блокировки.
Угроза, которую решает trustlock, узкая, но реальная: промежуток между публикацией вредоносной версии и её удалением или обнаружением. Сканеры уязвимостей работают постфактум. trustlock работает в точке допуска, до того как что-либо попадает в ваш репозиторий или CI.
Дизайн намеренно минималистичен. trustlock не имеет зависимостей времени выполнения — сам по себе является инструментом с нулевым риском цепочки поставок. Он не заменяет сканер уязвимостей или аудит зависимостей; он обеспечивает непрерывность доверия. Как только версия попадает в вашу базовую линию, она считается доверенной. Всё новое должно заслужить допуск в соответствии с объявленной вами политикой.
Рабочий процесс утверждений существует для команд, которым требуется запасной выход без потери возможности аудита. Каждое переопределение имеет временную метку, ограничено конкретными правилами и имеет срок действия. clean-approvals — это полноценная команда, а не запоздалая мысль.
| Файл блокировки | Экосистема | Версии |
|---|
package-lock.json | npm | v1, v2, v3 |
pnpm-lock.yaml | pnpm | v5, v6, v9 |
yarn.lock | yarn | classic (v1), berry (v2/v3) |
requirements.txt | Python (pip) | — |
uv.lock | Python (uv) | — |
| Команда | Описание |
|---|
trustlock init | Инициализация trustlock в текущем проекте |
trustlock check | Оценка изменений зависимостей относительно политики |
trustlock approve <pkg>@<ver> | Утверждение заблокированного пакета |
trustlock audit | Сканирование всего дерева зависимостей на соответствие политике доверия |
trustlock audit --compare <dir...> | Сравнение профиля зависимостей между несколькими проектами |
trustlock clean-approvals | Удаление просроченных записей об утверждениях |
trustlock install-hook | Установка Git-хука pre-commit |