> ## Documentation Index
> Fetch the complete documentation index at: https://zeropath.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Ecossistemas Suportados

> Quais ecossistemas de pacotes o ZeroPath analisa, e o que cada um precisa para cobertura transitiva completa

Os analisadores de SCA do ZeroPath reconhecem os seguintes ecossistemas de
fábrica:

<Columns cols={3}>
  <Card title="npm / Yarn / pnpm" icon="js" iconType="brands" />

  <Card title="PyPI" icon="python" iconType="brands" />

  <Card title="Go modules" icon="golang" iconType="brands" />

  <Card title="Maven / Gradle / SBT" icon="java" iconType="brands" />

  <Card title="NuGet" icon="https://mintcdn.com/zeropath/3LQWG-DWQmf_zR2q/icons/csharp.svg?fit=max&auto=format&n=3LQWG-DWQmf_zR2q&q=85&s=a369b07fdfa85a098eef35c035d7c098" width="128" height="128" data-path="icons/csharp.svg" />

  <Card title="RubyGems" icon="https://mintcdn.com/zeropath/3LQWG-DWQmf_zR2q/icons/ruby.svg?fit=max&auto=format&n=3LQWG-DWQmf_zR2q&q=85&s=e98ed481966bcbb1508f8d69e680b60e" width="128" height="128" data-path="icons/ruby.svg" />

  <Card title="crates.io (Cargo)" icon="rust" iconType="brands" />

  <Card title="Packagist / Composer" icon="php" iconType="brands" />

  <Card title="Hex (Elixir)" icon="https://mintcdn.com/zeropath/3LQWG-DWQmf_zR2q/icons/elixir.svg?fit=max&auto=format&n=3LQWG-DWQmf_zR2q&q=85&s=1561f8905cfcc6ab231dbcb15aaf5db3" width="128" height="128" data-path="icons/elixir.svg" />

  <Card title="Pub (Dart/Flutter)" icon="https://mintcdn.com/zeropath/3LQWG-DWQmf_zR2q/icons/dart.svg?fit=max&auto=format&n=3LQWG-DWQmf_zR2q&q=85&s=c3fa2a0a3350a59c4f7fcd10cbeff84b" width="128" height="128" data-path="icons/dart.svg" />

  <Card title="Swift" icon="swift" iconType="brands" />

  <Card title="Haskell (Hackage)" icon="code" />

  <Card title="R (CRAN)" icon="code" />
</Columns>

Cada registro de dependência rastreia se o ZeroPath a viu declarada
**diretamente** ou trazida **transitivamente**, para que você possa aplicar
políticas diferentes a escolhas próprias e a bibliotecas de terceiros.
Dependências de desenvolvimento e opcionais declaradas nos seus manifestos também
são inventariadas; a [alcançabilidade](/pt/sca/reachability) ajuda a separar
descobertas relevantes em runtime do ruído exclusivo de desenvolvimento.

<h2 id="how-resolution-works">
  Como a resolução funciona
</h2>

O ZeroPath resolve seu grafo de dependências diretamente a partir dos seus
manifestos sempre que possível, sem exigir etapa de build ou contêiner, e recorre
ao seu **lockfile** commitado em todos os outros casos. O contrato prático é por
ecossistema, resumido na tabela abaixo. Duas regras valem em todos os lugares:

* **Dependências diretas são escaneadas mesmo quando o grafo transitivo não pode
  ser construído.** O ZeroPath registra e compara com vulnerabilidades os pacotes
  que você declarou diretamente, então um lockfile ausente custa a profundidade
  transitiva, não as suas descobertas diretas.
* **Versões desconhecidas não são adivinhadas.** Se uma versão não pode ser
  determinada, por exemplo um intervalo não resolvido ou uma cadeia de pais
  quebrada, o pacote ainda é registrado no seu inventário e SBOM, mas não é
  comparado com vulnerabilidades. Isso evita falsos positivos causados por
  versões adivinhadas.

<h3 id="coverage-without-a-committed-lockfile">
  Cobertura sem um lockfile commitado
</h3>

