WarpLink
Trust and reliability

Performance and Methodology

What WarpLink's sub-10ms redirect figure measures, a dated warm-link test with its sample size, client latency from one location, and measured SDK sizes.

"Sub-10ms" is the processing time our redirect service spends on a request for a link that is already in the edge cache. It does not include DNS, the TLS handshake, or network transit between the visitor and the edge. This page states what we measure, shows the latest test with its sample size and date, and gives the commands so you can repeat every measurement.

What "sub-10ms" measures

CountedNot counted
CPU time the redirect service spends on the request: reading the link from the edge cache, screening the user agent, choosing the destination, building the 302DNS lookup, TCP and TLS handshakes, and the distance between the visitor and the edge location
A link that is already in the edge cache, which is every link after its first saveA cache miss, which adds one database read (see Architecture and failure modes)
The request path onlyWork done after the visitor already has the redirect, such as queueing the click and storing the deferred-link payload

We report two server-side numbers. CPU time is the processor time the request used. Wall time is the elapsed time of the whole invocation, including the work done after the response was sent. Wall time is therefore an upper bound on what the visitor waits, not the wait itself.

Server-side result

Measured on 2026-10-10, 05:50 to 06:05 UTC, from the invocation logs of the production redirect service. Sample: 76 requests to one cached link (our demo link), sent in two bursts from one machine, so the instance was warm. Each request was a redirect to a desktop browser user agent.

Metricp50p95p99
CPU time3 ms10 ms13 ms
Wall time70 ms192 msnot reported

For a cached link on a warm instance, the median redirect uses 3 ms of CPU, and 95 percent use 10 ms or less. Wall time is higher because it also counts the work done after the visitor has the redirect. This is one test on one day. We repeat it and update this page with the new date.

Client-observed latency

Measured on 2026-10-10 from one North American broadband connection, against our demo link, with a desktop browser user agent, without following the redirect. This is a single location and a single day. It shows what one visitor sees, not a global figure.

ConnectionMeasurenp50p95
Fresh connection per requestTotal time, including DNS, TCP, and TLS50169 ms208 ms
Reused connectionTime to first byte4937 ms131 ms

On this connection the TCP connect time had a median of 25 ms, which approximates one network round trip. Most of the time to first byte on a reused connection is that round trip, not the redirect service.

Edge network

"300+ edge nodes" is the size of the global edge network our redirect service runs on. We do not operate those locations ourselves. A visitor's request is answered by the location nearest to them, which is why transit time stays short. The figure describes the network, not the number of WarpLink servers.

SDK size

Measured on 2026-10-10. "Under 200KB" is gzipped size. KB here means 1,000 bytes.

SDKWhat we measuredRaw sizeGzipped
iOSRelease build for arm64, debug info stripped453,840 B158,621 B
iOSSize added to a linked test app, dead code removed and stripped262,088 B111,807 B
AndroidPublished 1.1.0 AAR from Maven Central123,801 Balready compressed
React NativeJavaScript in the published 1.1.0 package (lib/module)54,716 B17,645 B
React NativeEntire published 1.1.0 tarball, including native sources and type definitionsnot measured83,546 B
FlutterDart code in the published 1.1.0 package (lib)not measured28,697 B
FlutterDart, Android, and iOS runtime sources in the published 1.1.0 packagenot measured74,318 B
FlutterEntire published 1.1.0 archive, including tests, example app, and docsnot measured185,192 B

React Native and Flutter wrap the native iOS and Android SDKs, so the native SDK is added on top of their own package. The totals below add the gzipped package code to the gzipped native SDK. They leave out the small native bridge code in each package, which we did not measure separately.

AppCalculationTotal
React Native on Android17,645 B JavaScript + 123,801 B Android SDK141,446 B
React Native on iOS17,645 B JavaScript + 111,807 B iOS SDK129,452 B
Flutter on Android28,697 B Dart + 123,801 B Android SDK152,498 B
Flutter on iOS28,697 B Dart + 111,807 B iOS SDK140,504 B

Every total above is under 200,000 bytes. The full published React Native tarball (83,546 B) and Flutter archive (185,192 B) are larger because they include source files, tests, an example app, and docs that do not ship inside an app. The iOS figures come from building the 1.1.0 source with the Swift 6.3 toolchain for iOS 15 and later. The other figures are the published packages.

Repeat it

Client latency, fresh connection per request:

Run it 50 times, 0.3 seconds apart, and take the 50th and 95th percentiles. Pass several URLs to one curl command to reuse the connection and read the time to first byte.

SDK sizes:

What we have not measured yet

  • Client latency from more than one location. We will add regions as we measure them.
  • The cache-miss path. A request for a link that is not in the cache waits for one database read. That read has a 2-second limit per attempt and two attempts, so the worst case before the visitor sees an error is about 4 seconds.
  • Client-side p99.

These measurements are repeated and republished here with their dates. For what the service does when a dependency is down, see Architecture and failure modes.

On this page