SimpleFT8

FT8 receiver, transmitter, logger · macOS & iOS

Support

FT8 is the most popular weak-signal digital mode in amateur radio. Two stations alternate transmitting and receiving in 15-second slots, exchanging compact messages over a narrow audio bandwidth. SimpleFT8 puts a real FT8 station in your pocket.

Getting Audio Into the App

SimpleFT8 needs the audio output of your radio (or SDR) reaching the app. Three common paths:

USB audio interface

A SignaLink, Digirig, RIM-Lite, or built-in USB audio on the radio. The cleanest option. Pick the device in Settings → Audio (macOS).

Headphone-to-mic cable (with attenuation)

Old-school but works. Pad down the level so you don't blow the mic input.

Acoustic coupling

Hold the radio speaker near the iPhone mic. Surprisingly good when the signal is strong.

macOS only — System Audio capture

In Settings → Audio set "Input source" to "System Audio". The app captures whatever your Mac is playing via ScreenCaptureKit — perfect for SDR software (SDR++, CubicSDR) or WebSDR pages in a browser. No virtual audio cable required.

Calling CQ
  1. Set your operator callsign and Maidenhead grid in Settings.
  2. Set your dial frequency (default 14.074 MHz on 20m, the global FT8 calling channel).
  3. Tap Call CQ. The app queues a "CQ <your call> <grid>" for the next slot of your TX parity and transmits.
  4. If someone replies, tap their decode row to accept — the QSO state machine handles the rest.
  5. After "73", tap Log QSO to save the contact.
Replying to a CQ
  1. Watch the RX list. Any decode that starts with "CQ" is someone calling.
  2. Tap the row. The app flips slot parity, queues "<them> <you> <your grid>", and enables TX.
  3. The state machine sends each subsequent step (R-XX, RR73, 73) automatically when their reply lands.
Auto Accept & Auto Reply

Both opt-in toggles in Settings → Operating:

Auto-accept incoming calls opt-in
When ON and you're CQing, every slot the app picks one of the people calling you (at random — fairer than first-come) and starts the QSO. After "73" you log and call CQ again.
Auto-reply to CQs (hunt & pounce) opt-in
When ON and you're CQing without an active QSO, the app scans for CQers in the current slot and replies to one. Priority: never-worked stations first; if all heard CQers are already in your log, picks at random from those.

Both default OFF — the app stays in full operator-driven mode until you opt in.

Slot Parity

FT8 stations alternate slots: one transmits on :00 and :30, the other on :15 and :45. SimpleFT8 auto-flips parity when you accept or reply to a call so you naturally land on the opposite parity.

If you're CQing alone for > 3–6 minutes and Randomly flip slot parity is on, the app will randomly flip parity to break a potential cold-start deadlock with another solo CQer on the wrong side.

Waterfall

The waterfall above the decode list shows audio activity in real time. Tap any point on the waterfall to set your TX audio frequency — 1500 Hz (the WSJT-X default) sits in the middle of the SSB passband; other frequencies dodge co-channel QRM.

QSO Log & ADIF Export

Every completed QSO lands in the Log tab. The export button up top writes the entire log as an ADIF file — drop it into LoTW, QRZ Logbook, or any logger that speaks ADIF (everything does).

PSK Reporter (opt-in)
Share decodes with PSK Reporter
Contribute to the global PSK Reporter propagation map. See who heard you in the last 15 minutes plotted on the SimpleFT8 map.

Decodes upload via our backend at simpleft8.strangeloop.nl, which rate-limits and forwards as IPFIX UDP to PSK Reporter on your behalf. This stops a misconfigured client from accidentally hammering the upstream service.

Off by default. Requires you set a contact email (PSK Reporter wants one for misbehaving-client outreach).

SimpleFT8 Presence Map (opt-in)
Show me on the SimpleFT8 online map
Ping our backend every 2–4 minutes with your callsign + grid. Other SimpleFT8 users see you as a cyan pin; you see them as cyan pins.

Off by default. Separate from PSK Reporter — you can enable either, both, or neither.

Map Tab

Maidenhead pins for every layer you've enabled:

amber — stations you decoded

green — stations who heard you (PSK Reporter, opt-in)

cyan — SimpleFT8 ops online right now (opt-in)

Below the map: stats (best SNR, furthest, unique grids) and a text list per layer.

FAQ

Do I need a ham license?

To transmit, yes. Receiving is unrestricted in most places. Check your local rules.

Will it interop with WSJT-X / JTDX?

Yes — bit-exact encode + WAV regression decode tests pass. Same FT8 messages, same audio frequencies.

I see −20 dB reports — is that bad?

No, that's normal. FT8 decodes down to roughly −24 dB.

My TX clock seems off.

SimpleFT8 syncs to NTP every 30 minutes. The Station card on the RX tab shows your offset.

Why is iOS audio so limited?

iOS doesn't expose ScreenCaptureKit, so live decode on iOS is mic-only. Use the macOS app if you want SDR-software capture.

How does the app handle my decoded callsign data?

All decode metadata stays on your device unless you opt into PSK Reporter or the presence map. Even then, only your call, your grid, and a per-install device identifier leave the device.

Requirements
iOS 16.0 or later · foreground only
macOS 13.0 or later · background OK
Microphone required
Screen Recording (macOS) optional · System Audio only
Location optional · one-shot grid auto-fill
Source Code & Privacy

No analytics, no ads, no third-party SDKs. The app is fully self-contained by default; every external feature is opt-in.

Full Privacy Policy →

github.com/jarombouts/SimpleFT8 →

Contact