{"id":47592,"library":"fetch-from-npm-registry","title":"fetch-from-npm-registry","description":"A fetch library specialized for interacting with the npm registry. Current version: 4.1.2. It is part of the pnpm monorepo and designed to handle npm registry quirks like Corgi metadata (compressed manifests). It ships TypeScript types and requires Node.js >=10.13. Its key differentiator is built-in support for the npm registry's full versus filtered metadata, as well as authentication and retry logic tuned for the npm API. It depends on @pnpm/logger for logging.","status":"active","version":"4.1.2","language":"javascript","source_language":"en","source_url":"https://github.com/pnpm/pnpm/blob/master/packages/fetch-from-npm-registry","tags":["javascript","fetch","npm","typescript"],"install":[{"cmd":"npm install fetch-from-npm-registry","lang":"bash","label":"npm"},{"cmd":"yarn add fetch-from-npm-registry","lang":"bash","label":"yarn"},{"cmd":"pnpm add fetch-from-npm-registry","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency for logging","package":"@pnpm/logger","optional":false}],"imports":[{"note":"ESM default import is recommended for TypeScript and modern Node. CommonJS require works but may not resolve default correctly.","wrong":"const createFetcher = require('fetch-from-npm-registry')","symbol":"default (createFetcher)","correct":"import createFetcher from 'fetch-from-npm-registry'"},{"note":"Named export exists since v4.","wrong":"import createFetchFromNpmRegistry from 'fetch-from-npm-registry'","symbol":"createFetchFromNpmRegistry","correct":"import { createFetchFromNpmRegistry } from 'fetch-from-npm-registry'"},{"note":"TypeScript users may import these types for type safety.","wrong":null,"symbol":"types (FetchOptions, FetchResult)","correct":"import type { FetchOptions, FetchResult } from 'fetch-from-npm-registry'"}],"quickstart":{"code":"import createFetcher from 'fetch-from-npm-registry';\n\nconst fetchFromNpmRegistry = createFetcher({\n  userAgent: 'my-app/1.0.0',\n  auth: {\n    token: process.env.NPM_TOKEN ?? '',\n  },\n});\n\nasync function getPackageMetadata(packageName: string) {\n  const url = `https://registry.npmjs.org/${encodeURIComponent(packageName)}`;\n  const response = await fetchFromNpmRegistry(url, { fullMetadata: true });\n  if (!response.ok) {\n    throw new Error(`Failed to fetch metadata: ${response.status}`);\n  }\n  const metadata = await response.json();\n  return metadata;\n}\n\ngetPackageMetadata('is-positive')\n  .then(meta => console.log(JSON.stringify(meta.versions['1.0.0'], null, 2)))\n  .catch(err => console.error(err));","lang":"typescript","description":"Shows how to use the fetcher with a token from environment variable, requesting full metadata."},"warnings":[{"fix":"Switch to dynamic import or update to ESM-compatible setup.","message":"Version 4.0 changed from CommonJS to ESM-only. Use import instead of require.","severity":"breaking","affected_versions":">=4.0.0"},{"fix":"Use `filtered: false` instead of `fullMetadata: true`.","message":"The option `opts.fullMetadata` is deprecated in favor of `opts.filtered` (inverted logic).","severity":"deprecated","affected_versions":">=3.0.0"},{"fix":"Install @pnpm/logger as a dependency or peer dependency.","message":"The `@pnpm/logger` peer dependency is required. If not installed, the constructor will throw.","severity":"gotcha","affected_versions":">=2.0.0"},{"fix":"Check for `.ok` and `.status` property, not `statusCode`.","message":"The `fetch` function no longer returns a polyfill Response, but a native-like Response (requires Node 10+).","severity":"breaking","affected_versions":">=3.0.0"},{"fix":"If you need full package metadata, explicitly set `filtered: false` in options.","message":"The package sets `Accept` header to `application/vnd.npm.install-v1+json` by default, which returns corgi metadata. To get full metadata, set `fullMetadata: false` (or `filtered: false` in newer versions).","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Upgrade to Node 14 or later.","message":"Support for Node 10 is deprecated; Node 14+ recommended.","severity":"deprecated","affected_versions":">=4.0.0"}],"env_vars":null,"search_vec":"'10.13':45 '4.1.2':18 'api':74 'authent':66 'built':51 'built-in':50 'compress':36 'corgi':34 'current':16 'depend':76 'design':27 'differenti':48 'fetch':2,7,82 'fetch-from-npm-registri':1 'filter':61 'full':59 'handl':29 'interact':11 'javascript':81 'key':47 'librari':8 'like':33 'log':80 'logic':69 'manifest':37 'metadata':35,62 'monorepo':25 'node.js':44 'npm':4,14,30,56,73,83 'part':21 'pnpm':24 'pnpm/logger':78 'quirk':32 'registri':5,15,31,57 'requir':43 'retri':68 'ship':39 'special':9 'support':53 'tune':70 'type':41 'typescript':40,84 'version':17 'versus':60 'well':64","created_at":"2026-06-07T16:52:18.591881+00:00","updated_at":"2026-06-07T16:52:18.591881+00:00","problems":[{"fix":"Use `const createFetcher = require('fetch-from-npm-registry').default` for CJS, or better switch to ESM import.","cause":"Using require instead of import; default export not handled.","error":"TypeError: createFetcher is not a function"},{"fix":"Run `npm install @pnpm/logger` or `pnpm add @pnpm/logger`.","cause":"Missing peer dependency.","error":"Cannot find module '@pnpm/logger'"},{"fix":"Use `response.text()` and parse manually, or upgrade to version >=3.0.0.","cause":"Response is not a standard Response object (e.g., in older versions).","error":"TypeError: response.json is not a function"},{"fix":"Ensure the URL starts with 'https://' or 'http://'.","cause":"URL must be an absolute URL to registry.npmjs.org.","error":"Error: Invalid URL / Unsupported protocol"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/pnpm/pnpm/blob/master/packages/fetch-from-npm-registry#readme","github":"https://github.com/pnpm/pnpm/blob/master/packages/fetch-from-npm-registry","docs":null,"changelog":null,"pypi":null,"npm":"fetch-from-npm-registry","openapi_spec":null,"status_page":null,"smithery":null,"categories":["devops"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-07","next_check":"2026-09-05","install_tag":null}}