pinaka-scan
Free dependency vulnerability scanner. Like Snyk, but open.
Powered by OSV.dev — no API key, no signup, no limits.
Install
pip install pinaka-scan
Usage
# Auto-detect manifest in current directory
pinaka-scan
# Scan a specific file
pinaka-scan requirements.txt
pinaka-scan package.json
pinaka-scan go.mod
# Verbose output (show descriptions)
pinaka-scan -v
# JSON output (for CI pipelines)
pinaka-scan --json
# Only fail on critical/high severity
pinaka-scan --fail-on high
# Override ecosystem detection
pinaka-scan lockfile.txt -e PyPI
Recursive Scanning
Scan all manifest files in a project tree (monorepos, polyglot repos):
pinaka-scan --recursive
pinaka-scan --recursive -d /path/to/project
Automatically skips node_modules/, .git/, venv/, .venv/ and other junk directories.
SARIF Output
Generate SARIF v2.1.0 output for GitHub Security tab integration:
pinaka-scan --sarif > results.sarif
Ignoring Vulnerabilities
Create a .pinaka-ignore file to suppress accepted vulnerabilities (one ID per line):
# Accepted risk: low severity, no fix available
CVE-2021-34141
GHSA-5cpq-8wj7-hf2v
# Uses .pinaka-ignore by default
pinaka-scan
# Custom ignore file path
pinaka-scan --ignore-file my-ignore-list.txt
Ignored vulnerabilities are excluded from output and do not affect exit codes.
CI/CD Integration
Basic
- name: Scan dependencies
run: |
pip install pinaka-scan
pinaka-scan --fail-on high
GitHub Security Tab (SARIF)
Upload scan results to the GitHub Security tab:
- name: Scan dependencies
run: |
pip install pinaka-scan
pinaka-scan --sarif > results.sarif
continue-on-error: true
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
Exit codes:
0— no vulnerabilities (or none above--fail-onthreshold)1— vulnerabilities found2— scan error
Supported Ecosystems
| Ecosystem | Files |
|---|---|
| Python (PyPI) | requirements.txt, Pipfile.lock |
| Node.js (npm) | package.json, package-lock.json, yarn.lock |
| Go | go.mod, go.sum |
| Rust (crates.io) | Cargo.toml, Cargo.lock |
| Ruby (RubyGems) | Gemfile.lock |
| PHP (Packagist) | composer.json, composer.lock |
How It Works
- Reads your dependency manifest
- Parses package names + versions
- Batch-queries OSV.dev (Google's open vulnerability database)
- Displays results with severity, CVE IDs, and fix versions
No data is stored. No telemetry. Runs entirely on your machine.
All Flags
| Flag | Description |
|---|---|
file |
Path to manifest file (auto-detected if omitted) |
-e, --ecosystem |
Override ecosystem detection |
-v, --verbose |
Show vulnerability summaries in table |
-d, --dir |
Directory to scan (default: .) |
--json |
Output results as JSON |
--sarif |
Output results as SARIF v2.1.0 |
--recursive |
Scan all manifest files in directory tree |
--ignore-file |
Path to ignore file (default: .pinaka-ignore) |
--fail-on |
Exit 1 only if vulns at this severity or above (default: any) |
--version |
Show version |
Built by
License
MIT
Metadata
Release files for pinaka-scan 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pinaka_scan-0.3.0.tar.gz | 20.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pinaka_scan-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 37.2 kB
Release files / pinaka_scan-0.3.0.tar.gz
| Download URL | pinaka_scan-0.3.0.tar.gz |
|---|---|
| Size | 20.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6487792abe772caecd4dad59694ccf1d0eb76e1ace5bc8259673cc296d55f0de
|
|
BLAKE2b-256 checksum How to use checksums |
d15100a3b7a6cd79e87c1f28ed1c30517263dbec8e1de7709b7123cea25a7e6d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Release files / pinaka_scan-0.3.0-py3-none-any.whl
| Download URL | pinaka_scan-0.3.0-py3-none-any.whl |
|---|---|
| Size | 16.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8968d8bdd8aae9fb0775ad8ebc544c262aae83b131c45d81ee4ee62031109301
|
|
BLAKE2b-256 checksum How to use checksums |
b06aa8a79f0d2a1dea477573dfad283d81162ab062a21037ab179113204bb688
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|