npm has 2.3M packages. PyPI has 500K. Maven has 500K. How do you track dependencies across ALL of them?
Libraries.io indexes 8M+ packages across 40+ platforms — and their API is completely free. No API key required for basic queries.
What Libraries.io Tracks
- npm, PyPI, Maven, NuGet, RubyGems, Cargo, Go, Packagist...
- Dependency trees (what depends on what)
- SourceRank score (package quality metric)
- Release history, maintainer info
- GitHub repo health indicators
Quick Start
Base URL: https://libraries.io/api/
1. Search Packages Across All Platforms
import requests
def search_packages(query, platforms=None, sort='rank'):
params = {'q': query, 'sort': sort, 'per_page': 10}
if platforms:
params['platforms'] = platforms
resp = requests.get('https://libraries.io/api/search', params=params)
packages = resp.json()
for pkg in packages:
print(f" [{pkg['platform']:<8}] {pkg['name']:<30} rank:{pkg.get('rank',0):>3} | {pkg.get('description','')[:40]}")
return packages
# Search across all platforms
search_packages('web scraping')
# Filter by platform
search_packages('http client', platforms='pypi')
2. Get Package Details
def get_package(platform, name):
resp = requests.get(f'https://libraries.io/api/{platform}/{name}')
pkg = resp.json()
return {
'name': pkg['name'],
'version': pkg.get('latest_release_number'),
'rank': pkg.get('rank'),
'stars': pkg.get('stars', 0),
'forks': pkg.get('forks', 0),
'dependents': pkg.get('dependents_count', 0),
'dependencies': pkg.get('dependencies_count', 0)
}
# Example
print(get_package('pypi', 'requests'))
# {'name': 'requests', 'rank': 28, 'stars': 51000, 'dependents': 150000, ...}
3. Find Who Depends on a Package
def get_dependents(platform, name, per_page=10):
resp = requests.get(
f'https://libraries.io/api/{platform}/{name}/dependents',
params={'per_page': per_page}
)
return [{'name': d['name'], 'platform': d['platform']} for d in resp.json()]
# Who depends on Flask?
for d in get_dependents('pypi', 'flask', 5):
print(f" {d['name']} ({d['platform']})")
4. Compare Packages Side by Side
def compare_packages(platform, names):
results = []
for name in names:
pkg = get_package(platform, name)
results.append(pkg)
print(f"{'Metric':<20}", end='')
for r in results:
print(f"{r['name']:<20}", end='')
print()
print('-' * (20 + 20 * len(results)))
for metric in ['rank', 'stars', 'dependents', 'dependencies']:
print(f"{metric:<20}", end='')
for r in results:
print(f"{str(r.get(metric, '?')):<20}", end='')
print()
# Compare HTTP clients
compare_packages('pypi', ['requests', 'httpx', 'aiohttp'])
Output:
Metric requests httpx aiohttp
--------------------------------------------------------------------
rank 28 15 22
stars 51000 12000 14000
dependents 150000 8500 45000
dependencies 4 7 3
5. SourceRank: The Quality Metric
Libraries.io calculates a SourceRank for every package based on:
- Stars, forks, watchers
- Contributors count
- Release frequency
- Dependency count
- README quality
- License presence
Higher rank = more trustworthy package.
Rate Limits
- Without API key: 60 requests/minute
- With free API key: [register at libraries.io] for higher limits
- Data is cached, so responses are fast
Use Cases
- Security teams: Audit all dependencies across projects
- Open source maintainers: Track who uses your package
- Developers: Choose between competing libraries objectively
- Researchers: Analyze open source ecosystem trends
- Product managers: Monitor competitor tech stacks
Combine with Other APIs
Pair Libraries.io with:
- PyPI JSON API for Python deep-dives
- npm Registry API for JavaScript analysis
- GitHub API for repo health checks
I explore free APIs and build developer tools. More: GitHub | Writing opportunities: Spinov001@gmail.com
Top comments (0)