| Ecossistema                                                                  | Sem um lockfile commitado                                                                                                                                     |
| ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| npm / Yarn / pnpm                                                            | **Cobertura transitiva completa** — resolvida diretamente do `package.json`                                                                                   |
| Maven (`pom.xml`)                                                            | **Cobertura transitiva completa** — resolvida deterministicamente a partir dos seus POMs (pai, BOM e propriedades); nenhum lockfile necessário                |
| Python (`requirements.txt`, totalmente fixado com `==`)                      | **Resolvido como está** — cada pacote fixado é escaneado (um arquivo de `pip freeze` / `pip-compile` já lista as transitivas)                                 |
| Python (`pyproject.toml`, `Pipfile`, `requirements.txt` parcialmente fixado) | **Apenas dependências diretas** — gerencie via `pyproject.toml`/`Pipfile` e faça commit de `poetry.lock`, `uv.lock` ou `Pipfile.lock` (ou fixe tudo com `==`) |
| Go modules                                                                   | **Apenas dependências diretas** — faça commit de `go.sum` (`go mod tidy`)                                                                                     |
| Gradle (`build.gradle`, `.kts`)                                              | **Apenas dependências diretas** — faça commit de `gradle.lockfile`                                                                                            |
| SBT (`build.sbt`)                                                            | **Apenas dependências diretas** — faça commit de `build.sbt.lock` ou `lock.sbt`                                                                               |
| Cargo (`Cargo.toml`)                                                         | **Apenas dependências diretas** — faça commit de `Cargo.lock`                                                                                                 |
| NuGet (`*.csproj`, `*.fsproj`, `*.vbproj`)                                   | **Apenas dependências diretas** — faça commit de `packages.lock.json`                                                                                         |
| Ruby                                                                         | **Apenas dependências diretas** — faça commit de `Gemfile.lock`                                                                                               |
| PHP                                                                          | **Apenas dependências diretas** — faça commit de `composer.lock`                                                                                              |
| Elixir                                                                       | **Apenas dependências diretas** — faça commit de `mix.lock`                                                                                                   |
| Dart / Flutter                                                               | **Apenas dependências diretas** — faça commit de `pubspec.lock`                                                                                               |
| Swift                                                                        | **Apenas dependências diretas** — faça commit de `Package.resolved`                                                                                           |

