Introduction
OD Link is native macOS software for sending and receiving audio over IP — straight between your Macs, peer-to-peer over UDP, never relayed through a server. A single Mac can hold several connections at once, each to a different Mac. Any Core Audio device — Dante Virtual Soundcard, for example, or any other — appears as an ordinary capture or playback device, so OD Link fits the rig you already run.
The window is organised into five tabs, in this order down the sidebar: General, Connections, Receive, Transmit, and License. This guide walks through each, then explains the things that aren’t obvious from the buttons: how the two connection methods differ, what the transmit modes do, and exactly how names, passwords, encryption, and UDP Match work.
Menus
OD Link lives in the menu bar as well as its window.
Status-bar menu (the OD Link glyph at the top-right of the screen):
- About — the About panel
- Settings (⌘,) — brings the main window forward
- Save Configuration / Restore Configuration — write or load your whole setup as a file
- Quit OD Link (⌘Q)
App menu bar mirrors this: the OD Link menu has About, Settings (⌘,), Save configuration (⌘S), Restore configuration from file (⌘O); the Window menu has Minimize, Zoom, and Bring All to Front.
Locking the interface
A lock control in the top-right of the window header puts OD Link into App Lock. Enter a PIN (and confirm it) and the interface freezes against changes — every edit is rejected with a beep — while audio keeps running. It’s made for live shows, where a stray bump shouldn’t change a setting.
The PIN is not saved — it lives only for that run. While locked, the window stays scrollable so you can still read meters and status, and the normal Quit (⌘Q) is blocked. To unlock, click the lock again and enter the PIN.
Forgot the PIN? Because it’s never stored, a fresh launch always starts unlocked. Since ⌘Q won’t work while locked, Force Quit OD Link instead (press Option-⌘-Esc, select OD Link, click Force Quit) and reopen it — it comes up unlocked. That does interrupt audio for the moment it takes to relaunch, which is the trade-off for a lock with no stored password.
System requirements & installation
- macOS 14 Sonoma or later
- Apple Silicon or Intel — the download is a universal build
- A network path between the Macs you link — a shared LAN, or the open internet with a reachable UDP port at each end (or UDP Match with a Pro or Performance license)
- Download the OD Link disk image (
.dmg) and open it. - Drag OD Link to your Applications folder, then eject the disk image.
- Open OD Link from Applications. On first launch, grant the microphone/audio and Local Network permissions when macOS asks — both are required for capturing audio and for the Macs to find each other.
One app, every tier. The same build runs in Demo and in every paid tier. A license simply unlocks channels and features — there is no separate “pro” download.
Activating your license
When you buy a license, your key arrives by email from support@odlink.app. The key looks like ODLK-PRO2-XXXX-XXXX-XXXX — the letters and digit after ODLK- encode the tier and the number of Macs it covers (one or two). A two-Mac license is a single key you activate on both Macs, not two separate licenses.
- Open OD Link and go to the License tab.
- Paste your key.
- Click
Activate.
The License tab shows your License Key field with Activate and Deactivate buttons, a Status line (a green dot with your tier and the seats in use — e.g. Performance · 2 of 2 — or a red NOT LICENSED with a pulsing DEMO MODE while unlicensed), and — once active — Licensed to with your email and a Transfer button.
Demo vs licensed
Without a key, OD Link runs in Demo: the full app with 32 channels, with a periodic audio reminder that it’s unlicensed. There is no time limit and no signup.
Activating a Studio, Pro, or Performance license removes the marker and unlocks the channels and features of that tier.
Move a license to another Mac
A license can move between your own Macs as often as you like. Both steps below need an internet connection — they reach the license server.
- On the Mac you’re leaving, open License → Deactivate. This frees the seat.
- On the new Mac, open License, paste the same key, and click
Activate.
Self-service deactivation works forever — it’s a feature, not a support request. If a Mac dies before you can deactivate it, email support@odlink.app and we’ll free the seat for you — up to three times over the life of your license. The license itself never expires.
Change the owner email
To register the license to a different email address, click Transfer in the License tab and enter the new email. A confirmation link is sent to your current email; click it to confirm. The key itself does not change. You can change the owner up to three times over the life of a key. If you ever need more, you’re welcome to purchase a new license.
About latency
End-to-end latency comes from three places: the audio hardware buffers on each Mac, the outgoing packet latency you choose per connection (how much audio is sent per packet — 2.5 / 5 / 10 / 20 ms), and the per-connection receive Audio Buffer that absorbs network timing variation — set to Auto, or a fixed value from 5 ms to 60 s (see Receive buffer for how Auto sizes itself and what the Global option does).
You trade latency for stability. A small packet latency and a small receive buffer give the lowest delay but tolerate the least network jitter; larger values are rock-solid but add delay. Start conservative, then tighten once the link is stable.
| Setting | Lower value | Higher value |
|---|---|---|
| Outgoing packet latency | 2.5 ms — lowest delay, needs a clean network | 20 ms — most tolerant |
| Receive Buffer | Auto, or as low as 5 ms on a clean connection | A larger fixed value — often just tens of ms (60 s is the ceiling) — more tolerant of jitter |
Getting started
Grant audio & Local Network permission
If you denied a permission at first launch, enable it in System Settings → Privacy & Security: turn on Microphone and Local Network for OD Link. Without Local Network permission the Macs cannot discover or reach each other.
Choose your devices
- In the Transmit tab, pick the Audio Device — the input you want to send (any Core Audio input — an audio interface, Dante Virtual Soundcard, the built-in mic, and so on).
- In the Receive tab, pick the Audio Device — the output where received audio should play.
Sample rate
Each of Transmit and Receive has a Sample Rate picker: 44.1, 48, or 96 kHz. 48 kHz is a safe default, and both Macs should agree. OD Link runs the device at the chosen rate when it can; if the device only supports another rate, it resamples at the edge with a high-quality converter — audio still works, quality is bounded by the device.
Connecting your Macs
Install the same OD Link build on each Mac you want to link, then work through the tabs.
General Settings
This tab is grouped into four sections.
Network Identity & Transport holds the settings that matter for a link:
- Local OD Link Name — this Mac’s name. The other Mac enters this exact value to identify you.
- UDP Port — the default is
32102; use the same port on each Mac.Check Port Statustests whether your port is reachable from the internet. - Network Interface — Any receives on every active interface and sends over the route macOS chooses; pick a specific interface to keep OD Link on one chosen network — for example a separate wired link reserved for it.
Application Settings covers startup and housekeeping: Start Automatically at Login; Seconds to Delay Connection Startup — how long it waits before auto-connecting at launch (Off, or 5–60 s in 5-second steps), so the network and audio devices settle first (most useful with Start Automatically at Login, when OD Link comes up at boot); Show in Dock; Auto Save Configuration (write your setup to a chosen folder on an interval); and a Scheduled Restart (relaunch the app at a set day and time — handy for always-on installs).
Receive Audio Runtime has Receive Audio Device Exclusive Access (take exclusive control of the playback device while OD Link runs) and Global Receive Latency Adjustment (one aligned receive buffer for all connections — see Fine-tuning).
Diagnostics has one control — Log Files → Export, which writes the full session log plus a config snapshot, connection metrics, and audio counters to a single text file. OD Link keeps no log on disk otherwise; this export is the only file it writes.
The Connections table
Each row in Connections is one link to another Mac. Use the + and − buttons above the list to add a connection or remove the selected one. The columns (drag a header to reorder, or its edge to resize):
| Column | What it is |
|---|---|
| Status | Link-health dot (see Connection status & meters) |
| Enabled | Master switch for the connection — on to start the link, off to stop it (a row’s fields stay editable either way) |
| Encryption | Encrypt this connection with AES-256-GCM (set it the same at both ends of the connection) |
| UDP Match | Connect by name over the internet instead of a typed IP (Pro / Performance) |
| OD Link Name | The other Mac’s Local OD Link Name (required for UDP Match; optional for a direct link) |
| Password | Optional shared secret (see Names, passwords & encryption) |
| OD Link IP | The other Mac’s IP for a direct link (ignored while UDP Match is on, kept as a fallback) |
| Port | The other Mac’s UDP port — blank = default 32102 |
| Encoder Bitrate | Opus bitrate for the Audio and Voice modes (the PCM modes ignore it) |
| Tx (Mbps) / Rx (Mbps) | Live outgoing / incoming throughput |
| Jitter (ms) | Packet-arrival variation — higher when packets arrive unevenly (network congestion or a wireless link) |
| OD Link Ping (ms) | Round-trip time between the two OD Link apps — OD Link’s own probe to the other Mac and back |
| Audio Latency (ms) | End-to-end audio delay (capture + outgoing packet + network + receive buffer + playback output) |
| % Lost | Recent packet loss (lost ÷ expected) — clears when the link re-syncs or the receive buffer re-sizes |
Both Macs fill in OD Link IP — each row points at the other Mac. (A blank IP reads “OD Link IP is required” and the connection won’t start.)
Keep both sides in sync. If you change a connection’s name, password, encryption, or port on one Mac, make the same change on the other — these have to agree on both sides or the link won’t re-establish. (An IP change is the exception: a running link follows the other Mac to its new address on its own.)
Transmit & Receive
The Transmit and Receive tabs are laid out the same way — three panels, left to right:
- Connection — the list of your connections; click one to choose which link you’re patching. Each row carries a per-direction toggle: Transmit (this connection’s outgoing audio on or off) in the Transmit tab, Receive (its incoming audio) in the Receive tab — so a connection can send, receive, or both (the master Enabled switch on the Connections tab still has to be on for it to run). Inline on each row are that connection’s Mode and Latency (Transmit) or its receive Buffer (Receive).
- Channels — every channel with its number, a live level meter, and an editable name (the labels you set in Transmit travel with the stream).
Name from Sourceimports the channel names the sender is transmitting and writes them onto your channels in one click — a manual import you trigger, not a live sync. - The routing matrix and its toolbar: Audio Device (capture device in Transmit, playback device in Receive), Sample Rate (44.1 / 48 / 96 kHz),
Auto Patch 1:1(map channels straight across, 1→1, 2→2, …), andClear Patch(remove every patch for the selected connection).
Use Auto Patch 1:1 to get going, then adjust individual crosspoints in the matrix as needed. (The Connection panel collapses with the ‹ chevron if you want more room for the matrix.)
The routing matrix & volume
Each tab shows a routing matrix: channels down one axis, outputs across the other. Click a crosspoint to patch it; Auto Patch 1:1 fills the diagonal (1→1, 2→2, …) and Clear Patch empties it.
Every crosspoint also carries a volume. Right-click a cell to open a level slider that runs from −24 dB to 0 dB (default 0 dB). In the Receive matrix you can patch several incoming channels into the same output — they are mixed together, each at its own level — which is how you fold a multichannel stream down to a stereo monitor, for example.
Reading the cells. A crosspoint you’ve patched in this connection shows a blue dot, and the brighter the dot the higher its level — a quiet crosspoint is dimmer, 0 dB is brightest. An amber dot marks a crosspoint you have not patched here but that another connection on this Mac is already using — a heads-up so that when one Mac feeds several connections you can see at a glance which inputs (Transmit) or outputs (Receive) are already routed elsewhere, and avoid sending the same channel two ways by mistake. Hovering a cell outlines it in blue and tints its row and column so you can aim accurately.
Alongside the matrix, a channel panel lists each channel with its number, an editable label (or use Name from Source to adopt the name the sender transmitted), and a live level meter. The labels you set in the Transmit tab travel with the stream, so the other Mac sees your channel names.
Multiple connections & capacity
Each row in Connections is an independent link to another Mac, and you can add as many as you need — OD Link sets no fixed limit. One Mac can send to and receive from several others at once, each connection with its own mode, latency, and settings — though they all share one capture device and one playback device.
What you can actually run is bounded by your network bandwidth and your Mac’s CPU, not by the app. As a rough guide, per audio channel in one direction:
- Opus (Audio / Voice): 128 kbps per channel at the default Encoder Bitrate — less if you lower it
- PCM 16 at 48 kHz: ~0.8 Mbps · PCM 24: ~1.2 Mbps (double at 96 kHz)
These are the encoded data rates; the wire adds packet overhead, and the tightest 2.5 ms latency roughly doubles an Opus stream (its redundancy sends each packet twice).
So a gigabit LAN comfortably carries hundreds of channels across many connections (there your Mac’s CPU is the practical limit, not bandwidth), while a typical ~25 Mbps internet uplink fits roughly one 128-channel Opus link — or several smaller ones. Each connection can carry up to your tier’s channel count (32 / 64 / 128).
Names, passwords & encryption
These three are easy to confuse, so here is exactly what each does.
- Local OD Link Name (General Settings) is your Mac’s identity. OD Link Name (a Connections row) is the other Mac’s name. They are how each side recognises the other — and how UDP Match pairs you.
- Password is an optional shared secret you type identically on both Macs (it is not case-sensitive). It does three jobs: it authenticates the connection handshake, it pairs the right two Macs in UDP Match, and — if Encryption is on and a password is set — it is the basis for the encryption key.
- Encryption is a per-connection toggle. When it’s on, audio is sealed with AES-256-GCM (hardware-accelerated on every supported Mac). The key is derived from your shared password (HKDF-SHA256); if encryption is on but no password is set, the two Macs perform an ephemeral Curve25519 key exchange instead. Both sides must set Encryption the same way.
Whether or not you encrypt, audio is always direct peer-to-peer — it never passes through a third party.
Transmit modes & quality
In the Transmit tab’s Connection list, each connection has its own Mode and outgoing Latency; the matching Encoder Bitrate for the Opus modes is set in the Connections table. The Mode sets how that connection’s audio is encoded — there are four:
| Mode | Encoding | Use it for |
|---|---|---|
| Audio | Opus (music/program) | General program material at low bandwidth |
| Voice | Opus VOIP + in-band error correction, fixed 20 ms | Speech and comms over lossy links |
| PCM 16 | Uncompressed 16-bit | Full quality on a capable network |
| PCM 24 | Uncompressed 24-bit | Highest-resolution uncompressed |
Audio and Voice use Opus, so the Encoder Bitrate column applies to them (the default is 128 kbps per channel). The PCM modes are uncompressed and ignore bitrate.
Voice also enables DTX (discontinuous transmission) — during pauses in speech it drops to occasional comfort-noise updates, cutting idle bandwidth on streams with silences.
Mode and outgoing latency interact: switching to Voice moves the connection to 20 ms; choosing a very low latency may move a mode that can’t sustain it. OD Link tells you when it makes such an automatic adjustment.
How UDP Match works
With a Pro or Performance license, you can switch any connection to UDP Match — a per-connection option that links it to its peer over the internet by name, so you never have to exchange IP addresses. It is a discovery service only — your audio still travels directly between the two Macs and is never relayed.
Here’s the flow when you turn UDP Match on for a connection:
- OD Link ignores the row’s OD Link IP / Port (but keeps them as a direct fallback) and uses your Local OD Link Name plus the row’s OD Link Name instead.
- Each Mac sends a STUN request from its own OD Link UDP socket to a public STUN server to learn its public, NAT-mapped endpoint.
- Each Mac registers with the OD Link rendezvous service: its name, the peer name it’s looking for, a hash of the shared password, and its public endpoint.
- The service pairs two registrations whose names cross (your peer name equals their local name and vice versa) and whose password hashes match.
- Once paired, each side learns the other’s public endpoint and a synchronised moment to begin, and the two Macs hole-punch directly to each other. Audio then flows peer-to-peer — the service only made the introduction; no audio ever passes through it.
If both Macs are behind strict (symmetric) NATs that can’t be punched, fall back to a direct IP connection with port forwarding, or put the two on a VPN — OD Link never routes your audio through a relay.
A few more things worth knowing:
- Password and encryption are optional. Pairing is by name. A shared password is an optional safeguard — set the same one on both Macs and it must match to pair (handy if two setups ever share a name), or leave it blank on both and they pair by name alone. Encryption is a separate per-connection toggle, independent of UDP Match — run it with or without.
- If an address changes mid-session, the link repairs itself. A public endpoint is only needed at pairing time; once paired, audio is peer-to-peer. If a Mac’s address later changes — moving between Wi-Fi and Ethernet, waking from sleep, a new DHCP lease — OD Link follows the peer to its new address and re-discovers and re-registers its own when it has to, so the connection re-establishes on its own. The receive buffer is preserved, so playback rides through the brief reconnect.
- You don’t have to connect at the same instant. The rendezvous holds each registration for about 90 seconds and OD Link refreshes it about once a second while the connection is enabled, so the two Macs pair as soon as both are online — usually a second or two after the second one appears.
Connection status & meters
The status dot in Connections reports link health only:
| Color | Meaning |
|---|---|
| Gray | No connection yet |
| Amber | Connecting, or a problem — name, password, or encryption mismatch, or packet loss |
| Green | Connected |
| Red | Disconnected — was connected, then stopped responding (no signal from the peer for ~60 s: its app quit or the network dropped) |
Hover a row’s dot for detail. Alongside it, each row shows live Tx (Mbps) / Rx (Mbps) throughput, OD Link Ping (ms) (round-trip between the two OD Link apps), Audio Latency (ms) (end-to-end delay), Jitter (ms), and % Lost — so you can see exactly how the link is performing.
Fine-tuning
Receive buffer
Each Receive row has a Buffer that absorbs network jitter and slow sample-clock drift between the two Macs.
- Auto — OD Link sizes the buffer to the measured network jitter. It starts around 40 ms and tracks roughly 1.5× the observed jitter, up to a 5-second backstop, so it tightens on a clean link and grows on a rough one without you touching it.
- Fixed — pick any value from 5 ms to 60 s. Use a small value on a clean connection for minimal delay; raise it if you hear dropouts.
- Global Receive Latency Adjustment (General Settings → Receive Audio Runtime) — when on, every receive-enabled connection plays at one shared buffer, aligned to the largest of their individual values, so all incoming streams share the same latency. You can still raise or lower any connection’s buffer, or set it to Auto — the shared value re-aligns on the fly.
Loss recovery & redundancy
OD Link layers several defences against packet loss — which ones apply depends on the codec and latency you choose:
- Forward error correction (Opus) — both Opus modes — Audio at 10 ms and 20 ms, and Voice (fixed 20 ms) — carry in-band FEC: a recoverable copy of the previous frame rides inside the next packet, so an isolated drop is rebuilt with no extra bandwidth. (At 2.5 / 5 ms Audio runs CELT-only, where FEC can’t operate — recovery there is the redundancy and retransmission below.) Uncompressed PCM 16/24 carries none.
- Packet redundancy (Audio mode, Opus at 2.5 ms) — at the tightest latency the codec runs CELT-only and FEC can’t operate, so OD Link emits each datagram twice, back-to-back. (Only Audio mode reaches 2.5 ms — Voice is fixed at 20 ms, where in-band FEC covers it instead.) A single dropped copy still gets through, and a 5% random loss drops to roughly 0.25%. The two copies are simultaneous, so this guards independent loss, not a long burst; the receiver de-duplicates them.
- Deep redundancy — DRED (Voice only) — Voice runs Opus’s speech (VoIP) mode at a fixed 20 ms, and that speech encoding is what lets it add DRED: a neural codec that rebuilds up to about half a second of lost speech from redundancy folded into later packets — covering gaps far deeper than FEC can. It’s speech-trained, so Audio mode leaves it off (on music it would sound worse than plain concealment).
- Retransmission — when the latency budget allows, the receiver re-requests missing packets so they arrive before playout.
- The receive buffer above absorbs whatever timing variation is left.
Use a wired connection. Stable audio-over-IP wants Ethernet — on the LAN, or to the router for an internet link — for steady latency and low jitter. Wi-Fi and cellular can work, but treat them as a last resort: their jitter and loss swing moment to moment with interference, congestion, roaming, and carrier load, and the recovery above can absorb a lot but can’t make a radio link behave like a cable. The quality of a wireless or cellular link is yours to manage, not something the app can guarantee.
If you can’t connect
Symptoms first, fixes second.
Status stays gray on both Macs
- Confirm UDP Port is the same on both Macs (default
32102). - Confirm Network Interface is the connection you intend.
- Make sure each Mac’s row has the other Mac’s OD Link IP — both sides are required.
- Check the macOS firewall (System Settings → Network → Firewall → allow OD Link), or disable it briefly to confirm it’s the cause.
- Confirm Local Network permission is granted for OD Link.
- Using UDP Match? It pairs by name, not IP — step 3 doesn’t apply. Instead confirm the names cross (your OD Link Name equals the peer’s Local OD Link Name, both ways). If you set a Password, it must be identical on both Macs.
Status is orange
OD Link sees a connection but something doesn’t match:
- Endpoint differs — the address the other Mac reaches you from doesn’t match the OD Link IP / Port you entered.
- Password mismatch — make Password identical on both Macs.
- Name mismatch — the OD Link Name in your row must equal the other Mac’s Local OD Link Name.
- Encryption mismatch — both Macs must set Encryption the same way (both on or both off).
Connected but no sound
- In Transmit, patch the matrix — press
Auto Patch 1:1, or click crosspoints by hand to route specific channels. - In Receive, patch the matrix — press
Auto Patch 1:1, or click crosspoints by hand. - Confirm the Audio Device is selected on both tabs and the system output isn’t muted.
- Check the connection’s Enabled toggle is on — and the per-direction Transmit / Receive toggle for the way you want audio to flow. Tx / Rx should be above zero.
Choppy audio, clicks, or dropouts
- Raise the connection’s Buffer in the Receive list — set it to Auto or a larger value.
- Check % Lost — anything above 1% will be audible.
- Try a higher outgoing latency (e.g., 20 ms) on weaker networks.
Sample rates differ
You don’t have to match sample rates by hand. When you pick a rate (or a stream arrives), OD Link sets your audio device to that rate automatically. When it can’t change the device’s rate — a Dante Virtual Soundcard follows the Dante network clock; some USB or Bluetooth audio devices are locked to a single rate — OD Link leaves the device as-is and resamples at the edge to bridge the gap. Either way, audio keeps working. For the best quality, run both Macs and their devices at the same rate (48 kHz is a safe default).
Connecting over the internet
For a direct IP link each Mac must reach the other, so both Macs need a reachable UDP port — forward UDP 32102 (or your custom port) on each router, and verify each with Check Port Status in General Settings.
With a Pro or Performance license, UDP Match is the easier path: it discovers each Mac’s public endpoint and hole-punches through most home and office NATs, so no port forwarding is needed. Only strict (symmetric) NATs can’t be punched — there, fall back to a direct IP link with forwarding, or put both Macs on a VPN. Audio stays direct either way.
Audio devices: Core Audio, Dante, AirPlay & Bluetooth
OD Link works with any Core Audio device — whatever you select in the Transmit (input) and Receive (output) Audio Device pickers.
- Dante Virtual Soundcard appears like any other Core Audio device. OD Link doesn’t speak the Dante protocol directly — DVS bridges Dante to Core Audio and OD Link simply sees the resulting device. Start DVS first; if it doesn’t show up, relaunch OD Link after it’s running. Keep sample rates matched. (OD Link is not affiliated with Audinate; Dante is their trademark.)
- AirPlay receivers are not Core Audio devices, so they can’t be selected directly. Instead, choose System Default Output as the Receive device and pick your AirPlay speaker in macOS Sound settings — OD Link’s received audio follows the system output to it.
- Bluetooth speakers and microphones appear in the pickers normally and refresh live as they connect.
Getting help
Still stuck? Email support@odlink.app — replying to your license email reaches the same place. Describing the status-dot color and what you see in the Connections meters gets you a faster answer, and Save Configuration (from the menu) lets you send your exact setup.
↑ Back to top