Por **[[arnica](https://arnica.io?utm_source=depsguard&utm_medium=referral&utm_campaign=community)]**
## Índice
- [Visão geral](#overview)
- [Instalação](#install)
- [Uso](#usage)
- [O que é verificado](#what-gets-checked)
- [Locais dos arquivos de configuração](#config-file-locations)
- [Correção de segurança urgente](#urgent-security-fix)
- [Backups e restauração](#backups-and-restore)
- [Como funciona](#how-it-works)
- [Solução de problemas](#troubleshooting)
- [Ajuda e feedback](#help--feedback)
- [Guias](#guides)
- [Veja também](#see-also)
- [Licença](#license)
## Visão geral
O DepsGuard procura por **npm**, **pnpm**, **yarn**, **bun**, **uv**, **pip**, **poetry** e **aube** na sua máquina, lê seus arquivos de configuração, compara-os com as configurações recomendadas de cadeia de suprimentos e pode **aplicar correções interativamente**. Ele também verifica a existência de configurações do **Renovate** e do **Dependabot** nos seus repositórios. Ele nunca executa instalações de pacotes; apenas edita arquivos de configuração que você aprovar e cria **backups** antes de qualquer alteração.
### Principais recursos
- TUI interativa: verificar, revisar, alternar correções, aplicar
- Subcomando `scan` para relatórios somente leitura
- Subcomando `restore` para escolher um backup e reverter um arquivo
- Multiplataforma: Linux, macOS, Windows
- Sem crates Rust de terceiros incorporados (stdlib + pequena quantidade de FFI de plataforma para o terminal)
### Stack de tecnologia
| Área | Detalhes |
|------|----------|
| Linguagem | Rust (MSRV **1.74**, veja `Cargo.toml`) |
| CLI / TUI | `src/main.rs`, `src/ui.rs`, `src/term.rs` |
| Lógica de configuração | `src/manager.rs`, `src/fix.rs` |
| Site | Site estático em `docs/` (separado do binário) |
## Instalação
### Binários pré-compilados
Cada [GitHub Release](https://github.com/arnica/depsguard/releases) inclui arquivos para:
- Linux: `x86_64` (glibc), `x86_64` (musl), `aarch64` (glibc)
- macOS: Intel e Apple Silicon
- Windows: `x86_64` ZIP contendo `depsguard.exe`
Baixe o arquivo para sua plataforma, descompacte-o e coloque o binário no seu `PATH`.
Verifique a integridade usando o arquivo `.sha256` correspondente ao lado de cada artefato na página de lançamento.
### Instalação por plataforma
#### 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:~
O DepsGuard está no [homebrew-core](https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/d/depsguard.rb), portanto, nenhum tap personalizado é necessário.
> **Migrando do antigo tap `arnica/depsguard`?** Troque para a fórmula core uma vez:
>
> ```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
Gerenciadores de pacotes (quando publicados pelo seu fornecedor)
Se a sua organização distribui o DepsGuard via Homebrew, Scoop ou WinGet, use as instruções correspondentes. Configurar ou automatizar esses canais (PRs do Homebrew core, buckets, PRs do WinGet, segredos de CI) é documentação de mantenedores; consulte AGENTS.md na seção Release & distribution.
Lojas de aplicativos / gerenciadores de pacotes
Canal
Linux
macOS
Windows
Comando de instalação
APT (repositório personalizado)
sim
não
não
sudo apt install depsguard (após a configuração do repositório acima)
O binário é `target/release/depsguard` (`.exe` no Windows). É necessário Rust **1.74+**.
## Uso```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
Executedepsguard para iniciar a TUI interativa. Ela verifica seu sistema e mostra uma tabela de resultados. Pressione qualquer tecla para continuar para o seletor de correções. A descoberta de configurações no nível do repositório começa no diretório atual e busca para baixo. Use depsguard scan para um relatório somente leitura, ou depsguard --no-search para pular a busca recursiva de arquivos e verificar apenas configurações de nível de usuário.
Nota: algumas configurações exigem uma versão mínima. Se sua versão for muito antiga, você verá:
ℹ min-release-age – requires npm ≥ 11.10 (have 10.2.0).
Atualize com npm install -g npm@latest e execute novamente.
Navegue e selecione – use ↑↓ para percorrer a lista (^u^d para paginar). Pressione Espaço para ativar ou desativar uma correção. Use as teclas de filtro rápido para selecionar em massa por arquivo: a todos, n .npmrc, u uv.toml, etc. – pressione uma vez para selecionar, novamente para desmarcar, uma terceira vez para limpar o filtro. Pressione f para mostrar apenas as correções atualmente selecionadas.
Pré-visualize – pressione d para ver um diff do que será alterado antes de confirmar qualquer coisa.
Aplique – pressione Enter para aplicar as correções selecionadas. Um backup com carimbo de data/hora é criado antes de qualquer arquivo ser gravado.
Reexamine – o DepsGuard executa novamente a verificação automaticamente após aplicar, para que você possa confirmar que está tudo verde.
Restaure – execute depsguard restore a qualquer momento para reverter a partir da lista de backups. Pressione q ou Esc para sair.
Reduz o risco de scripts de instalação (npm respeita isso no .npmrc; pnpm >= 11 lê isso de pnpm-workspace.yaml / config.yaml global, não do .npmrc)
pnpm
~/.npmrc
minimum-release-age
10080 (minutos)
Atrasa novas versões por 7 dias (apenas pnpm 10.16–10.x; pnpm >= 11 ignora .npmrc; use pnpm-workspace.yaml)
pnpm
rc global (pnpm <= 10)
minimum-release-age
10080 (minutos)
Atrasa novas versões por 7 dias (requer pnpm >= 10.16)
pnpm
rc global (pnpm <= 10)
block-exotic-subdeps
true
Bloqueia dependências transitivas não confiáveis (requer pnpm >= 10.26)
pnpm
rc global (pnpm <= 10)
trust-policy
no-downgrade
Bloqueia downgrades de proveniência (requer pnpm >= 10.21)
pnpm
rc global (pnpm <= 10)
strict-dep-builds
true
Falha em scripts de build não revisados (requer pnpm >= 10.3)
pnpm
rc global (pnpm <= 10)
ignore-scripts
true
Bloqueia scripts de instalação maliciosos
pnpm
config.yaml global (pnpm >= 11)
minimumReleaseAge
10080 (minutos)
Localizações dos arquivos de configuração
Gerenciador
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 quando definido)
%APPDATA%\pip\pip.ini
poetry
$XDG_CONFIG_HOME/pypoetry/config.toml ou ~/.config/pypoetry/config.toml
Os arquivos de configuração de nível de usuário são lidos de suas localizações padrão (incluindo caminhos baseados em XDG quando a ferramenta os suporta). As configurações de nível de repositório são descobertas procurando a partir do diretório atual, ignorando diretórios grandes conhecidos (node_modules, .git, target, Library, .cache e outros) para que as verificações permaneçam rápidas. .npmrc, .yarnrc.yml, pnpm-workspace.yaml, configurações do Renovate e configurações do Dependabot de nível de repositório são todos pesquisados. As configurações do pnpm podem estar em ~/.npmrc (apenas pnpm <= 10; pnpm >= 11 lê apenas configurações de autenticação/registro do .npmrc), no arquivo de configuração global do pnpm (rc em pnpm <= 10, config.yaml em pnpm >= 11), ou em pnpm-workspace.yaml; o DepsGuard verifica os três locais independentemente. Para pip, uv e poetry, o DepsGuard resolve a única configuração efetiva de nível de usuário e relata apenas esse arquivo, em vez de sinalizar separadamente arquivos sombreados. pip e poetry mesclam seus arquivos de configuração por precedência (o arquivo de maior precedência que define o cooldown vence, ou a localização preferida se nenhum o fizer); uv lê um único arquivo de usuário ($XDG_CONFIG_HOME/uv/uv.toml quando XDG_CONFIG_HOME está definido, caso contrário ~/.config/uv/uv.toml) em vez de mesclar ambos. Para bun, se existirem vários arquivos de configuração de nível de usuário (por exemplo, um caminho XDG e um caminho no diretório inicial), o DepsGuard verifica cada arquivo existente separadamente. aube lê o mesmo ~/.npmrc que npm/pnpm (minimumReleaseAge, em minutos) e também é verificado nos arquivos .npmrc de nível de repositório descobertos; pip e poetry são verificados em sua configuração de nível de usuário (pip.conf / pypoetry/config.toml).
Correção de segurança urgente
Se a versão corrigida for mais nova que sua janela de cooldown, adicione uma exceção restrita, instale a correção e depois remova a exceção.
Prefira uma exceção específica ao pacote em vez de reduzir o cooldown global. Isso mantém o atraso para todas as outras dependências.
Gerenciador
Como ignorar o cooldown
npm
npm install <pkg>@<ver> --min-release-age=0
pnpm
Adicione uma entrada a minimumReleaseAgeExclude em pnpm-workspace.yaml, execute pnpm add <pkg>@<ver>, e depois remova a entrada. Excluir pelo nome do pacote funciona no pnpm 10.16+; fixar uma versão específica (<pkg>@<ver>) adicionalmente requer pnpm 10.19+. O pnpm não possui sobrescrita de CLI documentada para minimumReleaseAge.
yarn
Adicione <pkg> (ou um glob) a npmPreapprovedPackages em .yarnrc.yml, ou execute YARN_NPM_MINIMAL_AGE_GATE=0s yarn up <pkg>@<ver> para um único comando. npmPreapprovedPackages isenta correspondências de todos os limites de pacotes do Yarn, não apenas do limite de idade.
bun
Adicione <pkg> a install.minimumReleaseAgeExcludes em um bunfig.toml de nível de repositório ou em ~/.bunfig.toml de nível de usuário, ou execute bun add <pkg>@<ver> --minimum-release-age 0.
aube
Adicione <pkg> a minimumReleaseAgeExclude em .npmrc, ou defina AUBE_MINIMUM_RELEASE_AGE=0 (ou npm_config_minimum_release_age=0) para uma única instalação.
uv
Adicione "<pkg>" = false a exclude-newer-package em uv.toml ou pyproject.toml, execute uv add <pkg>==<ver>, e depois remova a entrada. exclude-newer-package é uma sobrescrita separada por pacote do limite global exclude-newer. A CLI do uv aceita --exclude-newer-package PACKAGE=DATE, mas não PACKAGE=false.
pip
Execute pip install <pkg>==<ver> --uploaded-prior-to=P0D para uma instalação. P0D desativa o cooldown apenas para esse comando; o pip não tem exclusão por pacote na configuração.
poetry
Adicione <pkg> a (separado por vírgulas) em /, execute , e depois remova a entrada. isenta todos os pacotes de um índice nomeado em vez disso.
Antes de ignorar o cooldown:
Verifique se o CVE realmente afeta seu uso.
Verifique se uma versão anterior conhecida como boa já está disponível. Um rollback pode ser mais seguro.
Remova exceções temporárias após a atualização.
Backups e restauração
Antes de modificar um arquivo, o DepsGuard grava um backup em ~/.depsguard/backups/.
Execute depsguard restore para listar backups e restaurar um.
- **Zero third-party crates**: intencional para uma pequena ferramenta relacionada à segurança; consulte `AGENTS.md` se você mudar essa política.
- **Cores** usam sequências ANSI; terminais modernos no Windows (ex.: Windows Terminal) são suportados.
## Solução de problemas
| Sintoma | O que tentar |
|---------|-------------|
| `depsguard: command not found` | Garanta que o diretório de instalação esteja no `PATH`, ou use o caminho completo para o binário. |
| Erros de permissão ao gravar configuração | O DepsGuard só edita arquivos no seu perfil de usuário; execute como um usuário normal, sem elevação, a menos que esses arquivos sejam propriedade do administrador. |
| Teclas não funcionando no Windows | Use o **Windows Terminal** ou outro terminal com suporte a VT; o `cmd.exe` legado pode não lidar com todas as teclas. |
| pnpm workspaces ausentes | Garanta que o `pnpm-workspace.yaml` esteja dentro da árvore do seu diretório pessoal; layouts muito incomuns podem não ser descobertos. |
| `cargo install` falha | Instale o Rust via [rustup](https://rustup.rs/) e use Rust **≥ 1.74**. |
## Ajuda e feedback
- [Relatar um bug ou solicitar um recurso](https://github.com/arnica/depsguard/issues)
- [Relatar uma vulnerabilidade de segurança](https://github.com/arnica/depsguard/security/advisories/new) (veja [`SECURITY.md`](https://github.com/arnica/depsguard/blob/main/SECURITY.md))
- O fluxo de desenvolvimento para contribuidores está em [`AGENTS.md`](https://github.com/arnica/depsguard/blob/main/AGENTS.md).
## Guias
Guias detalhados em [depsguard.com](https://depsguard.com) explicam cada configuração de endurecimento e os ataques à cadeia de suprimentos contra os quais eles defendem:
- [Como se proteger contra ataques à cadeia de suprimentos do npm](https://depsguard.com/guide/) (o guia completo de endurecimento)
- [Cooldown de dependências (idade mínima de lançamento)](https://depsguard.com/cooldown/)
- [Bloquear scripts de instalação com ignore-scripts](https://depsguard.com/ignore-scripts/)
- [Bloquear dependências transitivas não confiáveis (block-exotic-subdeps)](https://depsguard.com/block-exotic-subdeps/)
- [Falhar em scripts de build não revisados (strict-dep-builds)](https://depsguard.com/strict-dep-builds/)
- [Bloquear rebaixamentos de proveniência (trust-policy)](https://depsguard.com/trust-policy/)
- Relatos de incidentes: [axios](https://depsguard.com/axios-npm-attack/) · [Shai-Hulud](https://depsguard.com/shai-hulud/) · [TanStack](https://depsguard.com/tanstack-npm-attack/)
## Veja também
- [**Dependency Cooldowns** (`cooldowns.dev`)](https://cooldowns.dev/): um guia de referência e utilitário shell complementar (`cooldowns.sh`) focado especificamente em **cooldowns de idade mínima de lançamento**. Complementa o DepsGuard: cobre um conjunto mais amplo de ecossistemas no eixo de cooldown (pip, uv, npm, pnpm, Yarn, Bun, Deno, Cargo), enquanto o DepsGuard cobre npm/pnpm/yarn/bun/aube/uv/pip/poetry além de Renovate/Dependabot e adiciona outras configurações de endurecimento (`ignore-scripts`, `block-exotic-subdeps`, `trust-policy`, `strict-dep-builds`) com uma TUI interativa, pré-visualização de diff e backup/restauração.
## Licença
MIT
---
**Links:** [Repositório](https://github.com/arnica/depsguard) · [Site de documentação](https://depsguard.com)
Atrasa novas versões por 7 dias (requer yarn >= 4.10)
pnpm
pnpm-workspace.yaml
minimumReleaseAge
10080 (minutos)
Atrasa novas versões por 7 dias (requer pnpm >= 10.16)
pnpm
pnpm-workspace.yaml
strictDepBuilds
true
Falha em scripts de build não revisados (requer pnpm >= 10.3)
pnpm
pnpm-workspace.yaml
trustPolicy
no-downgrade
Bloqueia downgrades de proveniência (requer pnpm >= 10.21)
pnpm
pnpm-workspace.yaml
blockExoticSubdeps
true
Bloqueia dependências transitivas não confiáveis (requer pnpm >= 10.26)
pnpm
pnpm-workspace.yaml
ignoreScripts
true
Bloqueia scripts de instalação maliciosos (requer pnpm >= 10.16)
bun
~/.bunfig.toml
install.minimumReleaseAge
604800 (segundos)
Atraso de ~7 dias (requer bun >= 1.3)
aube
~/.npmrc
minimumReleaseAge
10080 (minutos)
Atrasa novas versões por 7 dias
uv
uv.toml
exclude-newer
7 days
Atrasa novas publicações (requer uv >= 0.9.17)
pip
pip.conf ([install])
uploaded-prior-to
P7D (7 dias)
Atrasa novas publicações (requer pip >= 26.1)
poetry
config.toml ([solver])
min-release-age
7 (dias)
Atrasa novas publicações (requer poetry >= 2.4)
renovate
renovate.json etc.
minimumReleaseAge
7 days
Atrasa PRs de atualização de dependências por 7 dias
dependabot
.github/dependabot.yml
cooldown.default-days
7
Atrasa PRs de atualização de dependências por 7 dias
$XDG_CONFIG_HOME/pypoetry/config.toml (quando definido) ou ~/Library/Application Support/pypoetry/config.toml
%APPDATA%\pypoetry\config.toml
renovate
renovate.json, .renovaterc, .github/renovate.json, etc.
(mesmo)
(mesmo)
dependabot
.github/dependabot.yml
(mesmo)
(mesmo)
solver.min-release-age-exclude
poetry.toml
config.toml
poetry add <pkg>@<ver>
solver.min-release-age-exclude-source
Renovate
Atualizações de segurança já ignoram minimumReleaseAge. Para uma atualização de versão, adicione uma entrada packageRules com matchPackageNames: ["<pkg>"] e minimumReleaseAge: null.
Dependabot
Atualizações de segurança já ignoram cooldown. Para uma atualização de versão, adicione <pkg> a cooldown.exclude.