README.md
July 15, 2026 ยท View on GitHub
@badisi/latest-version
๐ฆ Get latest versions of packages.
Features
โ
Get installed versions of packages (if installed locally or globally with npm or yarn)
โ
Get latest and next versions of packages (from package registries)
โ
Get wanted version of packages (if a version range or a tag is provided)
โ
Check if any updates are available
โ
Cache support to increase data retrieval performance
โ
Support public/private repositories and proxies
โ
Dual build support (CJS/ESM)
๐ Check out ๐๐ป @badisi/check-updates
An interactive CLI to scan, visualize and upgrade NPM dependencies โ locally or globally !
Installation
npm install @badisi/latest-version --save
yarn add @badisi/latest-version
Usage
Example
/** CommonJS */
// const { latestVersion } = require('@badisi/latest-version');
// const { readFileSync } = require('node:fs');
/** ESM / Typescript */
import { latestVersion } from '@badisi/latest-version';
import { readFileSync } from 'node:fs';
(async () => {
// Single package
const pkg = await latestVersion('npm');
// List of packages
const pkgs = await latestVersion(['npm', 'npm@1.3.2', 'npm@beta', '@scope/name@^5.0.2']);
// Package.json
const pkgs = await latestVersion(JSON.parse(readFileSync('package.json').toString()));
// Using cache
const pkg = await latestVersion('npm@^5.0.2', { useCache: true });
})();
Return
Either a collection or a single LatestVersionPackage object:
interface LatestVersionPackage {
/**
* The name of the package.
*/
name: string;
/**
* The current local installed version of the package (if installed).
*/
local?: string;
/**
* The current npm global installed version of the package (if installed).
*/
globalNpm?: string;
/**
* The current yarn global installed version of the package (if installed).
*/
globalYarn?: string;
/**
* The latest version of the package found on the registry (if found).
*/
latest?: string;
/**
* The next version of the package found on the registry (if found).
*/
next?: string;
/**
* The tag or version range that was provided (if provided).
*
* @default "latest"
*/
wantedTagOrRange?: string;
/**
* The latest version of the package found on the registry and satisfied by the wanted tag or version range.
*/
wanted?: string;
/**
* Whether the local or global installed versions (if any) could be upgraded or not, based on the wanted version.
*/
updatesAvailable: {
local: string | false;
globalNpm: string | false;
globalYarn: string | false;
} | false;
/**
* Any error that might have occurred during the process.
*/
error?: Error;
}
Options
interface LatestVersionOptions {
/**
* Awaiting the api to return might take time, depending on the network, and might impact your package loading performance.
* You can use the cache mechanism to improve load performance and reduce unnecessary network requests.
* If `useCache` is not supplied, the api will always check for updates and wait for every requests to return before returning itself.
* If `useCache` is used, the api will either (for each provided packages):
* 1) return immediately if a cache was found.
* 2) fetch and wait for updates of that particular package then creates a cache for it so that it is available for the next call to the api.
*
* @default false
*/
useCache?: boolean;
/**
* How long the cache for each provided packages should be used before being refreshed (in milliseconds).
* If `useCache` is not supplied, this option has no effect.
* If `0` is used, this will force the cache to refresh immediately:
* 1) New updates will be fetched and waited
* 2) The cache for each provided packages will be refreshed and made available for the next call to the api
*
* @default ONE_DAY
*/
cacheMaxAge?: number;
/**
* A JavaScript package registry url that implements the CommonJS Package Registry specification.
*
* @default "Looks at any registry urls in the .npmrc file or fallback to the default npm registry instead"
* @example <caption>.npmrc</caption>
* registry = 'https://custom-registry.com/'
* @pkgscope:registry = 'https://custom-registry.com/'
*/
registryUrl?: string;
/**
* Set of options to be passed down to Node.js http/https request.
*
* @example <caption>Behind a proxy with self-signed certificate</caption>
* { ca: fs.readFileSync('proxy-cert.pem') }
* @example <caption>Bypassing certificate validation</caption>
* { rejectUnauthorized: false }
*/
requestOptions?: RequestOptions;
}
Development
See the developer docs.
Contributing
> Want to Help ?
Want to file a bug, contribute some code or improve documentation ? Excellent!
But please read up first on the guidelines for contributing, and learn about submission process, coding rules and more.
> Code of Conduct
Please read and follow the Code of Conduct and help me keep this project open and inclusive.