<Warning>
  Para cada ecossistema marcado como **Apenas dependências diretas**, um lockfile
  ausente significa que as dependências transitivas não são resolvidas e os
  especificadores de intervalo permanecem ambíguos, prejudicando o pareamento de
  vulnerabilidades transitivas e a completude do SBOM. O ZeroPath ainda registra
  suas dependências diretas e sinaliza o manifesto com um aviso **Transitive
  dependencies unresolved** para que a lacuna fique visível. Veja
  [Cobertura e avisos](/pt/sca/coverage) para saber como resolvê-la, incluindo os
  [comandos para gerar cada lockfile](/pt/sca/coverage#generate-lockfiles-before-scanning).
</Warning>

<Tip>
  Para **npm/Yarn/pnpm**, **Maven** e um **`requirements.txt`** totalmente fixado
  com `==`, um lockfile commitado é opcional — ele apenas torna os scans mais
  rápidos e mais determinísticos.
</Tip>

<h2 id="compiled-vendored-artifacts">
  Artefatos compilados e vendorizados
</h2>

Artefatos JVM binários commitados no seu repositório, como JARs e WARs, são
escaneados em busca dos pacotes embutidos dentro deles. Esses pacotes aparecem no
seu inventário ao lado das dependências declaradas em código-fonte, com um selo de
tipo de origem **Compiled** (por exemplo, JAR, WAR), para que você veja
bibliotecas vendorizadas ou pré-compiladas que uma análise apenas de manifestos
deixaria passar. O inventário de Dependencies permite filtrar por
**Source Type** para isolar descobertas compiladas vs. declaradas em código-fonte.

<h2 id="ecosystem-notes">
  Notas por ecossistema
</h2>

<AccordionGroup>
  <Accordion title="Go modules">
    O ZeroPath trata o sufixo `+incompatible` usado por pacotes Go pré-módulos
    (versão principal 2+), pareando versões como `v3.2.0+incompatible` com
    advisories conhecidos. Pseudo-versões do Go (por exemplo,
    `v0.0.0-20231215084216-abcdef123456`) são snapshots de commit, não releases
    publicados, então o ZeroPath as registra no inventário mas não tenta parear
    versões de advisories com elas.
  </Accordion>

  <Accordion title="Maven">
    Builds multi-módulo (reactor) são totalmente resolvidos: o ZeroPath indexa
    cada POM no repositório e resolve referências `<parent>` entre módulos mesmo
    quando `<relativePath/>` está vazio ou ausente, de modo que um filho pode
    herdar versões de `<dependencyManagement>` do pai de um irmão. POMs pai que
    declaram dependências apenas em `<dependencyManagement>` são capturados, e
    artefatos com classifier são atribuídos ao pacote correto. Quando um POM pai
    não pode ser resolvido local ou remotamente, versões herdadas por meio dessa
    cadeia são tratadas como não resolvidas em vez de adivinhadas.
  </Accordion>

  <Accordion title="Gradle">
    Além das declarações simples em `build.gradle(.kts)`, o ZeroPath também
    reconhece dependências declaradas por meio de catálogos de versões
    (`libs.versions.toml`), convention plugins, restrições de platform/BOM e o
    Kotlin DSL. Faça commit de `gradle.lockfile`
    (`./gradlew dependencies --write-locks`) para a árvore transitiva completa.
  </Accordion>

  <Accordion title="SBT (Scala)">
    O ZeroPath registra dependências diretas a partir do `build.sbt` e analisa um
    lockfile commitado para a árvore transitiva completa: `build.sbt.lock`
    ([sbt-dependency-lock](https://github.com/stringbean/sbt-dependency-lock)) ou
    `lock.sbt` ([sbt-lock](https://github.com/tkawachi/sbt-lock)).
  </Accordion>

  <Accordion title="NuGet">
    Os ids de pacote são pareados sem diferenciar maiúsculas de minúsculas, então
    diferenças de capitalização entre um manifesto e o registro nunca causam uma
    perda. Opte pelo modo de lockfile do NuGet e faça commit de
    `packages.lock.json` (`dotnet restore --use-lock-file --force-evaluate`,
    NuGet 4.9+) para cobertura transitiva.
  </Accordion>

  <Accordion title="Cargo (Rust)">
    Crates binários commitam `Cargo.lock` por padrão, e o ZeroPath o usa
    diretamente. Crates de biblioteca comumente o omitem (conforme a orientação
    do Cargo); faça commit de `Cargo.lock` (`cargo generate-lockfile`) para
    cobertura transitiva. Um crate que resolve para múltiplas versões no mesmo
    grafo é reportado como pares `(name, version)` separados, de modo que cada um
    chega ao pareamento com advisories.
  </Accordion>

  <Accordion title="Formatos de manifesto Python">
    Todos os formatos comuns são suportados:

    * **requirements.txt** — formato padrão do pip
    * **Pipfile** — Pipenv (`[packages]` / `[dev-packages]`)
    * **pyproject.toml (Poetry)** — incluindo dependências de grupo do 1.2+
    * **pyproject.toml (PEP 621)** — a tabela `[project]` usada por uv, hatch,
      flit, setuptools e pdm (tanto `dependencies` quanto `optional-dependencies`)
  </Accordion>
</AccordionGroup>

<Info>
  Cada descoberta registra a posição de um pacote no grafo (direto ou transitivo) e
  a cadeia que o introduziu, e linka de volta para o arquivo de manifesto e a linha
  exatos onde a dependência foi declarada, em vez do lockfile. Um pacote alcançado
  por múltiplos caminhos de dependência é deduplicado em uma única entrada de
  inventário, de modo que as contagens refletem pacotes únicos. Veja
  [Raio de impacto](/pt/sca/blast-radius) para saber como a cadeia de dependência
  se torna impacto em pontos de chamada durante um upgrade.
</Info>
