Protégez vos dépendances contre les attaques de la chaîne d'approvisionnement. **Binaire statique unique, zéro dépendance de crate Rust.**
Par **[[arnica](https://arnica.io?utm_source=depsguard&utm_medium=referral&utm_campaign=community)]**
## Table des matières
- [Aperçu](#overview)
- [Installation](#install)
- [Utilisation](#usage)
- [Ce qui est vérifié](#what-gets-checked)
- [Emplacements des fichiers de configuration](#config-file-locations)
- [Correctif de sécurité urgent](#urgent-security-fix)
- [Sauvegardes et restauration](#backups-and-restore)
- [Fonctionnement](#how-it-works)
- [Dépannage](#troubleshooting)
- [Aide et retours](#help--feedback)
- [Guides](#guides)
- [Voir aussi](#see-also)
- [Licence](#license)
## Aperçu
DepsGuard recherche **npm**, **pnpm**, **yarn**, **bun**, **uv**, **pip**, **poetry** et **aube** sur votre machine, lit leurs fichiers de configuration, les compare aux paramètres recommandés pour la chaîne d'approvisionnement, et peut **appliquer des correctifs de manière interactive**. Il analyse également les configurations **Renovate** et **Dependabot** dans vos dépôts. Il n'exécute jamais d'installations de paquets ; il modifie uniquement les fichiers de configuration que vous approuvez, et il écrit des **sauvegardes** avant toute modification.
### Fonctionnalités clés
- TUI interactif : analyser, examiner, activer/désactiver les correctifs, appliquer
- Sous-commande `scan` pour un rapport en lecture seule
- Sous-commande `restore` pour choisir une sauvegarde et restaurer un fichier
- Multi-plateforme : Linux, macOS, Windows
- Aucune crate Rust tierce incluse (stdlib + une petite quantité d'FFI de plateforme pour le terminal)
### Stack technique
| Domaine | Détails |
|------|---------|
| Langage | Rust (MSRV **1.74**, voir `Cargo.toml`) |
| CLI / TUI | `src/main.rs`, `src/ui.rs`, `src/term.rs` |
| Logique de configuration | `src/manager.rs`, `src/fix.rs` |
| Site web | Site statique dans `docs/` (séparé du binaire) |
## Installation
### Binaires préconstruits
Chaque [version GitHub](https://github.com/arnica/depsguard/releases) inclut des archives pour :
- Linux : `x86_64` (glibc), `x86_64` (musl), `aarch64` (glibc)
- macOS : Intel et Apple Silicon
- Windows : ZIP `x86_64` contenant `depsguard.exe`
Téléchargez l'archive pour votre plateforme, décompressez-la, et placez le binaire dans votre `PATH`.
Vérifiez l'intégrité à l'aide du fichier `.sha256` correspondant à côté de chaque artefact sur la page de version.
### Installation par plateforme
#### Linux (Debian/Ubuntu via APT)```bash
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://depsguard.com/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/depsguard.gpg
echo "deb [arch=amd64,arm64 signed-by=/etc/apt/keyrings/depsguard.gpg] https://depsguard.com/apt stable main" | sudo tee /etc/apt/sources.list.d/depsguard.list >/dev/null
sudo apt update
sudo apt install depsguard
macOS / Linux (Homebrew)```bash
Homebrew
brew install depsguard
root@kitploit:~
DepsGuard est dans [homebrew-core](https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/d/depsguard.rb), donc aucun dépôt personnalisé n'est requis.
> **Migration depuis l'ancien dépôt `arnica/depsguard` ?** Passez à la formule officielle une fois :
>
> ```bash
> brew uninstall depsguard
> brew untap arnica/depsguard
> brew update
> brew install depsguard
> ```
#### Windows```powershell
# WinGet
winget install Arnica.DepsGuard
# Scoop
scoop bucket add depsguard https://github.com/arnica/depsguard
scoop install depsguard
Gestionnaires de paquets (lorsqu'ils sont publiés par votre fournisseur)
Si votre organisation distribue DepsGuard via Homebrew, Scoop ou WinGet, suivez leurs instructions. La configuration ou l'automatisation de ces canaux (PRs core Homebrew, buckets, PRs WinGet, secrets CI) relève de la documentation du mainteneur ; voir AGENTS.md sous Publication et distribution.
Magasins d'applications / gestionnaires de paquets
Canal
Linux
macOS
Windows
Commande d'installation
APT (dépôt personnalisé)
oui
non
non
sudo apt install depsguard (après la configuration du dépôt ci-dessus)
Le binaire est `target/release/depsguard` (`.exe` sur Windows). Rust **1.74+** est requis.
## Utilisation```bash
depsguard # interactive: scan, choose fixes, apply
depsguard scan # report only; no writes (exits 1 if action is needed)
depsguard --no-search # skip recursive file search, check local configs only
depsguard restore # restore from a previous backup
depsguard --help # CLI help
Exécutezdepsguard pour lancer l’interface TUI interactive. Elle analyse votre système et affiche un tableau des résultats. Appuyez sur n’importe quelle touche pour accéder au sélecteur de correctifs. La découverte de la configuration au niveau du dépôt commence dans le répertoire courant et recherche vers le bas. Utilisez depsguard scan pour un rapport en lecture seule, ou depsguard --no-search pour ignorer la recherche récursive de fichiers et ne vérifier que les configurations utilisateur.
Remarque : certains réglages nécessitent une version minimale. Si votre version est trop ancienne, vous verrez :
ℹ min-release-age – requires npm ≥ 11.10 (have 10.2.0).
Mettez à jour avec npm install -g npm@latest et relancez.
Naviguer et sélectionner – utilisez ↑↓ pour vous déplacer dans la liste (^u^d pour paginer). Appuyez sur Espace pour activer ou désactiver un correctif. Utilisez les touches de filtrage rapide pour sélectionner en masse par fichier : a tout, n .npmrc, u uv.toml, etc. – appuyez une fois pour sélectionner, à nouveau pour désélectionner, une troisième fois pour effacer le filtre. Appuyez sur f pour n’afficher que les correctifs actuellement sélectionnés.
Aperçu – appuyez sur d pour voir un diff des modifications avant de valider quoi que ce soit.
Appliquer – appuyez sur Entrée pour appliquer les correctifs sélectionnés. Une sauvegarde horodatée est créée avant toute écriture de fichier.
Réanalyse – DepsGuard relance automatiquement l’analyse après l’application, afin que vous puissiez vérifier que tout est vert.
Restaurer – exécutez depsguard restore à tout moment pour revenir en arrière depuis la liste des sauvegardes. Appuyez sur q ou Échap pour quitter.
Ce qui est vérifié
Gestionnaire
Configuration
Paramètre
Cible
Raison
npm
~/.npmrc
min-release-age
7 (jours)
Retarder les toutes nouvelles versions (nécessite npm >= 11.10)
npm/pnpm
~/.npmrc
ignore-scripts
true
Réduire le risque des scripts d’installation (npm respecte ce paramètre dans .npmrc ; pnpm >= 11 le lit depuis pnpm-workspace.yaml / le config.yaml global, pas depuis .npmrc)
pnpm
~/.npmrc
minimum-release-age
10080 (minutes)
Retarder les nouvelles versions de 7 jours (pnpm 10.16–10.x uniquement ; pnpm >= 11 ignore .npmrc ; utilisez pnpm-workspace.yaml)
pnpm
global rc (pnpm <= 10)
minimum-release-age
10080 (minutes)
Retarder les nouvelles versions de 7 jours (nécessite pnpm >= 10.16)
pnpm
global rc (pnpm <= 10)
block-exotic-subdeps
true
Bloquer les dépendances transitives non fiables (nécessite pnpm >= 10.26)
pnpm
global rc (pnpm <= 10)
trust-policy
no-downgrade
Bloquer les rétrogradations de provenance (nécessite pnpm >= 10.21)
pnpm
global rc (pnpm <= 10)
strict-dep-builds
true
Échouer en cas de scripts de build non examinés (nécessite pnpm >= 10.3)
pnpm
global rc (pnpm <= 10)
ignore-scripts
true
Bloquer les scripts d’installation malveillants
pnpm
global config.yaml (pnpm >= 11)
Emplacements des fichiers de configuration
Gestionnaire
Linux
macOS
Windows
npm/pnpm/aube
~/.npmrc
~/.npmrc
%USERPROFILE%\.npmrc
pnpm global (pnpm <= 10)
$XDG_CONFIG_HOME/pnpm/rc ou ~/.config/pnpm/rc
$XDG_CONFIG_HOME/pnpm/rc ou ~/Library/Preferences/pnpm/rc
%LOCALAPPDATA%\pnpm\config\rc
pnpm global (pnpm >= 11)
$XDG_CONFIG_HOME/pnpm/config.yaml ou ~/.config/pnpm/config.yaml
$XDG_CONFIG_HOME/pnpm/config.yaml ou ~/Library/Preferences/pnpm/config.yaml
%LOCALAPPDATA%\pnpm\config\config.yaml
yarn
~/.yarnrc.yml
~/.yarnrc.yml
%USERPROFILE%\.yarnrc.yml
pnpm
pnpm-workspace.yaml
pnpm-workspace.yaml
pnpm-workspace.yaml
bun
$XDG_CONFIG_HOME/.bunfig.toml ou ~/.bunfig.toml
$XDG_CONFIG_HOME/.bunfig.toml ou ~/.bunfig.toml
%USERPROFILE%\.bunfig.toml
uv
$XDG_CONFIG_HOME/uv/uv.toml ou ~/.config/uv/uv.toml
$XDG_CONFIG_HOME/uv/uv.toml ou ~/.config/uv/uv.toml
%APPDATA%\uv\uv.toml
pip
$XDG_CONFIG_HOME/pip/pip.conf ou ~/.config/pip/pip.conf
~/Library/Application Support/pip/pip.conf ou ~/.config/pip/pip.conf (ou $XDG_CONFIG_HOME/pip/pip.conf si défini)
%APPDATA%\pip\pip.ini
poetry
$XDG_CONFIG_HOME/pypoetry/config.toml ou ~/.config/pypoetry/config.toml
Les fichiers de configuration utilisateur sont lus depuis leurs emplacements standards (y compris les chemins basés sur XDG lorsque l’outil les prend en charge). Les configurations au niveau du dépôt sont découvertes en recherchant vers le bas à partir du répertoire courant, en ignorant les répertoires volumineux connus (node_modules, .git, target, Library, .cache, etc.) afin que les analyses restent rapides. Les fichiers .npmrc, .yarnrc.yml, pnpm-workspace.yaml, les configurations Renovate et Dependabot au niveau du dépôt sont tous recherchés. Les paramètres pnpm peuvent résider dans ~/.npmrc (pnpm <= 10 uniquement ; pnpm >= 11 lit uniquement les paramètres d’authentification/registre depuis .npmrc), dans le fichier de configuration global pnpm (rc pour pnpm <= 10, config.yaml pour pnpm >= 11), ou dans pnpm-workspace.yaml ; DepsGuard vérifie les trois emplacements indépendamment. Pour pip, uv et poetry, DepsGuard résout le seul fichier de configuration utilisateur effectif et rapporte uniquement ce fichier, plutôt que de signaler les fichiers masqués séparément. pip et poetry fusionnent leurs fichiers de configuration par priorité (le fichier de plus haute priorité qui définit le délai de refroidissement l’emporte, ou l’emplacement préféré si aucun ne le fait) ; uv lit un seul fichier utilisateur ($XDG_CONFIG_HOME/uv/uv.toml lorsque XDG_CONFIG_HOME est défini, sinon ~/.config/uv/uv.toml) sans fusionner les deux. Pour bun, si plusieurs fichiers de configuration utilisateur existent (par exemple un chemin XDG et un chemin dans le répertoire personnel), DepsGuard analyse chaque fichier existant séparément. aube lit le même ~/.npmrc que npm/pnpm (minimumReleaseAge, en minutes) et est également vérifié sur les fichiers .npmrc découverts au niveau du dépôt ; pip et poetry sont analysés à partir de leur configuration utilisateur (pip.conf / pypoetry/config.toml).
Correctif de sécurité urgent
Si la version corrigée est plus récente que votre fenêtre de délai de refroidissement, ajoutez une exception étroite, installez le correctif, puis supprimez l’exception.
Préférez une exception spécifique à un paquet plutôt que d’abaisser le délai de refroidissement global. Cela maintient le délai pour toutes les autres dépendances.
Gestionnaire
Comment contourner le délai de refroidissement
npm
npm install <pkg>@<ver> --min-release-age=0
pnpm
Ajoutez une entrée à minimumReleaseAgeExclude dans pnpm-workspace.yaml, exécutez pnpm add <pkg>@<ver>, puis supprimez l’entrée. L’exclusion par nom de paquet fonctionne sur pnpm 10.16+ ; le verrouillage d’une version spécifique (<pkg>@<ver>) nécessite en plus pnpm 10.19+. pnpm n’a pas de remplacement CLI documenté pour minimumReleaseAge.
yarn
Ajoutez <pkg> (ou un glob) à npmPreapprovedPackages dans .yarnrc.yml, ou exécutez YARN_NPM_MINIMAL_AGE_GATE=0s yarn up <pkg>@<ver> pour une seule commande. npmPreapprovedPackages exempte les correspondances de toutes les passerelles de paquets Yarn, pas seulement la passerelle d’âge.
bun
Ajoutez <pkg> à install.minimumReleaseAgeExcludes dans un bunfig.toml au niveau du dépôt ou un ~/.bunfig.toml utilisateur, ou exécutez bun add <pkg>@<ver> --minimum-release-age 0.
aube
Ajoutez <pkg> à minimumReleaseAgeExclude dans .npmrc, ou définissez AUBE_MINIMUM_RELEASE_AGE=0 (ou npm_config_minimum_release_age=0) pour une seule installation.
uv
Ajoutez "<pkg>" = false à exclude-newer-package dans uv.toml ou pyproject.toml, exécutez uv add <pkg>==<ver>, puis supprimez l’entrée. exclude-newer-package est un remplacement séparé par paquet de la limite globale exclude-newer. L’interface CLI de uv accepte --exclude-newer-package PACKAGE=DATE mais pas PACKAGE=false.
pip
Exécutez pip install <pkg>==<ver> --uploaded-prior-to=P0D pour une seule installation. P0D désactive le délai de refroidissement uniquement pour cette commande ; pip n’a pas d’exclusion par paquet dans la configuration.
Avant de contourner le délai de refroidissement :
Vérifiez si la CVE affecte réellement votre utilisation.
Vérifiez si une version plus ancienne connue comme bonne est déjà disponible. Un retour en arrière peut être plus sûr.
Supprimez les exceptions temporaires après la mise à jour.
Sauvegardes et restauration
Avant de modifier un fichier, DepsGuard écrit une sauvegarde dans ~/.depsguard/backups/.
Exécutez depsguard restore pour lister les sauvegardes et en restaurer une.
- **Zéro crate tiers** : intentionnel pour un petit outil de sécurité ; voir `AGENTS.md` si vous modifiez cette politique.
- **Couleurs** utilisant des séquences ANSI ; les terminaux modernes sous Windows (par ex. Windows Terminal) sont pris en charge.
## Dépannage
| Symptôme | Que faire |
|---------|-------------|
| `depsguard: command not found` | Assurez-vous que le répertoire d'installation est dans le `PATH`, ou utilisez le chemin complet du binaire. |
| Erreurs de permission lors de l'écriture de la configuration | DepsGuard ne modifie que les fichiers de votre profil utilisateur ; exécutez-le en tant qu'utilisateur normal, pas avec élévation sauf si ces fichiers appartiennent à l'administrateur. |
| Les touches ne fonctionnent pas sous Windows | Utilisez **Windows Terminal** ou un autre terminal compatible VT ; l'ancien `cmd.exe` peut ne pas gérer toutes les touches. |
| Espaces de travail pnpm manquants | Assurez-vous que `pnpm-workspace.yaml` se trouve sous l'arborescence de votre répertoire personnel ; des dispositions très inhabituelles peuvent ne pas être détectées. |
| `cargo install` échoue | Installez Rust via [rustup](https://rustup.rs/) et utilisez Rust **≥ 1.74**. |
## Aide et retours
- [Signaler un bug ou demander une fonctionnalité](https://github.com/arnica/depsguard/issues)
- [Signaler une vulnérabilité de sécurité](https://github.com/arnica/depsguard/security/advisories/new) (voir [`SECURITY.md`](https://github.com/arnica/depsguard/blob/main/SECURITY.md))
- Le flux de développement pour les contributeurs se trouve dans [`AGENTS.md`](https://github.com/arnica/depsguard/blob/main/AGENTS.md).
## Guides
Des guides approfondis sur [depsguard.com](https://depsguard.com) expliquent chaque paramètre de durcissement et les attaques sur la chaîne d'approvisionnement qu'ils défendent :
- [Comment se protéger contre les attaques sur la chaîne d'approvisionnement npm](https://depsguard.com/guide/) (le guide complet de durcissement)
- [Délai de refroidissement des dépendances (âge minimum de publication)](https://depsguard.com/cooldown/)
- [Bloquer les scripts d'installation avec ignore-scripts](https://depsguard.com/ignore-scripts/)
- [Bloquer les dépendances transitives non fiables (block-exotic-subdeps)](https://depsguard.com/block-exotic-subdeps/)
- [Échouer en cas de scripts de construction non vérifiés (strict-dep-builds)](https://depsguard.com/strict-dep-builds/)
- [Bloquer les rétrogradations de provenance (trust-policy)](https://depsguard.com/trust-policy/)
- Rapports d'incident : [axios](https://depsguard.com/axios-npm-attack/) · [Shai-Hulud](https://depsguard.com/shai-hulud/) · [TanStack](https://depsguard.com/tanstack-npm-attack/)
## Voir aussi
- [**Dependency Cooldowns** (`cooldowns.dev`)](https://cooldowns.dev/) : un guide de référence et un assistant shell compagnon (`cooldowns.sh`) axé spécifiquement sur les **délais de refroidissement par âge minimum de publication**. Complète DepsGuard : il couvre un ensemble plus large d'écosystèmes sur l'axe du refroidissement (pip, uv, npm, pnpm, Yarn, Bun, Deno, Cargo), tandis que DepsGuard couvre npm/pnpm/yarn/bun/aube/uv/pip/poetry plus Renovate/Dependabot et ajoute d'autres paramètres de durcissement (`ignore-scripts`, `block-exotic-subdeps`, `trust-policy`, `strict-dep-builds`) avec une TUI interactive, un aperçu des différences et une sauvegarde/restauration.
## Licence
MIT
---
**Liens :** [Dépôt](https://github.com/arnica/depsguard) · [Site de documentation](https://depsguard.com)
Retarder les nouvelles versions de 7 jours (nécessite yarn >= 4.10)
pnpm
pnpm-workspace.yaml
minimumReleaseAge
10080 (minutes)
Retarder les nouvelles versions de 7 jours (nécessite pnpm >= 10.16)
pnpm
pnpm-workspace.yaml
strictDepBuilds
true
Échouer en cas de scripts de build non examinés (nécessite pnpm >= 10.3)
pnpm
pnpm-workspace.yaml
trustPolicy
no-downgrade
Bloquer les rétrogradations de provenance (nécessite pnpm >= 10.21)
pnpm
pnpm-workspace.yaml
blockExoticSubdeps
true
Bloquer les dépendances transitives non fiables (nécessite pnpm >= 10.26)
pnpm
pnpm-workspace.yaml
ignoreScripts
true
Bloquer les scripts d’installation malveillants (nécessite pnpm >= 10.16)
bun
~/.bunfig.toml
install.minimumReleaseAge
604800 (secondes)
~7 jours de retard (nécessite bun >= 1.3)
aube
~/.npmrc
minimumReleaseAge
10080 (minutes)
Retarder les nouvelles versions de 7 jours
uv
uv.toml
exclude-newer
7 days
Retarder les nouvelles publications (nécessite uv >= 0.9.17)
pip
pip.conf ([install])
uploaded-prior-to
P7D (7 jours)
Retarder les nouvelles publications (nécessite pip >= 26.1)
poetry
config.toml ([solver])
min-release-age
7 (jours)
Retarder les nouvelles publications (nécessite poetry >= 2.4)
renovate
renovate.json etc.
minimumReleaseAge
7 days
Retarder les PR de mise à jour des dépendances de 7 jours
dependabot
.github/dependabot.yml
cooldown.default-days
7
Retarder les PR de mise à jour des dépendances de 7 jours
$XDG_CONFIG_HOME/pypoetry/config.toml (si défini) ou ~/Library/Application Support/pypoetry/config.toml
%APPDATA%\pypoetry\config.toml
renovate
renovate.json, .renovaterc, .github/renovate.json, etc.
(identique)
(identique)
dependabot
.github/dependabot.yml
(identique)
(identique)
poetry
Ajoutez <pkg> à solver.min-release-age-exclude (séparé par des virgules) dans poetry.toml/config.toml, exécutez poetry add <pkg>@<ver>, puis supprimez l’entrée. solver.min-release-age-exclude-source exempte tous les paquets d’un index nommé à la place.
Renovate
Les mises à jour de sécurité contournent déjà minimumReleaseAge. Pour une mise à jour de version, ajoutez une entrée packageRules avec matchPackageNames: ["<pkg>"] et minimumReleaseAge: null.
Dependabot
Les mises à jour de sécurité contournent déjà cooldown. Pour une mise à jour de version, ajoutez <pkg> à cooldown.exclude.