Benchmark report

npm thumbnail

Is npm slow?

Registry response times from 5 cities

Fast globally

npm responds quickly from all 5 test locations. Montreal was fastest at 21 ms; Amsterdam took 58 ms.

Fastest
21 ms
Montreal
Slowest
58 ms
Amsterdam
Successful requests
100%
5 locations

Response time around the world

Amsterdam 58ms typicalSan Francisco 30ms typicalMontreal 21ms typicalSingapore 31ms typicalTokyo 27ms typical
  • CanadaMontreal
    21 ms
  • JapanTokyo
    27 ms
  • United StatesSan Francisco
    30 ms
  • SingaporeSingapore
    31 ms
  • NetherlandsAmsterdam
    58 ms

Why is Amsterdam slower?

Amsterdam took 58 ms in the controlled run, against 21 to 31 ms in the other four cities. The extra time is in the plumbing: 13 ms to reach the server and 28 ms for the secure handshake before the registry starts answering. That points at the route to the nearest Cloudflare location, not at a slow server.

Click the location to see each stage.

ConnectTLSServer waitDownload
NetherlandsAmsterdam
58 ms
Finding the server
12 ms
Reaching the server
13 ms
Setting up security: most of the time
28 ms
Waiting for the server
17 ms
Receiving the response
0 ms
Total
58 ms

Finding the server is measured once per location, so it sits outside these bars. Open a city to see it.

Bars show the typical request, so the parts add up to its total. Why

Compare all locations

Click a city to see its stage-by-stage breakdown.

ConnectTLSServer waitDownload
NetherlandsAmsterdam
58 ms
Finding the server
12 ms
Reaching the server
13 ms
Setting up security: most of the time
28 ms
Waiting for the server
17 ms
Receiving the response
0 ms
Total
58 ms
United StatesSan Francisco
30 ms
Finding the server
13 ms
Reaching the server
3 ms
Setting up security
12 ms
Waiting for the server: most of the time
15 ms
Receiving the response
0 ms
Total
30 ms
CanadaMontreal
21 ms
Finding the server
4 ms
Reaching the server: most of the time
7 ms
Setting up security
7 ms
Waiting for the server
7 ms
Receiving the response
0 ms
Total
21 ms
SingaporeSingapore
31 ms
Finding the server
4 ms
Reaching the server
6 ms
Setting up security
11 ms
Waiting for the server: most of the time
14 ms
Receiving the response
0 ms
Total
31 ms
JapanTokyo
27 ms
Finding the server
4 ms
Reaching the server
2 ms
Setting up security
9 ms
Waiting for the server: most of the time
16 ms
Receiving the response
0 ms
Total
27 ms

Finding the server is measured once per location, so it sits outside these bars. Open a city to see it.

Bars show the typical request, so the parts add up to its total. Why

npm still feels slow?

Check npm’s status page
Registry incidents show up there first. A slow install during one is not a problem with your network.
This is not an install benchmark
Install time is mostly tarball count and size. A fast registry root does not rule out a slow install, and a slow root does not explain one.
Your route to Cloudflare matters
The registry root is served from Cloudflare’s edge. Each of our cities reached a nearby location; if yours does not, the handshake alone can add tens of milliseconds, as it did in Amsterdam.

Response time over the last 16 days

Daily median of 5 requests per location, 27 August 2026 to 12 September 2026.
0100200 ms27 Aug12 SeptMumbai joinedMontreal, 30 August 2026: 54 ms, well above its usual level.Montreal, 1 September 2026: 99 ms, well above its usual level.Montreal, 2 September 2026: 94 ms, well above its usual level.Montreal, 5 September 2026: 94 ms, well above its usual level.Montreal, 6 September 2026: 113 ms, well above its usual level.Montreal, 7 September 2026: 94 ms, well above its usual level.Singapore, 7 September 2026: 70 ms, well above its usual level.

A dot marks a day well above that location’s usual level.

Show the numbers
DayAmsterdamSan FranciscoMontrealSingaporeTokyoMumbai
27 August 202648 ms33 ms22 ms56 ms23 ms—
28 August 202645 ms27 ms20 ms29 ms16 ms—
29 August 202639 ms31 ms21 ms27 ms18 ms—
30 August 202646 ms31 ms54 ms ▲30 ms16 ms—
31 August 202646 ms30 ms52 ms27 ms17 ms—
1 September 202642 ms30 ms99 ms ▲25 ms27 ms—
2 September 202647 ms33 ms94 ms ▲27 ms18 ms—
3 September 202645 ms26 ms23 ms27 ms18 ms—
4 September 202645 ms30 ms17 ms26 ms18 ms—
5 September 202644 ms27 ms94 ms ▲43 ms19 ms—
6 September 202648 ms25 ms113 ms ▲27 ms20 ms—
7 September 202647 ms25 ms94 ms ▲70 ms ▲21 ms27 ms
8 September 202640 ms30 ms15 ms28 ms22 ms26 ms
9 September 202643 ms24 ms17 ms25 ms16 ms25 ms
10 September 202642 ms30 ms24 ms28 ms16 ms27 ms
11 September 202642 ms25 ms19 ms24 ms17 ms22 ms
12 September 202640 ms29 ms17 ms25 ms18 ms19 ms

About this measurement

GET registry.npmjs.org · 20 requests per location · 20 August 2026

What we tested · Package registry. GET registry.npmjs.org/: the two-byte registry root, cached as immutable at Cloudflare's edge. A round trip to Cloudflare more than a registry lookup.

How LatencyRadar measures response time →

Technical details

Doesn’t measure: npm install: package metadata documents and tarball downloads, or the npmjs.com website.

One npm surface is measured: GET registry.npmjs.org/, the registry root. The response is two bytes of JSON, cached at Cloudflare's edge and marked immutable, so what we time is a TLS round trip to the nearest Cloudflare location, not a registry lookup. It stands for the network path to the registry and little else. A package metadata document, the first thing npm install fetches, would be a better primary surface and is a candidate for the next batch.

Not measurable here: npm install itself, which fetches metadata documents and tarballs and is dominated by download size; publishing; and the npmjs.com website.

In the displayed 20 August run, Montreal received the registry root in 21 ms typical and Amsterdam in 58 ms. All five cities received a response to every request. A successful, fast root request is useful network evidence, but package metadata and tarballs still need their own measurements when an install is slow.

Test locationTypical response timeSlower response timeRequests
Amsterdam58 ms67 ms20
San Francisco30 ms40 ms20
Montreal21 ms41 ms20
Singapore31 ms40 ms20
Tokyo27 ms37 ms20

Typical: half of the requests finished within this time (technical: p50). Slower: 95% of requests finished within this time (technical: p95). Statistics

Request
GET registry.npmjs.org
Measured from
Amsterdam · San Francisco · Montreal · Singapore · Tokyo
Requests
100 requests · 20 from each of 5 cities · 20 August 2026
Timings taken
DNS, connect, TLS, waiting for the server, download

npm

https://registry.npmjs.org

Independent measurement by LatencyRadar. Not affiliated with npm. · How we measure (v1.3)

How fast is your API around the world?

Run a free speed test from multiple cities and find out where your users are waiting. No setup, no account required.

Test my API

No account required · Takes about 30 seconds.

More benchmarks

All benchmarks →