Build Artifact Dependency Graphs for Software Supply Chain Transparency
Goat Rodeo is an open-source tool that analyzes software artifacts and builds Artifact Dependency Graphs (ADGs) using OmniBOR content-addressable identifiers. It answers questions like:
- "What components are inside this JAR/Docker image/package?"
- "Which artifacts share this vulnerable library?"
- "Where did this binary come from?"
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Artifacts │ ──▶ │ Goat Rodeo │ ──▶ │ ADG │
│ JAR/DEB/ │ │ Analysis │ │ Database │
│ Docker/... │ │ │ │ (.grd/gri) │
└─────────────┘ └─────────────┘ └─────────────┘
| Feature | Description | |
|---|---|---|
| 📦 | Multi-format Support | JAR, WAR, EAR, TAR, ZIP, DEB, APK, Docker images, ISO, NuGet packages (.nupkg), .NET assemblies |
| 🔍 | Deep Inspection | Recursively unpacks nested archives (JAR inside TAR inside ISO) |
| ⚡ | Parallel Processing | Multi-threaded analysis for large artifact sets |
| 🔗 | Bidirectional Graph | Query both "what contains X" and "what does X contain" |
| 🛡️ | Hidden Reaper Detection | Find vulnerabilities hidden from traditional SCA tools |
| 📊 | pURL Support | Generates Package URLs for ecosystem compatibility |
| 🔌 | Embeddable | Use as CLI tool, Docker container, or Java/Scala library |
docker run --rm \
-v /path/to/artifacts:/input:ro \
-v /path/to/output:/output \
spicelabs/goatrodeo:latest \
-b /input -o /outputNote: Docker typically requires root privileges or membership in the
dockergroup. See Docker post-installation steps for configuration details.
# Download latest release
curl -LO https://github.com/spice-labs-inc/goatrodeo/releases/latest/download/goatrodeo-fat.jar
# Run
java -jar goatrodeo-fat.jar -b /path/to/artifacts -o /path/to/outputgit clone https://github.com/spice-labs-inc/goatrodeo.git
cd goatrodeo
sbt assembly
java -jar target/scala-3.7.4/goatrodeo-*-fat.jar -b /path/to/artifacts -o /path/to/outputRequirements: Java 21+, Git LFS
Maven:
<dependency>
<groupId>io.spicelabs</groupId>
<artifactId>goatrodeo_3</artifactId>
<version>0.8.4</version>
</dependency>Gradle:
implementation 'io.spicelabs:goatrodeo_3:0.8.4'Usage:
import io.spicelabs.goatrodeo.GoatRodeo;
GoatRodeo.builder()
.withPayload("/path/to/artifacts")
.withOutput("/path/to/output")
.withThreads(8)
.run();goatrodeo [OPTIONS]| Option | Description |
|---|---|
-b, --build <dir> |
Directory containing artifacts to analyze |
-o, --out <dir> |
Output directory for ADG database |
-t, --threads <n> |
Parallel threads (default: 4) |
| Option | Description |
|---|---|
--file-list <file> |
Only process files listed here |
--ignore <file> |
Skip paths listed here |
--exclude-pattern <regex> |
Exclude matching files |
--mime-filter <filter> |
Filter by MIME type (+include, -exclude) |
| Option | Description |
|---|---|
--maxrecords <n> |
Batch size (default: 50,000) |
--tempdir <dir> |
Temp storage (RAM disk recommended) |
--tag <name> |
Tag this run for later identification |
--block <file> |
Skip known/common GitOIDs |
Performance Tips
For large artifact sets (10,000+ files):
-
Use a RAM disk for temp files:
sudo mount -t tmpfs -o size=25G tmpfs /mnt/ramdisk goatrodeo -b /artifacts -o /output --tempdir /mnt/ramdisk
-
Match threads to CPU cores (or fewer if memory-constrained)
-
Tune batch size with
--maxrecordsbased on available RAM
See Performance Tuning Guide for details.
| Document | Description |
|---|---|
| 📖 Documentation Index | Complete documentation hub |
| ⚙️ How It Works | Processing pipeline & tuning |
| 🔧 API Reference | Library integration guide |
| 🏗️ Architecture | Internals for contributors |
| 🛡️ Hidden Reapers | Finding hidden vulnerabilities |
🧩 Goat Rodeo has a plug-in model called Rodeo Components. The project is accessible here.
Identify all components in your artifacts, even those not declared in manifests or build files.
Find Hidden Reapers — vulnerabilities that traditional SCA tools miss because dependencies were copied rather than declared.
Trace every component back to its source to ensure license obligations are met.
Build a cryptographic inventory of your software supply chain with content-addressable identifiers.
- 💬 Chat: Matrix #spice-labs
- 🐛 Issues: GitHub Issues
- 📣 Discussions: GitHub Discussions
We welcome contributions! See our Contributing Guide for details.
# Clone with LFS support
git lfs install
git clone https://github.com/spice-labs-inc/goatrodeo.git
# Run tests
cd goatrodeo
sbt test
# Submit a PR against the `next` branch- OmniBOR — The specification for artifact identifiers
- Spice Labs CLI — Full Spice Labs toolchain
- BigTent — ADG serving infrastructure
Apache License 2.0 — see LICENSE.txt