
Un controller di ammissione delle dipendenze nativo per Git. Valuta i segnali di fiducia su ogni modifica delle dipendenze e blocca commit o build quando i pacchetti non rispettano la policy del tuo team. Hook pre-commit + gate CI con flusso di approvazione integrato.
Un admission controller per dipendenze nativo Git. Valuta i segnali di fiducia a ogni modifica delle dipendenze.

trustlock viene eseguito come hook pre-commit Git (modalità advisory) e come controllo CI (modalità enforce):
--enforce): blocca in caso di violazioni, esce con 1, non aggiorna mai la baseline.Segnali di fiducia valutati per ogni pacchetto:
npm install -g trustlock
Richiede Node.js >= 18.3.
# 1. Inizializza trustlock nel tuo progetto
trustlock init
# 2. Installa l'hook Git pre-commit
trustlock install-hook
# 3. Opzionalmente, verifica la postura corrente delle dipendenze
trustlock audit
Dopo init, trustlock crea:
.trustlockrc.json — configurazione della policy.trustlock/baseline.json — snapshot delle dipendenze fidate.trustlock/approvals.json — registri delle approvazioni.trustlock/.cache/ — cache del registro (ignorata da git)Esegui il commit di .trustlockrc.json e .trustlock/baseline.json nel repository.
# Esegui una normale installazione di dipendenze
npm install [email protected]
# trustlock check viene eseguito automaticamente tramite l'hook pre-commit.
# Per eseguirlo manualmente:
trustlock check
# Output quando tutti i pacchetti sono ammessi:
# ✔ [email protected] — ammesso
Quando tutti i pacchetti superano il controllo, trustlock check aggiorna automaticamente la baseline (solo in modalità advisory) ed esce con 0.
# Un nuovo pacchetto non supera la regola di cooldown:
trustlock check
# ✖ [email protected] — bloccato
# exposure:cooldown Pubblicato 2 ore fa (la policy richiede 72h)
# Esegui per approvare: trustlock approve [email protected] --override cooldown --reason "..." --expires 7d
# Approva l'override, poi riesegui il controllo:
trustlock approve [email protected] \
--override cooldown \
--reason "Necessario per la funzionalità X; verificato sicuro dal team" \
--expires 7d
trustlock check
# ✔ [email protected] — ammesso con approvazione
# Rileva drift di versione e incongruenze di provenienza tra pacchetti del monorepo
trustlock audit --compare packages/frontend packages/backend packages/shared
trustlock include due profili integrati selezionabili con --profile:
| Profilo | Effetto |
|---|---|
strict | Cooldown di 168 ore, provenienza richiesta per tutti i pacchetti |
relaxed | Cooldown di 24 ore, nessun blocco per regressione di provenienza o cambio publisher |
# Usa il profilo strict in CI
trustlock check --enforce --profile strict
I team possono centralizzare la policy in un URL condiviso ed estenderla per singolo repository:
{
"extends": "https://policy.example.com/trustlockrc.json",
"cooldown_hours": 96
}
Le configurazioni dei repository possono solo inasprire la policy organizzativa — l'enforcement minimo impedisce ai repository di ridurre le soglie imposte dall'organizzazione.
.trustlockrc.jsonAggiungi trustlock alla tua pipeline CI:
# GitHub Actions — vedi examples/ci/github-actions.yml
- run: npx trustlock check --enforce
Vedi examples/ per configurazioni GitHub Actions, Lefthook e Husky.
Trustlock valuta le modifiche al lockfile al momento del commit. Non intercetta né esegue il sandboxing di npm install. Se un pacchetto malevolo esegue uno script postinstall, quell'esecuzione avviene prima che trustlock lo veda. Trustlock impedisce che il lockfile compromesso venga committato e unito, contenendo il raggio di esplosione a una singola macchina sviluppatore anziché all'intero team e alla produzione. Per il blocco degli script in fase di installazione, usa --ignore-scripts o i controlli predefiniti del ciclo di vita di pnpm.
--ignore-scripts per quello.npm audit o Snyk per i database di vulnerabilità.license-checker o simili.trustlock è nato dalla frustrazione per quanto passivo sia il toolchain standard di Node.js riguardo a ciò che viene effettivamente introdotto in un progetto. npm install recupera qualsiasi cosa — un pacchetto pubblicato due minuti fa, uno che esegue script arbitrari in fase di installazione, uno che è passato da un tarball del registro a un URL git durante la notte — e l'unico feedback che ottieni è un diff del lockfile.
Il modello di minaccia affrontato da trustlock è ristretto ma reale: la finestra tra quando una versione malevola viene pubblicata e quando viene rimossa o segnalata. Gli scanner di vulnerabilità operano dopo il fatto. trustlock opera al punto di ammissione, prima che qualcosa arrivi nel tuo repository o nella tua CI.
Il design è intenzionalmente minimale. trustlock non ha dipendenze a runtime — è esso stesso uno strumento a rischio zero di supply chain. Non sostituisce uno scanner di vulnerabilità o un audit delle dipendenze; impone la continuità della fiducia. Una volta che una versione è nella tua baseline, è considerata fidata. Qualsiasi cosa di nuovo deve guadagnarsi l'ammissione secondo la policy che hai dichiarato.
Il flusso di approvazione esiste per i team che hanno bisogno di una via di fuga senza perdere la tracciabilità. Ogni override è timestampato, limitato a regole specifiche e scade. clean-approvals è un comando di prima classe, non un ripensamento.
| Lockfile | Ecosistema | Versioni |
|---|
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) | — |
| Comando | Descrizione |
|---|
trustlock init | Inizializza trustlock nel progetto corrente |
trustlock check | Valuta le modifiche alle dipendenze rispetto alla policy |
trustlock approve <pkg>@<ver> | Approva un pacchetto bloccato |
trustlock audit | Scansiona l'intero albero delle dipendenze per la postura di fiducia |
trustlock audit --compare <dir...> | Confronta la postura delle dipendenze tra più progetti |
trustlock clean-approvals | Rimuove le voci di approvazione scadute |
trustlock install-hook | Installa l'hook Git pre-commit |