The feature set

A full JTTY station,
rebuilt for Android.

Every part of the operating loop — copy, tune, send, log — in a fast Jetpack Compose UI on FT8AF's hardened radio stack, with a codec written for this app from the JTTY design notes. Here's what's inside.

JTTY · 20m · 14.090 MHzLive
UTC        FREQ  S/N  MESSAGE
14:22:48  1512  -9  CQ W1AW CQ
14:23:04  1500  -3  CQ K1ABC CQ
14:23:09    TX       K1ABC K1AF
14:23:12  1500  -2  K1AF 599 001
14:23:16    TX       K1ABC 599 017
14:23:20  1500  -4  K1AF TU
14:23:23    TX       TU K1AF CQ▮
300–2700 Hz searchsubtract & re-decode● 6 open messages
01 · Receive

Live print of the whole passband

The receiver walks the entire 300–2700 Hz passband, not just your RX frequency, so every JTTY station on the band scrolls up as it decodes — time, audio frequency, S/N, text. Accepted frames are re-encoded and subtracted from the audio so weaker stations underneath print too. Multi-frame messages chain into one line; a dropped frame shows as ....

  • Whole-passband search, 300–2700 Hz, with subtraction
  • Time · frequency · S/N · text, newest at the bottom
  • Echo your own TX in the print, teleprinter-style
SendTX
TRANSMITTING · FRAME 2 OF 3
K1ABC TNX FOR THE NEW ONE 73▮
Atoms
CALL + TEXT5 ×2
Frames
3 · 5.7 s
PTT
CAT
02 · Transmit

Keyboard TX, no clock, no slot

JTTY is asynchronous — there is no UTC slot to wait for. Type up to 80 characters; the hint under the box shows how many 1.888 s frames it packs into and how long it will take. Press Send and JTTYAF keys PTT, settles, plays the whole continuous-phase GFSK buffer with the 13-symbol sync at the head of every frame, and drops PTT. Stop aborts cleanly.

  • Up to 80 characters, packed into the fewest frames
  • Live hint: 2 frame(s) · 3.8 s
  • PTT via CAT, RTS or DTR; Stop drops the carrier cleanly
F-keys · long-press to editRTTY Roundup
F1CQ %M CQrun · call CQ
F2%H %Eexchange
F3TU %M CQrun · thank + next
F4%MS&P · my call
F5%H TUconfirm
F6%H AGN?repeat?
F7NR?number?
F8TU NOW %Mmoving on
03 · Operating

F1–F8 macros & contest profiles

Eight one-tap keys drive the whole exchange. %M expands to your call, %H to the DX call you tapped in the print, %E to 599 plus the running serial. The defaults are the one-frame JTTY atoms, so a run QSO is three frames each way. Long-press any key to edit it.

  • Profiles: General · RTTY Roundup · Field Day
  • 599 001 packs into a single frame under Roundup
  • Running serial, bumped on every Log QSO
Waterfall · 20mLive
3008001300180023002700
RX/TX 1500 Hztap to retune● 9 signals
04 · Spectrum

A waterfall that knows the mode

JTTY signals are narrow four-lane ribbons, about 127 Hz wide, and the waterfall is scaled to show a crowded band of them. The marker is your RX/TX offset — the lowest of the four tones. Tap any ribbon and JTTYAF retunes the offset to it, so answering a CQ is one tap on the waterfall and one on an F-key.

  • RX/TX offset marker on the lowest tone
  • Tap a signal to retune the offset
  • Band picker with the preliminary JTTY dials
USB CAT + AudioConnected
JTTYAFAndroid
Your rigIC-7300 · FT-891 · IC-705
Mode
DATA-USB
Dial
14.090
PTT
CAT
05 · Hardware

USB CAT radio control

Plug your rig straight into your phone with a single USB-C cable. JTTYAF inherits FT8AF's cable stack: CAT frequency and PTT control, USB audio, Bluetooth and network rigs, and a long list of radios — Icom, Yaesu, Kenwood, Elecraft, Xiegu, FlexRadio, Guohe, truSDX and anything Hamlib drives.

  • USB, Bluetooth and network CAT; USB audio
  • Per-band TX level, tune carrier, ALC auto-volume
  • SWR protection and a rig-model picker
Logbook · MODE=JTTYSynced
QRZ
K1ABC FN42
Massachusetts · 20m · JTTY · #017
14:23
599 / 599
Cloud
DL7VEE JO62
Germany · 20m · JTTY · #016
14:11
599 / 599
WRL
JA3YBK PM74
Japan · 15m · JTTY · #015
13:45
599 / 599
06 · Logging

Log in one tap, upload everywhere

Tap any received line to make that station the DX call. When the exchange is done, tap Log QSO: the contact is written with MODE=JTTY, the serial bumps, and the record flies up to whichever services you've configured — Cloudlog, Wavelog, QRZ Logbook, World Radio League.

  • ADIF export; stats and award tracking
  • Cloudlog · Wavelog · QRZ · World Radio League
  • Tap a decode to set the DX call
jtty_lib · C11CI green
34-bit payload32 source + rsv + EOM→ CRC-12poly 0x80F→ TBCC ½ K=101167 / 1545→ Gray map46 × 4-ary→ 13 sync + 46 data1.888 s
07 · Engine

A clean-room codec you can read

The JTTY encoder and streaming receiver were written for JTTYAF in plain C from the published WSJT-X design documents — no GPL source consulted — and every bit-level convention was settled empirically against the official sample recording. Host tests cover the source-coding golden vectors, channel-coding round trips and modem sensitivity, and run in CI on every pull request.

  • MIT licence, written from the design notes
  • Decodes WSJT-X's official sample recording
  • Host tests + interop suite in CI on every PR

Read the full technical description of the mode →

And the unglamorous wins

Built on a
proven base.

JTTYAF inherits FT8AF's hardened USB CAT and audio stack, its Compose UI, and years of crash, leak and lifecycle fixes — so the plumbing is solid before you key up.

Background receive

A foreground service keeps JTTYAF listening and printing with the screen off.

jtty_all.txt

Everything received and sent is appended to a WSJT-X ALL.TXT-style history file.

Never clips the sync

The whole TX buffer plays, head first. The 13-symbol sync a receiver needs is always on the air.

USB audio at the right rate

Isochronous packets are sized from the sample rate, not the endpoint max, so every tone lands where it should.

Android 6.0 → 16

Runs from API 23 up and targets the current platform, with a dark and a light theme.

Battery mode

Turn off the wide search to decode only around your RX offset when you're portable.

Ready to put a JTTY station
in your pocket?