‹ All AirLink docs

AirLink

Overview

What AirLink does today, the devices it runs on, and how the mesh, the sealed messages and the calls fit together.

What it is

AirLink carries sealed text messages and live encrypted voice calls between nearby devices, with no internet, no SIM, no phone number, no account and no server. Devices find each other over Bluetooth Low Energy and over Wi-Fi, including Apple's peer-to-peer Wi-Fi when there is no shared network, and treat the two as one link.

Each device is addressed by a short number derived from its own keys, such as A3F9-K2P1. There is no directory to register with and none to compromise.

AirLink also includes a signal-strength finder for locating a nearby Bluetooth device by walking towards it.

What it does

  • Chats. Text messages up to 3,500 characters, sealed to the recipient. Delivery is confirmed by a sealed receipt from the recipient.
  • Calls. Voice calls with fresh keys for every call. Audio starts over the mesh and moves to a direct Wi-Fi path when one proves it works. On iPhone and iPad, calls appear in the system call screen.
  • Relaying. A message addressed to someone not directly in range is passed on by other AirLink devices that are connected at the time.
  • Retrying. A message that has not been confirmed is offered again to every device that connects.
  • Finding. Nearby Bluetooth devices with a live signal reading, a distance range and a warmer or colder indicator. On iPhones with ultra-wideband, precision finding adds a direction arrow to another AirLink iPhone.

Platforms

Requirement
MacmacOS 14 or later
iPhone and iPadiOS 18 or later
Command lineairlink, shipped inside the Mac app bundle. It runs the finder, not the messaging

The shared engine, AirLinkCore, is one Swift package compiled unchanged into the Mac app, the iPhone and iPad app and the command-line tool.

How it fits together

Chat and calls (ChatModel, CallModel)
        |
Mesh node: seal, route, retry, receipts (MeshNode)
        |
Flooding router with hop limit and duplicate table (FloodRouter)
        |
Composite transport
   |                         |
Bluetooth LE (GATT)     Wi-Fi (Bonjour, TCP, peer-to-peer)

Call audio: Opus frames, sealed per frame, sent over the mesh
and a direct UDP path at the same time until the direct path proves itself.

Key figures

FigureValue
Packet header41 bytes
Largest packet payload8,192 bytes
Hop limit8, 6 or 5, set by how many devices are in range
Message encryptionHPKE (RFC 9180): X25519, HKDF-SHA256, ChaCha20-Poly1305
Sender signatureEd25519, inside the ciphertext
Call encryptionEphemeral X25519 per call, HKDF-SHA256, one ChaCha20-Poly1305 key per direction
Voice codecOpus, 24 kHz mono, 20 ms frames, 24 kbit/s
Voice frame on the mesh121 bytes, 48.4 kbit/s at 50 frames per second
Measured message latency, one hop34 ms median, 129 ms 90th percentile
Tests188, plus one opt-in benchmark

The performance page gives the conditions behind every measured figure.