Check current npm status: statusfield.com/services/npm
npm's registry hosts over 2.5 million packages and serves billions of download requests per week. When it degrades, npm install hangs, CI pipelines stall, and deploys fail — often with cryptic network errors that look like your connection or the package itself is broken. Here's how to confirm it's npm and not you, and what to do while you wait.
Is npm Down Right Now?
Check these in order, fastest first:
- Statusfield — npm status — real-time monitoring of npm's registry health, with incident history so you can see when the issue started.
- npm's official status page — status.npmjs.org — lists active incidents across the registry, CDN, and website. npm uses Atlassian Statuspage.
- Twitter/X — search
npm downornpm registrysorted by Latest. Developers report install failures in real time, often before the status page updates. - Your terminal — run
npm ping— if it returnsPing success: {}, the registry is reachable from your machine. If it hangs or throwsECONNREFUSED, the registry or your connection is broken.
If npm ping succeeds but npm install still fails, the problem is usually a specific package, a corrupt lockfile, or a scoped registry configuration — not a global npm outage.
npm Components That Can Fail Independently
npm isn't a single endpoint — the registry, CDN, metadata API, and website are separate services:
| Component | What breaks when it fails |
|---|---|
| Registry API | npm install fails; npm view <pkg> returns errors; npm publish fails |
| CDN (package tarballs) | Metadata resolves but downloading packages times out or returns 503 |
| Website (npmjs.com) | Package search and documentation pages unreachable; doesn't affect npm install |
| npm CLI / update server | npm update checks fail; no impact on installs from a working registry |
| Scoped registry (private) | @company/pkg installs fail if your private registry (JFrog, Verdaccio, GitHub Packages) is down |
A CDN failure means metadata fetches work but tarball downloads time out. A registry API failure means both metadata and downloads fail. The status page breaks down which component is affected.
Common npm Error Messages During an Outage
| Error | Likely cause |
|---|---|
npm ERR! code ECONNREFUSED | registry.npmjs.org unreachable — port 443 blocked or registry down |
npm ERR! code ETIMEDOUT | Registry reachable but not responding — overloaded CDN or degraded endpoint |
npm ERR! code EAI_AGAIN | DNS resolution failure — either a local DNS issue or npm's DNS is degraded |
npm ERR! code E503 | Registry returned HTTP 503 — service temporarily unavailable |
npm ERR! code E429 | Rate limited — typically from CI jobs hitting the registry too aggressively |
npm ERR! network socket hang up | CDN dropped the connection mid-download — retry usually fixes it |
npm ERR! Unexpected end of JSON input | Corrupt metadata response — can happen during partial registry outages |
npm ERR! code CERT_HAS_EXPIRED | npm's certificate expired (rare) or your system clock is wrong |
npm WARN registry Using stale package data from the cache | Registry unreachable, npm falling back to local cache |
How to Tell npm Outage From Your Own Network
Before blaming npm, rule out local issues:
# 1. Check if the registry is reachable:
npm ping
# Expected: "Ping success: {}"
# 2. Test raw connectivity to the registry:
curl -I https://registry.npmjs.org/react
# 3. Check your npm proxy/registry config:
npm config get registry
# Should be: https://registry.npmjs.org/ (unless you've set a custom mirror)
# 4. Try a known package to isolate the issue:
npm view lodash version
# Should return a version number like "4.17.21"If npm ping works but a specific package fails, the issue is that package (unpublished, yanked, or corrupt) — not the registry.
If you're on a corporate network, your company's proxy or firewall may be blocking npm's registry or CDN endpoints. Try from a mobile hotspot to confirm.
Offline Installs: Using Verdaccio as a Local Cache
When npm is down and you need to keep working, a local registry proxy like Verdaccio lets you install from a cached copy of packages you've used before.
Quick setup (1 minute)
# Install Verdaccio globally:
npm install -g verdaccio
# Start it (runs on http://localhost:4873):
verdaccio &
# Point npm at your local registry for this session:
npm set registry http://localhost:4873
# Install packages — Verdaccio proxies to npm and caches locally:
npm install react
# When npm recovers, restore your registry:
npm set registry https://registry.npmjs.org/Once Verdaccio has cached a package, future npm install calls use the cache even if the public registry is down. Particularly useful in CI environments — set Verdaccio as the registry in your pipeline and you get both speed (cache hits) and resilience (outage protection).
Alternative: use npm's built-in cache
npm caches tarballs locally in ~/.npm. If you've installed a package before, you can force install from cache:
# Install using only cached data (no network):
npm install --prefer-offline
# Or strictly from cache with no fallback:
npm install --offline--offline fails if a package isn't cached. --prefer-offline falls back to the network if the cache is stale.
CI/CD Retry Configuration
npm registry blips cause CI failures that have nothing to do with your code. Set up retry logic so transient outages don't break your pipeline.
GitHub Actions
# .github/workflows/ci.yml
- name: Install dependencies
run: npm ci
env:
# Retry npm install up to 3 times on network errors:
NPM_CONFIG_FETCH_RETRIES: 3
NPM_CONFIG_FETCH_RETRY_MINTIMEOUT: 5000
NPM_CONFIG_FETCH_RETRY_MAXTIMEOUT: 60000Or use the actions/setup-node action with caching — it caches ~/.npm between runs, so most installs skip the registry entirely:
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'.npmrc configuration
Set retry behavior globally via .npmrc (commit this to your repo to apply it in CI):
# .npmrc
fetch-retries=3
fetch-retry-mintimeout=5000
fetch-retry-maxtimeout=60000
fetch-timeout=300000npm CI with lockfile integrity
In CI, always use npm ci instead of npm install. npm ci requires a package-lock.json and installs exact versions — faster, more deterministic, and safer for production builds:
# In CI: always prefer npm ci
npm ci
# Use --prefer-offline to use cache when the registry is slow:
npm ci --prefer-offlineHow to Get Instant npm Outage Alerts
npm registry outages hit hardest when you have a deploy queued or a hotfix to ship. Monitoring lets you know immediately — so you can hold the deploy, flip to a mirror, or start troubleshooting before the whole team starts asking what's broken.
Monitor npm on Statusfield — Statusfield watches npm's registry health continuously and alerts you the instant the status changes. Route alerts to:
- Slack or Discord — drop npm status alerts into your engineering channel so the whole team knows the moment the registry goes down.
- Email or Telegram — for a personal heads-up when installs start failing in CI.
- Webhook — pipe status changes into PagerDuty, OpsGenie, or your own alerting pipeline.
If you run a team deploying to production, knowing npm is degraded before you kick off a deploy saves the emergency scramble.
Start monitoring npm on Statusfield → — free, no credit card required.
Frequently Asked Questions
Is npm down right now?
Check statusfield.com/services/npm for real-time npm registry status, or status.npmjs.org for npm's official status page. Run npm ping in your terminal to test registry reachability directly.
Why is npm install failing with ECONNREFUSED?
ECONNREFUSED means npm couldn't connect to the registry at all. Run npm ping to verify — if it also fails, the registry is either down or your network is blocking port 443 to registry.npmjs.org. Check status.npmjs.org and try from a different network to isolate the cause.
Can I install npm packages without internet access?
Yes. If you've previously installed the packages, run npm install --offline or npm install --prefer-offline to use npm's local cache (~/.npm). For team-wide offline caching, set up Verdaccio as a local registry proxy — it caches packages and serves them even when the public registry is unreachable.
How do I stop npm outages from breaking my CI pipeline?
Set fetch-retries=3 in your .npmrc (or via NPM_CONFIG_FETCH_RETRIES=3 env var), cache the npm cache directory between CI runs (GitHub Actions: cache: 'npm' in actions/setup-node), and use npm ci --prefer-offline to hit the cache first. This makes transient registry blips invisible to your pipeline.
Is it npm's registry or my private scoped registry that's down?
Check by running npm view <public-package> version (e.g., npm view lodash version). If that works but npm install @company/package fails, your private or scoped registry is the issue — not npm's public registry. Check the registry config with npm config get registry and npm config list.
Know the moment a tool you depend on goes down
Statusfield watches 7,000+ services your business depends on and alerts you the moment they break.
Free plan · No credit card
Related Articles
Stop Deploying Into Outages: Pre-Deploy Dependency Checks with Statusfield's API
Use the Statusfield REST API to check whether your critical dependencies are down before a deploy ships. Works in any CI/CD pipeline — GitHub Actions, shell scripts, or Node.js.
Is GitLab Down? How to Check GitLab.com Status Right Now
GitLab CI/CD failing, merge requests not loading, or pipelines stuck? Learn how to check if GitLab is down right now and what to do when GitLab.com has an outage.
Is CircleCI Down? How to Check CircleCI Status Right Now
CircleCI builds not starting, pipelines queued indefinitely, or CI jobs failing with infrastructure errors? Learn how to check if CircleCI is down right now and what to do to keep shipping during an outage.