DEV Community

Alex Spinov
Alex Spinov

Posted on

Libraries.io Has a Free API — Track 6M+ Open Source Packages Across 40 Platforms

Track Every Package Everywhere

Libraries.io indexes 6M+ packages across 40 platforms: npm, PyPI, Maven, RubyGems, Go, NuGet, and more. Their API is free (60 requests/minute with API key).

Setup

Get a free API key at libraries.io (sign in with GitHub).

Search Packages

import requests

API_KEY = "your_key"

def search(query, platform="npm", limit=5):
    r = requests.get("https://libraries.io/api/search", params={
        "q": query, "platforms": platform, "per_page": limit, "api_key": API_KEY
    })
    return [{"name": p["name"], "stars": p.get("stars",0), 
             "rank": p.get("rank",0)} for p in r.json()]

results = search("web scraping", "Pypi")
for r in results:
    print(f"{r[name]:25} Stars:{r[stars]:>6}  Rank:{r[rank]}")
Enter fullscreen mode Exit fullscreen mode

Get Package Details

def get_package(platform, name):
    r = requests.get(f"https://libraries.io/api/{platform}/{name}", 
                     params={"api_key": API_KEY})
    p = r.json()
    return {
        "name": p["name"],
        "version": p["latest_release_number"],
        "deps": p["dependencies_count"],
        "dependents": p["dependents_count"],
        "stars": p.get("stars", 0),
        "rank": p.get("rank", 0)
    }

info = get_package("Pypi", "requests")
print(f"{info[name]} v{info[version]}")
print(f"Used by {info[dependents]:,} packages")
Enter fullscreen mode Exit fullscreen mode

Find Dependents (Who Uses This Package?)

def get_dependents(platform, name, limit=10):
    r = requests.get(f"https://libraries.io/api/{platform}/{name}/dependents",
                     params={"api_key": API_KEY, "per_page": limit})
    return [{"name": d["name"], "stars": d.get("stars",0)} for d in r.json()]

deps = get_dependents("npm", "express")
for d in deps:
    print(f"  {d[name]} ({d[stars]} stars)")
Enter fullscreen mode Exit fullscreen mode

Cross-Platform Comparison

def compare_ecosystems(query):
    platforms = ["npm", "Pypi", "Maven", "Rubygems", "Go"]
    for p in platforms:
        results = search(query, p, 3)
        print(f"\n{p}:")
        for r in results:
            print(f"  {r[name]:30} Stars:{r[stars]:>6}")

compare_ecosystems("json parser")
Enter fullscreen mode Exit fullscreen mode

Real Use Cases

  1. Tech radar — track which packages gain/lose adoption
  2. Dependency risk — find packages with no dependents (abandoned?)
  3. Alternative finder — search for competing packages across platforms
  4. Security — monitor packages your org depends on

More API tutorials | GitHub


More from me: 10 Dev Tools I Use Daily | 77 Scrapers on a Schedule | 150+ Free APIs

Top comments (0)