lateststable.org

Free JSON API for the latest stable version on 15 registries.

You need no key or account.

/v1/pypi/{package}

Response

curl -s https://lateststable.org/v1/pypi/fastapi
{
  "name": "fastapi",
  "version": "x.y.z",
  "major": "x",
  "minor": "y",
  "patch": "z",
  "date": null,
  "platform": "pypi"
}
Py fastapiPyPINp expressnpmGh denoGitHubCr serdecrates.ioGo textGoBr jqHomebrewRb railsRubyGemsHm postgresqlHelmJb IIUJetBrainsAh argo-cdArtifact HubAu yayAURPk frameworkPackagistMv slf4j-apiMavenDk nginxDocker HubNg SerilogNuGet

Legend

  • Registry with a stable version
  • Prerelease tags beside the four registries with their own rule
  • Hollow tile: its most recent lookup failed
  • Select a tile to run its lookup

What stable means per registry

Maven can list a milestone as a package's release and Docker Hub a partial tag like 26.13, so lateststable applies its own rule at four registries. The other eleven return the latest the registry reports.

RegistryURLRule
own rule
Packagist /v1/packagist/{vendor}/{package} First version in the p2 metadata that is not dev, alpha, beta or RC.
Maven /v1/maven/{groupId}/{artifactId} Highest numeric version in maven-metadata.xml, skipping any with a prerelease qualifier such as RC.
Docker Hub /v1/docker/{user}/{image} Highest numeric tag among the 100 most recently updated; 26.13.0 ranks above 26.13.
NuGet /v1/nuget/{package} Last listed version without a prerelease suffix; if all have one, the last listed.
registry decides
PyPI /v1/pypi/{package} info.version from the PyPI JSON API.
npm /v1/npm/{package} dist-tags.latest from the npm registry.
GitHub /v1/github/{user}/{repo} The tag of GitHub's latest release, minus a leading v, with its publish date.
crates.io /v1/crates/{crate} max_stable_version, highest stable by number, so wasmtime 50.0.1 beats a later-published 48.0.8 backport; if absent, first listed non-yanked version, else newest_version; neither filters prereleases.
Go /v1/go/{module} The version proxy.golang.org reports at @latest, minus the leading v.
Homebrew /v1/homebrew/{formula} versions.stable from the formulae.brew.sh API.
RubyGems /v1/rubygems/{gem} The version field from the RubyGems API.
Helm /v1/helm/{repo}/{chart} The chart version Artifact Hub reports.
JetBrains /v1/jetbrains/{product} The first result from the JetBrains releases API, queried with type=release.
Artifact Hub /v1/artifacthub/{kind}/{repo}/{package} The package version Artifact Hub reports for kind/repo/package.
AUR /v1/aur/{package} AUR's Version field with the package release suffix removed.

The response

lateststable returns these fields for all 15 registries.

name
Package name as requested; maven as groupId:artifactId, artifacthub as repo/package
version
The version string
major
First dot-separated segment after any leading v, as a string
minor
Second dot-separated segment, null when the version has none
patch
Third dot-separated segment, null when the version has none
date
Release date as YYYY-MM-DD at github, jetbrains, crates and go; null elsewhere
platform
The registry key, as listed at /v1

Status codes

200
The body is the object described above
400
Parameter has disallowed characters, consecutive dots, or over 256 characters
404
No such package, or no version passes lateststable's rule
502
The registry failed or timed out

Notes

  • lateststable caches a successful lookup for one hour and never caches an error.
  • Access-Control-Allow-Origin is *, so a browser page can call the API.
  • GET /v1 lists every registry key.