Available Providers
Shipped currently supports four package providers:- GitHub - Track GitHub releases
- NPM - Track NPM package versions
- Docker Hub - Track Docker image tags
- Python/PyPI - Track Python package releases
How Providers Work
Each provider implements a standard interface that:- Fetches package metadata - Retrieves basic information about the package
- Fetches releases - Gets version/release information based on provider-specific criteria
- Normalizes data - Converts provider-specific data into a unified format
- Handles errors - Provides consistent error handling for network issues and missing packages
Provider Architecture
Providers are implemented using Effect-TS and follow a layered architecture:Provider Structure
Each provider consists of:- Client Layer (
client.ts) - HTTP client for API interactions - Provider Implementation (
index.ts) - Core logic for fetching and processing packages - Type Definitions (
types.ts) - TypeScript schemas for API responses - Provider Info (in
shared/providers/) - Configuration, icons, and extra options
Common Components
Provider Info Each provider has aProviderInfo object that defines:
PackageNotFoundError- Package doesn’t exist (HTTP 404)NetworkError- Network or API issuesInvalidPackageNameError- Malformed package name
Package Format
All providers return data in a unifiedPackage format:
Provider Configuration
Each provider supports configuration through theextra field in package configuration:
extraSchema and merged with extraDefaults.
Caching
All provider requests are cached to improve performance and reduce API calls:- L1 Cache - In-memory cache with configurable size limits
- L2 Cache - Filesystem cache for persistence across restarts
- Cache Key - Based on package name and provider-specific parameters
Rate Limiting
API requests are rate-limited based on client IP address to prevent abuse:- Rate limiting is applied per IP per endpoint
- Bogon addresses (private/local IPs) are exempt from rate limiting
- Returns
TOO_MANY_REQUESTSerror when limit exceeded
HTTP Client
All providers use a shared HTTP client (fetch.ts) built on ofetch:
- Automatic JSON parsing
- Redirect following
- Consistent error handling
- Test environment compatibility (gzip encoding for replay)
Adding a Package
To track a package, add it to your configuration file:- Package name format requirements
- Available extra options
- API endpoints used
- Example configurations