‹ All AirLink docs

AirLink

Performance

What has been measured on real devices, what is computed from the wire format, what comes from a bench simulation, and what has not been measured yet.

Where the numbers come from

AirLink's figures come from three sources, and each is labelled here:

  • Computed from the wire format, exactly.
  • Measured in one instrumented session on 5 September 2026: a MacBook Pro, an iPhone 12 Pro Max and an iPad Air (5th generation) in one room, all on one Wi-Fi network, with lab mode on for 21 minutes on all three and 10,143 events recorded.
  • Simulated on a bench, for the echo canceller.

In the measured session the Wi-Fi transport carried almost everything. A Bluetooth link was up for about 5 percent of the session on two devices and never on the third. The figures describe the mesh running over a local network, not over Bluetooth alone.

Voice

FigureValueSource
Opus payload per 20 ms frameAbout 60 bytes at 24 kbit/sComputed
Voice frame on the mesh121 bytes: 41 header, 4 sequence, 60 audio, 16 tagComputed
On-air rate48.4 kbit/s at 50 frames per secondComputed
Same speech uncompressed384 kbit/sComputed
Encoder cadence50.002 frames per second: 54,600 frames in 1,092 s over 11 callsMeasured
Frames received against sent53,193 of 54,797, a loss of 2.9 % in aggregateMeasured
Encoded frame size boundUnder 200 bytes per frame and under 8 kB per secondUnit test

Per-direction loss is not reported: each device sampled its counters every two seconds on its own clock, which puts about a hundred frames of skew on any one pair. The instrument now records totals when each call ends.

Messages

FigureValue
Probes delivered to present devices1,000 of 1,000, each acknowledged exactly once
Pairs probedMac to iPad 200, Mac to iPhone 400, iPad to Mac 200, iPad to iPhone 200
Probe rateBursts of 200 at four per second, sealed and receipted like text
Call signalling delivered72 of 95, losses clustered in the three failed calls

The 1,000 probes were sent during the two calmest minutes of the session, with no link coming up or going down, and the iPhone's own transmit path was not probed. A further 400 probes went to a stale contact that was no longer any device in the room; none arrived, and they are excluded.

Latency

Sender to receiver, paired by message identifier on the collector's clock, 1,075 messages.

PathSamplesMedian90th percentileMaximum
One hop, no call running88134 ms129 ms422 ms
Two hops, relay forced119102 ms237 ms
One hop, while another pair was on a call7534 ms219 ms859 ms

A relay roughly triples the median. Clocks were agreed with each device over a round trip of 35 to 42 ms, and re-measurements disagreed by up to 13 ms, which bounds the residual error at about that size.

The cost of flooding

With three devices, every message to a present recipient was relayed exactly once, by the one device that was neither sender nor recipient, in 1,000 of 1,000 cases. Every message to the absent contact was relayed twice, by both others, in 400 of 400. The 400 probes to one stale contact cost 1,200 sealed packets on the air, 37.5 percent of the session's probe traffic, for no delivery.

Of 3,066 relays recorded, 119 delivered a message before its direct copy did, landing a median of 3 ms earlier. A relay cannot know at the time whether its copy is redundant.

Calls

FigureValue
Calls placed and connected14 placed, 11 connected
Invite to ringMedian 22 ms, range 17 to 154 ms, in 11 of 15 ring events
Accept to connected at the callerMedian 360 ms, range 214 to 1,004 ms, 11 calls
Connected to first audio frameMedian 95 ms, 21 directions
Calls that started on the mesh before the direct road took over9 of 11, after 5 to 36 frames
Longest handover after first audio193 ms
Calls demoted back to the meshNone
App launched into an active ring, to ring shown0.7 s

Of the three calls that failed, two coincided with a burst of links coming up and going down, at 9.5 times the session's base rate. The third exposed a signalling defect, a late invite ringing an ended call, which is fixed in the current build.

Echo cancellation

The software canceller was run against a synthetic room impulse response with the benchmark in the test suite, over 400 blocks of 20 ms. It reached 30 dB of echo return loss enhancement after 4.48 seconds and 33.1 dB at the end of the run. This is a simulation, not a device recording, and it was recorded before the most recent change to the canceller's adaptation rule.

In the measured session the canceller ran on one Mac and removed nothing: its adaptation gate compared microphone power with far-end power as if they shared a gain, and never let the filter learn. The gate now judges each block by whether the filter's own model explains it. A device measurement of the corrected filter has not been made.

Tests

The package has 188 unit tests and one benchmark that runs only when AIRLINK_BENCH is set. They cover the packet format, reassembly, routing, the outbox, sealing, identity persistence, the call number, call keys, the replay window, the voice codec, the echo canceller, the chat store and the finder's signal maths. Multi-hop relaying is tested over an in-memory transport. The radio layers themselves are not covered by tests.

What has not been measured

  • Bluetooth alone. No session has run with Wi-Fi off, which is the case the mesh was designed for.
  • Range. No distance measurements for either radio.
  • Scale. Nothing beyond three devices, so the hop limits of 8, 6 and 5 are argued, not validated.
  • Energy. The session recorded two battery readings quantised to 5 percent, which is not a measurement.
  • The corrected echo canceller on a device.
  • Comparison with other systems. No baseline run against a comparable messenger.