JS8Call Guide: Keyboard Chat and Messaging on HF

FT8 made weak-signal contacts routine, but it was designed for one fast exchange: callsign, grid, report, goodbye. JS8Call takes the same robust modulation and adds what FT8 deliberately leaves out: free-form messages, conversations that can run as long as you like, directed messages to a specific station, and a simple network layer in which stations announce themselves and relay messages for each other. It is popular with portable operators, emergency communication groups and anyone who enjoys a slow, thoughtful keyboard chat on a noisy band.
This guide explains how JS8Call works, what the speeds mean, where operators usually call, how heartbeats and relays behave and what to check before your first transmission. The details come from the official user guide and project pages, which are linked below.
What JS8Call and the JS8 Mode Are
The names are easy to confuse, so it helps to separate them. According to the JS8Call user guide, the application is JS8Call, the mode is JS8, and JS8 is a custom 8-FSK modulation designed by Jordan Sherer. On top of that radio transport sits a directed calling protocol for free-form and directed messages. In the guide’s own words, JS8 plus directed calling equals JS8Call.
The program is a derivative of WSJT-X, restructured for message passing. It is not supported or endorsed by the WSJT-X developers, and the two programs cannot decode each other’s signals. The project history in the source repository explains that the idea began in 2017 as an experiment in making long-form QSOs on top of the FT8 protocol, and the first public releases followed in 2018. Faster speeds arrived in version 2.0 and a slower, more sensitive speed in 2.1. After a long pause, development resumed in 2025 under the JS8Call-improved organisation, and the project downloads page lists version 3.0.3 as current, with builds for Windows, macOS and Linux and pre-release builds for Android.
The official site calls the software open source, and it is licensed under the GPLv3. If you want a feel for the community, the developers also run an email list and a discussion forum on GitHub.
How JS8 Differs From FT8
FT8 uses strictly formatted messages that fit into a single fixed slot, which is why a WSJT-X contact is so short. JS8Call breaks a long message into several back-to-back frames, with a few seconds of silence between them. The user guide states that the extended character set covers printable uppercase ASCII and Latin-1 letters, so normal FT8 character restrictions do not apply. Because the message encoding is variable, common characters take less space and unusual ones take longer, and the send button shows how long your complete message will take to transmit.
Three kinds of message exist. Standard messages are plain free text, and other stations see them only if their receive offset is within about 10 Hz of your transmit offset, much like PSK or RTTY. Undirected messages such as CQ are heard by anyone. Directed messages automatically start with your callsign and are addressed to a named station, and they can be received anywhere in the same passband without matching offsets. After the last frame, JS8Call prints an end-of-transmission marker so the other operator knows it is safe to reply.
The result feels closer to a chat room than to an FT8 exchange. A typical conversation in the guide has stations trade signal reports, rig and antenna details and comments, and then continue for as long as they like.
The Five JS8 Speeds
JS8 transmits in fixed periods, and the period determines bandwidth, typing speed and sensitivity. Slower speeds dig deeper into the noise, faster ones move text more quickly when the band is good. The guide lists five.
| Speed | Period (s) | Bandwidth (Hz) | Approx. speed (wpm) | Sensitivity (dB) |
|---|---|---|---|---|
| Slow | 30 | 25 | 8 | -28 |
| Normal | 15 | 50 | 16 | -24 |
| Fast | 10 | 80 | 24 | -20 |
| JS8 40 (formerly Turbo) | 6 | 160 | 40 | -18 |
| JS8 60 | 4 | 250 | 60 | -16 |
Normal is where most activity happens. The guide recommends starting there and moving to a faster speed only if conditions support it. JS8 40 and JS8 60 are designed for quick keyboard-to-keyboard contacts in good conditions. They are not suitable for sending stored messages and they cannot take part in the heartbeat network. JS8 60 is described as experimental and more demanding on the processor.
Unless your computer is very slow, the guide suggests turning on the MULTI option in the mode menu so that the decoder listens to all speeds at once. Otherwise, if a station cannot reach you at Normal and drops to Slow, you will never see its reply.
Where Operators Call: Suggested Frequencies
JS8Call does not have a rigid band plan. The user guide says that most operators are found a few kilohertz above the standard FT8 frequencies and stresses that you should avoid the main FT8 frequencies, because the two modes are not compatible and it confuses WSJT-X users. Its suggested calling frequencies include 1.842 MHz on 160 m, 3.578 MHz on 80 m, 7.078 MHz on 40 m, 10.130 MHz on 30 m, 14.078 MHz on 20 m, 18.104 MHz on 17 m, 21.078 MHz on 15 m, 24.922 MHz on 12 m, 28.078 MHz on 10 m, 50.318 MHz on 6 m and 144.178 MHz on 2 m.
These are suggestions only, and you are free to type any frequency into the band box or edit the list in the settings. The guide also notes that JS8Call blocks transmitting in the lowest 500 Hz of the passband, which leaves room for narrow JT9 signals. As always, check your national rules and the band plan of your IARU region before choosing a frequency. Our overview of the IARU band plan regions explains why a frequency that is fine in one region can sit inside another service in a different one.
Setting Up for the First Time
Most of the setup is the same as for any sound-card mode, and the guide covers the points that cause the most trouble.
- Clock accuracy. The decoder works inside a short window, and a clock that is more than about two seconds from UTC can cause messages not to decode. Use an internet, NTP or GPS time source. JS8Call also offers a manual drift tool for portable use. See our guide to FT8 time synchronisation, which applies equally here.
- Upper sideband. The radio must be in USB on every band. In LSB the signals will be reversed and will not decode.
- Audio levels. Set the output level high enough to drive the transmitter without engaging the ALC, because a distorted signal is hard for others to decode. On receive, switch off the AGC or set it to fast, and aim for roughly 30 to 40 dB on the in-program signal meter.
- Duty cycle. JS8 is a constant-envelope, high-duty mode. The guide gives a duty cycle of about 84 percent on the Normal speed and advises limiting yourself to no more than half of your radio’s rated power when in doubt, to protect the final amplifier.
- PTT and CAT. Rig control works through the usual interfaces, and there is an option to run an external command for PTT, which is handy on a Raspberry Pi where GPIO pins key the radio.
If you are new to connecting a radio to software, the article on rig control with Hamlib covers the common problems with serial ports, baud rates and PTT lines.
Heartbeats, ACKs and the Network Layer
The feature that sets JS8Call apart is its heartbeat system. When you enable heartbeat networking from the mode menu, your station transmits an automatic announcement with its grid square to the @HB group at a chosen interval. Heartbeats are sent on a random unused offset between 500 and 1000 Hz to reduce interference. With AUTO replies and heartbeat acknowledgements switched on, your station answers heartbeats it hears with a lightweight ACK.
The guide is careful to say what this is for. A heartbeat is not a propagation report and it is not a way to start a chat. Its purpose is to fill your heard list so you know who is probably reachable. Think of heartbeats and acknowledgements as a way to draw the topology of the network, and of relays as the way to send a message through it, a little like a text message.
Because automatic transmitters can flood a band, the program includes safeguards. Newer versions disable automatic acknowledgements when message traffic is detected in your passband, and an optional setting stops acknowledging any station that heartbeats more often than every 55 minutes. Be a good neighbour and keep your own interval at the recommended value.
Directed Commands, Groups and Relays
If a station has AUTO enabled, it answers a set of query commands without human input. You send them by putting the callsign first. SNR? asks for a signal report, GRID? for the locator, INFO? for station information, STATUS? for the status message and HEARING? for the list of stations it hears. The commands MSG and MSG TO: store a message on the other station, and QUERY MSGS retrieves messages waiting for you.
Relaying is written with the greater-than sign. A message addressed as the first station, then the second, then the text, is passed along the chain, and the destination returns an acknowledgement along the same path. This is how a low-power station with a poor antenna can pass a message through a better-placed neighbour.
Group callsigns begin with an at sign. @ALLCALL reaches anyone who can hear you. Built-in groups such as @DX/EU, @REGION/1, @EMCOMM, @ARES, @SKYWARN, @POTA and @SOTA are encoded efficiently, while any custom group costs an extra frame and only reaches stations that have added the group to their configuration. The special @APRSIS group lets a station that is connected to the internet forward your position or a raw packet to the APRS network. Our introduction to APRS, iGates and digipeaters explains what happens on the other end.
Logging and Spotting
JS8Call keeps its own log and writes an ADIF file, which you can import into your main logging program. By default it records the mode as MFSK with the JS8 submode, and an option in the logging settings changes this to DATA if your logger or award program prefers it. Because the contact is free text, you may need to complete some fields by hand.
When spotting is enabled, the program reports callsigns it hears to PSK Reporter under the JS8Call mode, and a six-character or longer grid gives the most useful position. That makes it easy to see how far your signal reached after a test. For background on the reporting service itself, see our article on PSK Reporter.
Tools and Training
The project site collects a small number of companion tools. JS8 Spotter helps sort band activity, send APRS messages, display stations on an offline map and run automated responses with simple forms. CommStat-Improved is a companion program for exchanging standardised status reports over the radio and mapping the stations that submitted them, which is aimed at group situational awareness. There is also a command-line client for the QRZ.com XML service that needs a subscription. For learning, the training page links to introductory videos, one of which covers the group messaging inbox. The videos were made on version 2.2.0, but the site states that the instructions are the same for later versions.
Common Mistakes
- Calling on the FT8 frequency. The modes are not compatible and the other users will not thank you.
- Running a wrong clock. Decodes fail quietly and you assume the band is dead.
- Using LSB. Check the sideband on every band change.
- Overdriving the audio. A flat-topped signal with ALC action is hard to decode and wastes power.
- Heartbeating too often. Use the default interval, particularly in a crowded passband.
- Expecting a quick exchange. A JS8 conversation is slow by design. Turn on typeahead, take a sip of coffee and let the frames go out.
The Bottom Line
JS8Call is a thoughtful tool for operators who want more than FT8’s four-line exchange. It keeps the weak-signal strength of 8-FSK, adds free-form messages, groups, stored messages and relays, and works with a modest radio and a compromised antenna. Set the clock, use upper sideband, keep the audio clean, call a few kilohertz away from the FT8 frequencies and let the heartbeat network show you who is out there. Read the user guide once before you transmit and the rest is a pleasant evening of keyboard conversation.
Frequently Asked Questions
Is JS8Call the same as FT8?
No. JS8 is a related 8-FSK mode, but JS8Call uses its own message encoding and a directed calling protocol. WSJT-X cannot decode JS8Call and JS8Call cannot decode FT8.
What frequency should I use for JS8Call on 20 meters?
The user guide suggests 14.078 MHz, about 4 kHz above the FT8 frequency. This is a suggestion, so check your national rules and the band plan, and avoid the main FT8 frequency.
Which JS8 speed should I start with?
Start with Normal, which uses a 15-second period and is the most active. Move to Slow for very weak signals or to Fast if the band is quiet and strong, and turn on MULTI so you can see all speeds.
What does the heartbeat do?
It announces your station and its grid to the network so that others can see who is likely to be reachable. It is not designed to report propagation or to start conversations.
Can I send a message to a station that is not online?
Yes, within limits. A station with AUTO enabled can store a message for you with the MSG TO command, and the recipient can retrieve it later with a query. Delivery depends on the stations involved being active.
Do I need a special radio?
No. Any HF transceiver that can pass audio from the computer in upper sideband will do, and the project says the software runs on Windows, macOS and Linux.