SafePackages
SafePackages is a powerful Python CLI tool designed to scan your project's dependencies for known vulnerabilities. It leverages the OSV (Open Source Vulnerabilities) database to provide accurate and up-to-date security information for a wide range of ecosystems.
Features
- Multi-Mode Scanning:
- Single Package: Scan a specific package version.
- Manifest File: Parse and scan dependency files (e.g.,
requirements.txt,package.json). - Batch Mode: Scan a list of packages from a JSON input.
- Broad Ecosystem Support: Supports npm, PyPI, Maven, NuGet, Go, Rust, PHP (Composer), Ruby (Gems), and more.
- Flexible Output: Generate reports in Table, JSON, or CSV formats.
- CI/CD Ready:
- Set failure thresholds (e.g., fail only on
CRITICALorHIGHseverity). - Exit codes for pipeline integration.
- Set failure thresholds (e.g., fail only on
- Dev Dependency Control: Option to include or exclude development dependencies.
Installation
You can install SafePackages using pip:
pip install safe-packages
Or using uv:
uv pip install safe-packages
Usage
After installation, the safepackages command will be available. You can see the help message by running:
safepackages --help
Commands
SafePackages provides three main commands:
1. scan - Scan a Single Package
Scan a specific package version for vulnerabilities.
Usage:
safepackages scan [OPTIONS] NAME
Arguments:
NAME: The name of the package to scan (Required).
Options:
-e, --ecosystem TEXT: Package ecosystem (e.g., npm, PyPI, Maven, NuGet) (Required).-v, --version TEXT: Package version to check.-f, --format [table|json|csv]: Output format (Default: table).-o, --output TEXT: Write output to a file.--fail-on [low|medium|high|critical]: Exit with error code 1 if vulnerabilities of this severity or higher are found (Default: high).
Example:
safepackages scan requests --version 2.20.0 --ecosystem PyPI
2. file - Scan a Manifest File
Scan a dependency manifest file. The file type is automatically detected.
Usage:
safepackages file [OPTIONS] FILE_PATH
Arguments:
FILE_PATH: Path to the manifest file (Required).
Options:
--include-dev: Include development dependencies in the scan.-f, --format [table|json|csv]: Output format (Default: table).-o, --output TEXT: Write output to a file.--fail-on [low|medium|high|critical]: Exit with error code 1 if vulnerabilities of this severity or higher are found (Default: high).
Supported Manifests:
requirements.txt,poetry.lock,Pipfile.lock(Python)package.json,package-lock.json(npm)yarn.lock(yarn)pom.xml(Maven)go.mod(Go)Cargo.lock(Rust)Gemfile.lock(Ruby)composer.lock(PHP)packages.config,*.csproj(NuGet)
Example:
safepackages file requirements.txt --include-dev --format json
3. batch - Batch Scan
Scan a list of packages from a JSON input string or file.
Usage:
safepackages batch [OPTIONS] JSON_INPUT
Arguments:
JSON_INPUT: A JSON string array of packages or a path to a JSON file (Required).- Format:
[{"name": "pkg_name", "version": "1.0.0", "ecosystem": "PyPI"}, ...]
- Format:
Options:
-f, --format [table|json|csv]: Output format (Default: table).-o, --output TEXT: Write output to a file.--fail-on [low|medium|high|critical]: Exit with error code 1 if vulnerabilities of this severity or higher are found (Default: high).
Example:
# From JSON string
safepackages batch '[{"name":"django","version":"3.0.0","ecosystem":"PyPI"}]'
# From JSON file
safepackages batch packages.json
Development
We use uv and poethepoet for development.
- Install
uv: https://github.com/astral-sh/uv - Run tasks:
uv run poe check- Run full verification (lint, test, build).uv run poe list- List all available tasks.
License
Metadata
Release files for safe-packages 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| safe_packages-0.1.1.tar.gz | 21.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| safe_packages-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 53.5 kB
Release files / safe_packages-0.1.1.tar.gz
| Download URL | safe_packages-0.1.1.tar.gz |
|---|---|
| Size | 21.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c99b8628e7eb1c6e9414186bb146df26f95e84f6c65c4c003461b1e8457768f9
|
|
BLAKE2b-256 checksum How to use checksums |
1ab2430b36806dd41d8463e4d748099293c6ce1750d5741affce8048a324d307
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 9, 2025.
Transparency logRelease files / safe_packages-0.1.1-py3-none-any.whl
| Download URL | safe_packages-0.1.1-py3-none-any.whl |
|---|---|
| Size | 31.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1a0155beb793fc24821ebb5b62d4169f61c394b031ffac6eb58a2d732978db16
|
|
BLAKE2b-256 checksum How to use checksums |
6b29ae5b42215565bcc49f915e9ab5c43ec03909572e4e74d1e7d931d3909ce4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 9, 2025.
Transparency logSecurity for safe-packages 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for safe_packages-0.1.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 9, 2025.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.