The first real throughput numbers for a direct awdl0 peer-to-peer link, measured on 2026-08-18 with two Macs carried to physical positions. No such figure existed anywhere before this — not from Apple, not from any third party (see Phases).
The decisive reading
156.3 Mbps at the exact spot where Reincubate Camo drops its connection, over
awdl0 — direct, having never touched the router.That is 6.25× the 25 Mbps pass threshold. The transport premise of the whole project is proven on hardware, not argued.
The numbers
| Position 1 — beside the router | Position 2 — Camo’s dead spot | Change | |
|---|---|---|---|
| Throughput | 339.0 Mbps | 156.3 Mbps | −54% |
| 5 MB still lands in | 0.12 s | 0.26 s | 2.2× |
| Retransmitted (of 32 MB) | 1428 B | 3804 B | 2.7×, still 0.011% |
| Round-trip | 37.0 ms | 37.0 ms | unchanged |
| Interface | awdl0 — direct | awdl0 — direct | held |
Range costs bandwidth, not latency
Roughly half the bandwidth disappears at range and round-trip time does not move at all. Reaching the 25 Mbps pass floor would take a further 84% loss; the 8 Mbps fail floor, 95%.
The peer was discovered on awdl0 only at both positions — the router path was never even a candidate.
Sender-side cross-checks agreed within ~3% (350.8 and 159.1 Mbps). The listener’s rtt 0.0 ms is an artifact of a receive-only path report; 37 ms from the sender is the real figure.
Why 37 ms matters later
37 ms round-trip is the radio’s own cost. Irrelevant to Phase 0 — stills and video are latency-insensitive by design — but it is a material slice of the Phase 2 live-preview budget. For scale, the entire VideoToolbox low-latency saving at 4K30 is ~124 ms (3. VideoToolbox — low-latency mode is the headline).
Consequences that were locked in
- Phase 0’s kill criteria are met; the build proceeded.
- Phase 2’s live preview targets 1080p, not the 720p30 fallback — the marginal branch of the spec does not apply.
- The fallback ladder (reduce preview ambition → Personal Hotspot → wired USB) is recorded as unused, not untested.
How the instrument avoids lying
The probe (Sources/AposematiProbe/, .build/release/aposemati-probe) refuses to produce a comfortable wrong answer in three independent ways:
- The sender pins
requiredInterface, so it cannot silently fall back to the router — a connection failure at range is loud. - The listener reads the busiest path from
PendingDataTransferReport.pathReportsrather thancurrentPath.first— it reports the interface that carried bytes, not one that was merely available. TRAFFIC SPLIT ACROSS INTERFACESand an interface-rowfailmean a fast transfer over the wrong link still grades as failure.
A truncated transfer is graded TRANSFER INCOMPLETE / fail after a 120 s bound, and its Mbps figure is printed but explicitly disowned.
The bug that would have made every number meaningless
The listener originally timed the close handshake, not the transfer. Progress showed
32.0 MB of 32.0 MBat the 5 s tick, and the final reading saidreceived 32.0 MB in 10.62 s— because the receive loop waited for the peer’sisComplete, which only arrived when the sender abandoned its own 10 s close-wait.Elapsed was pinned near ~10.6 s regardless of link speed, so throughput read ~25 Mbps for any fast link — landing almost exactly on the 25.0 Mbps pass threshold by coincidence. Every Phase 0 number would have been an artifact of a timeout.
Caught by a loopback smoke test before anyone walked anywhere. After the fix, elapsed dropped from 10.62 s to 0.02 s and loopback read 15,674 Mbps against the sender’s independent 15,321.7 Mbps.
Caveats on these numbers
- This is Mac-to-Mac. An SPM executable cannot run on iOS, so the iPhone’s AWDL behaviour — different radio, thermal envelope, power management — was not measured here. The live Phase 1 run subsequently proved iPhone→Mac works, but not at range.
- Throughput is one direction only, Mac B → Mac A.
udp listen/udp sendhas never been exercised. It replaced the abandoned QUIC probe mode in the last fix round. Do not treat “AWDL carries UDP” as answered by Phase 0 — it was answered later, implicitly, by QUIC working over the real link in Phase 1.
Related
- aposemati-phase0-phase1-build — the build this gated
- aposemati-network-framework-gotchas — how the
awdl0interface is obtained at all - aposemati-transport-findings — the research that selected AWDL via
includePeerToPeer - camo-studio-teardown — the product that fails at position 2