Chat, mail, files, and a live map of who hears whom — through a sound-card modem or a KISS TNC.
OpenJSQ 1.0 operator guide · FSQ · AX1200 · JG25
Describes the build as of 15 September 2026, and the screenshots were taken from that build on a two-station bench the same day. If a control here does not match what is on your screen, the application is right and this page is behind.
Copyright © 2026 Jerome Goddard II (W4IJG). All Rights Reserved.
OpenJSQ, its documentation and the screenshots in this guide are proprietary. No part of this
document may be reproduced or redistributed without permission.
OpenJSQ turns a radio and a sound card into a messaging station. If you can use a text-messaging app, you can use this — there are no protocol codes to memorize and nothing to type except what you want to say. All the protocol detail is still there when you want it — you just do not need any of it to make a contact.
Four things it does:
It speaks up to three radios. FSQ is a slow, very forgiving keyboard mode for HF — good on 80 and 40 meters, and fully compatible with stations running fldigi or FSQCall. AX1200 is classic 1200-baud VHF/UHF packet, and works with any FM rig. JG25 is OpenJSQ’s own FM waveform, faster than AX1200, and it appears only in a build compiled to offer it. Everything above — chat, files, mail, the map — works the same on all of them. That is the whole idea behind the program: the services are written once, and the radio underneath is just what carries them.
Documents\OpenJSQ: if an earlier build left Documents\OpenFSQ in its default place, the first start renames it across in one step, so upgrading never strands your existing mail and files. A folder you pointed somewhere else yourself is left exactly where you put it.Everything in this section happens before the setup wizard, and it is the part that decides whether the wizard goes well. None of it takes long, but skipping it is why a first session usually stalls.
| Piece | What will do |
|---|---|
| A radio | For FSQ: any HF transceiver with SSB. For AX1200 or JG25: any FM rig on 2 m or 70 cm, including a handheld. |
| A sound-card interface | The box that carries audio between the computer and the radio and — usually — keys the transmitter. A SignaLink, a DigiRig, a Masters Communications or Tigertronics unit, the sound device built into a modern rig's USB port, or a cheap handheld cable with a VOX-capable radio. This is the piece most new operators are missing. |
| A computer | Windows 10 or 11 on x64 for the packaged build; macOS and Linux by building from source. Nothing fast is required — OpenJSQ is not a demanding program — but see Dropouts in section 21 if the machine is already busy. |
| Nothing else | No TNC, no hardware modem, no soundcard-DSP box. A TNC is an option on AX1200, never a requirement. |
| Optional: a CAT link | flrig or Hamlib rigctld talking to your radio, if you want the frequency readout and dial in the top bar, or want to key through CAT. Everything else works without it. OpenJSQ does not drive rigs itself, which is why there is no list of radio models anywhere in the program. |
OpenJSQ cannot see any of these, and every one of them will look like a software fault if it is wrong.
| On the radio | Set it to |
|---|---|
| Mode (HF / FSQ) | USB, or USB-D / DATA-U if your rig has it. The data mode is better: it takes audio from the rear connector and bypasses the microphone chain. |
| Mode (VHF / UHF) | FM. Narrow FM works but costs you margin on the wide waveforms; wide (25 kHz) FM is the safe choice for AX1200 and JG25. |
| Speech processor / compressor | Off. It is designed to squash a voice, and it will mangle a data signal. |
| Noise blanker, DSP noise reduction, notch, AGC-fast | Off to begin with. Turn them back on one at a time, later, if you want to see what they do — they alter the audio the modem is trying to measure. |
| Transmit filter width (HF) | Wide enough for what you send. Classic FSQ fits in 430 Hz and needs nothing special, but the wide Fast modes reach 3 kHz — a 2.4 kHz transmit filter simply cuts the top tones off, and the far end reports the same characters missing every time. |
| VOX (if you key by VOX) | VOX on, VOX gain high enough to key reliably from the interface's level, and anti-VOX / VOX delay short — long enough not to drop between symbols, short enough not to hold the transmitter up after the frame ends. If the far end says your frames end in the middle, the delay is the wrong one of the two. |
| Rear-panel audio input level | Wherever your rig's data-mode gain lives (menu item names vary). This and OpenJSQ's Drive slider multiply; set the radio's once and then leave it, and do all further adjustment in OpenJSQ. |
The wizard's sound-card page stops more first sessions than anything else, and the reason is always the same: the name in the list does not obviously belong to your interface. Two minutes now saves an evening later.
arecord -l. Note what is listed.If you plugged the interface in after starting OpenJSQ, press Refresh — the list is read once when the page opens.
Documents folder is fine — and run
openjsq-desktop.exe. There is no installer and nothing is
written to the registry. Everything the program needs travels in the folder.cmake -S . -B build && cmake --build build. The desktop
program is build/desktop/openjsq-desktop.%LOCALAPPDATA%\OpenJSQ\OpenJSQ; on macOS and Linux it is the
equivalent under your user data directory. You never have to guess:
Settings → Files & configuration (tick Show advanced settings first — the card is hidden in the basic view) shows the exact path,
and the beta dialog described below names the licence file's full path and offers to open the folder it belongs in.
If you drop a file named openjsq-portable.txt beside the program
and that folder takes writes, OpenJSQ uses the program's own folder instead —
which is what makes a jump-drive station possible.Beta builds are licensed to one operator by callsign. This is not copy protection in the usual sense — it is so that a copy which turns up somewhere it should not can be traced back — but it does mean there is one file to put in place before the program will transmit.
openjsq-beta-license.json.<data folder>/openjsq-beta-license.json.If it is not good, OpenJSQ says so once, at startup, in a dialog titled OpenJSQ Closed Beta — before the main window opens, rather than opening and then refusing everything. The dialog names the licence file's full path, and carries two buttons: Open Data Folder, which opens the folder the file belongs in, and Exit.
| What you see | What to do |
|---|---|
| “This build needs an OpenJSQ beta licence…” | There is no licence file. Press Open Data Folder, put the file there, check the name is exactly openjsq-beta-license.json — Windows hides the .json by default, so a file that looks right may really be …json.json. |
| “This beta licence could not be verified…” | The file is there but its signature does not check out — it is for a different build, or it was altered in transit. Mail clients and chat apps sometimes rewrite an attachment; ask for it again, zipped. |
| “This beta licence is not valid yet. Check that this computer's clock and date are right.” | Almost always the computer's clock, not the licence. Check the date, the time and the time zone. |
| “This beta licence has expired…” | Ask whoever issued it for a new one. Your station is untouched and will pick up exactly where it was. |
| “This beta build expired on date…” | The program ran out, not the licence, and a fresh licence will not help — you need a newer build. The title bar warns about this one in advance and marks it (build). |
| “This computer's clock is set earlier than a date OpenJSQ has already seen…” | The clock has gone backwards. Put the date and time right and start it again. A laptop whose battery died, or one that came back from a time-zone change with the clock set by hand, both do this. |
| “This copy is licensed to CALL, and this station is set to something else. You can read and receive, but it will not transmit until the callsigns match.” | This one is not fatal, and it is the only one that is not. It is also the only one that never appears at startup: the program opens normally, the title bar carries the mismatch, and you meet the sentence when you first try to send. See below. |
-7 is picked on the Radio page and does not affect the match.OpenJSQ counts down whichever expires first, the licence or the build. The title bar always carries the count beside your callsign — N0CALL - 23 days left, with (build) added when it is the program that runs out; inside 7 days it also spells the warning out in a sentence; on the last day you also get a notice at startup. The wording always says which clock is running out, because the two need different answers: a licence expiring is a message to whoever issued it, a build expiring needs a new download.
Everything below can be checked without transmitting. Work down it before your first call, and again whenever something stops working.
| # | Check | Where |
|---|---|---|
| 1 | Title bar shows your callsign and a sensible day count (beta builds). | Window title |
| 2 | Your callsign is set, and it matches the licence. | Settings → Station |
| 3 | Audio in and audio out both name your interface, not the computer's speakers and microphone. | Radio → Radio & audio |
| 4 | The radio starts, and the footer says what it is running. | Start radio |
| 5 | Audio path reads Running at 48000 Hz with transmit and receive under it. If it says receive only, you have no transmit side. | Radio → Live status |
| 6 | PTT shows idle (or KEYED) under the keying method, not UNAVAILABLE. | Radio → Live status |
| 7 | The receive meter moves with band noise and sits above its floor. | Top bar, or Radio → Live status |
| 8 | Dropouts is 0 / 0 after a few minutes of listening. | Radio → Live status |
| 9 | Something — anything — appears on Channel after a while on a live frequency. | Channel |
| 10 | Transmit level set with Tune into a dummy load, ALC barely moving (FSQ; on AX1200 and JG25 Tune is greyed out — see below). | Radio → Transmit level |
Items 1 to 8 are all checkable in a shack with the antenna disconnected. Only 9 and 10 need the outside world.
Steps 1 to 4 put no signal on the air at all.
OpenJSQ does not pick frequencies for you, and this guide will not print a list that goes stale.
A screenshot of a symptom is rarely enough to find a radio problem. There is a built-in flight recorder, and it is worth turning on before you try to reproduce anything:
The bundle holds the last ten minutes of receive audio exactly as the modem heard it, the decode history with offsets into that audio, and this station's configuration — which together answer nearly every “was it the radio or the software?” question. Send it with a sentence about what you expected and what happened instead.
The first time you run OpenJSQ, a short wizard called Welcome to OpenJSQ walks you through setup. It is eight pages long — six if you tell it you use a KISS TNC, because two of them stop applying — and only one answer is truly required: your callsign. Everything else can be changed later on the Radio and Settings pages, and there's a Skip the rest button if you're in a hurry.
-7 does not go here — it is picked later, on the Radio page. The wizard says so in as many words rather than refusing silently.
HELLO: Next stays disabled and the reason is spelled out.The rail on the left is the whole navigation. There is no menu bar. Top to bottom:
| Page | What it's for |
|---|---|
| Chats | Conversations — one per station or group, like any messenger. |
| Inbox | Mail: letters other stations left for you, and letters you wrote. Shows Inbox ●N when you have unread mail (Chats and Files carry the same kind of count). |
| Files | The whole file service in one place: every transfer live and historical, the folder you share, another station's files to browse, and the log of what your station was asked for. |
| Network | Who you hear, and the who-hears-whom map. |
| Channel | The raw view: everything your receiver decodes, slot by slot, with the evidence behind it. |
| Radio | Hardware: sound card, PTT, levels, which waveform you are running, and Start/Stop. |
| Settings | Who your station is and how it behaves: identity, automatic replies, mail, presence, appearance, and policy — plus the technical limits on file sharing, whose switch lives on Files. |
| Deleted | The recycle bin, last of the pages. Everything you delete waits here 30 days before it's really gone. |
| Help | Not a page: the button at the very foot of the rail opens this guide in your web browser and changes nothing on screen. F1 does the same from anywhere. The guide travels inside the program, so it works with no internet connection; the copy it opens is written to the data folder, under help, each time you ask. |
The top bar runs left to right:
| Control | What it's for |
|---|---|
| Callsign chip | Who you are on the air. Click it to change your identity in Settings. |
| Waveform chip | Which radio is running — FSQ, AX1200 or JG25. Hovering names the waveform in a sentence; clicking opens radio setup. See section 16 for what the three are and when to use each. |
| Profile button | Shows the active profile's name — Home ▾, say. Switch between separate stations — shack, portable, ARES. See section 19. |
| Receive-level meter | How much audio is arriving from the radio. |
| Dial (CAT only) | The radio's frequency in MHz, read from the rig, in a box you can type a new one into. It appears only while a rig-control backend is configured and the radio is running — a station without CAT sees the bar exactly as before. A frequency is never sent mid-transmission: while you are keyed the box reads TX · QSY after and cannot be edited. |
| Mode (FSQ) | Your speed. (Earlier builds also kept Busy margin here; it now lives on the Radio page's FSQ card — see section 15.) |
| Mode and FEC (JG25) | What JG25 needs instead: how fast you transmit, and how much error correction goes with it. Section 16 explains both. Changing either restarts the radio, and a transmission already going out finishes first — a choice made while you are keyed shows with a dashed outline until it lands. AX1200 has neither box. |
| Net mode | One click: transmit nothing automatically. For directed nets. The button turns amber and reads Net mode ON while it is engaged. |
| ● Radio off / ■ Stop TX | One slot, mid-bar, right of the receive-level meter. While the radio is stopped it holds the quiet ● Radio off pill; while you are actually transmitting the red ■ Stop TX button takes its place — its presence is itself the warning. While the radio is running and idle the slot is empty. |
| Start radio / Stop radio | Starts and stops the radio. |
Short-lived notices also appear here when the station does something on its own — ✉ Transmitting: announcing held mail for N1ABC., ✉ Mail from N1ABC arrived — see Inbox., a shared file going out — so unattended work is never invisible. Where the window is narrow a notice shortens rather than pushing the bar around: ✉ ← N1ABC for mail arrived, ✉ ✓ N1ABC for mail delivered. Most fade after a few seconds; a held-mail announcement carries a Cancel send button while it goes out.
In a conversation, an unbroken run of automatic presence sends is collapsed into one quiet line — “Automatic presence ×6 · last 11:14” — so a station that has been sounding all afternoon does not bury the two sentences somebody actually typed.
Under the top bar sits the live spectrum strip. While receiving, it shows the audio and — on FSQ — the slot occupancy; the small slider at its right edge changes display sensitivity only. The slot chips live here now, each one sitting inside the band it describes — S1 ● when clear, S3 ● busy in amber, S3 ▲ TX in red for the slot you are transmitting on — with the frequency it listens on written in the band (1500 Hz · fldigi for the slot other FSQ programs use). Hovering a chip gives that slot's noise-floor numbers, which used to ride the top bar. AX1200 and JG25 have no slots — one channel carries everything — so on those the strip shows a single chip, AX ● or JG ●, that turns amber when the channel is busy and red with ▲ TX while you transmit; hovering it names the state in words (AX1200 packet channel clear). An RX or TX tag sits at the left of the trace. While the radio is stopped, the strip becomes useful rather than decorative: it says “Radio off — click to start listening”. If the missing callsign is the blocker, it reads “No callsign set — click to choose one” and takes you to Settings. The sensitivity slider is hidden while the radio is stopped.
The status bar at the bottom narrates what the station is doing (“Radio running.”, “TX · slot 3”), and says so plainly when something fails rather than leaving a button looking dead. The red TX always means your transmitter is keyed.
(Through an external KISS TNC that indication lags by the TNC's own delay — OpenJSQ knows when it handed the frame over, not when the transmitter actually came up.)
Goal: from a working wizard to your first message in about five minutes.
That is a working HF station. Section 8 covers everyday operating — the next section is only for VHF/UHF packet, and nothing in it is needed for FSQ.
Goal: from a working wizard to your first packet message in about ten minutes, on 2 m or 70 cm.
-7 for a handheld; the SSID distinguishes packet stations that use the same base call. If the callsign in Settings still carries an SSID of its own (an earlier build allowed it), the list is disabled until you remove it there.127.0.0.1 if it is on this computer) and TCP port, then Connect. Like the serial TNC, it modulates, listens to the channel, and keys the transmitter itself.
KISSPORT line — 8001 by default — while AGWPORT (8000) speaks a different protocol entirely. A station aimed at 8000 connects perfectly and then never passes a single frame.Goal: a working JG25 station in about five minutes, given that AX1200 or FSQ already works on the same computer. If neither does, do section 6 first — the sound card and keying are the same hardware and the same settings, and it is much easier to debug those on a waveform other people can hear.
JG25's four tones span almost the entire audio passband, which makes it fussier about the audio path than AX1200 is. In order:
Open a conversation, type, press Enter. That's the whole procedure. Under the box, a note line tells you what is about to happen. Messages wait for a clear channel before they transmit, so you can always change your mind: press ⦸ on its bubble (Cancel — take this back before the radio keys). Once the radio has keyed, it is too late, and OpenJSQ says so.
Every sent message carries its delivery state underneath. The words are chosen carefully: OpenJSQ never claims more than it can actually prove, so a weaker-sounding state is usually the honest one rather than a fault.
| State | What it means | Is it a problem? |
|---|---|---|
| Queued | Written and accepted, nothing on the air yet — including while it waits for somebody else to finish using the channel. | Not unless it sticks — see section 21. |
| Sending | PTT is keyed and it is going out. Your transmitter is on. On AX1200 and JG25 it also reads Sending while acknowledgements come back or a retry runs. | No. |
| Sent | The whole message went out of your radio. | No. It does not mean anybody received it. |
| Handed to the radio | The KISS TNC route's finish line: OpenJSQ gave the frame to your TNC. What the TNC did next is the TNC's business. | No — it is the strongest honest claim about somebody else's modem. |
| Sent to relay | You asked another station to carry this onward, and that request went out. | No. A relay may still decline; the route line beside it fills in as evidence arrives. |
| Delivered | The far station acknowledged it, packet by packet. Only on AX1200 and JG25, whose frames can be acknowledged — a chat sent with Verified chosen, for example. | No — this is the strongest state there is. |
| Failed / Cancelled | It did not go, or you took it back. | Failed is worth a look: on AX1200 the reason follows the word. |
via CALL · unconfirmed | Relayed, and nothing has been observed since. | Usually not. Most relays cannot be overheard from where you sit, and none needs confirming to work. |
via CALL · carried | You overheard the relay putting it back on the air. | No. |
via CALL · delivered | The destination itself sent a receipt. Only a receipt from the destination ever says delivered. | No. |
| ⚠ NOT VERIFIED | On something you received (⚠ NOT VERIFIED — may contain errors): the sender is identified but not every character can be vouched for. | Not a malfunction — it is the honest grade for a marginal decode. Read it, then press ✓ to approve it or ✕ to discard it. |
The state word sits after the time and the mode — 18:34 | FSQ-3 | Sent — in amber while the message is on its way and green once it is Sent or Delivered.
Section 9 has the full journey line for a relayed message, and section 10 the grades OpenJSQ gives to everything it receives.
Plenty of the program works with people who have never heard of it, and it is worth knowing which half is which before you wonder why a feature seems to be ignored.
| On FSQ, with fldigi or FSQCall | On AX1200, with any packet station |
|---|---|
| Plain chat, Allcall and directed — at the four classic speeds only (FSQ-2 to FSQ-6). OpenJSQ never sends a fast mode at a station that has not advertised it. | Plain chat and anything else carried in ordinary AX.25 UI frames. A TNC, a Mobilinkd, Dire Wolf or another operator's packet station can all copy you, and you can share a channel with APRS. |
| The classic FSQ queries and their replies — signal report, location, heard list and the rest — because those are FSQ's own, not OpenJSQ's. | Nothing above the frame. Files, mail custody, verified chat, delivery receipts and the network map are OpenJSQ services carried over AX.25, and a plain packet station will simply not answer them. |
| Relaying, which is part of FSQ itself. | An APRS digipeater will repeat your frames if the path asks it to; that is digipeating, not OpenJSQ relaying, and the two are counted separately. |
| Not the fast modes, files, mail custody or delivery receipts — those are OpenJSQ's, and a station that has not advertised the capability is never sent one. | Set Network profile → APRS coexistence when you share a channel: it turns off files, relay and automatic signal reports so you are not cluttering somebody else's frequency. |
On JG25 the answer is simpler: nobody. It is OpenJSQ's own waveform and no other program speaks it — which is the whole trade described in section 16.
Two kinds of evidence answer different questions. When the radio link can measure it, the SNR under a message describes how that one copy arrived. On FSQ, hover the footer for the decode margin — how much signal you had to spare over the mode's decode threshold — and the footer itself adds low margin N dB when there was less than 6 dB, because the next fade will lose you. Link Quality instead summarizes how reliably that station's recent traffic has decoded.
The Actions ▾ button in any single-station chat turns the classic FSQ queries into plain clicks: signal report, location, what's-new, heard list, software version, wake, repeat, shared files, and more. Each radio action loads the compose box and nothing transmits until you press Enter; Esc cancels. Station info… is different: it opens the local station panel and transmits nothing. In a group conversation the menu offers one question only, Ask for a signal report — see Groups in section 9.
The rail shows Inbox ●1 and the chat notes “Mail from them arrived — see Inbox.” Open the Inbox, read, done. To leave someone a letter for later, use Inbox → New mail… — your station holds it, announces it once straight away, and keeps trying when they are next heard.
Conversations appear for: Allcall (always present — it's the whole channel), every group you're subscribed to, stations you've added by hand, every station in your heard list, and anyone you have history with. Each row shows the callsign, an unread dot, a ✉ badge when they've left unread mail, the slot and signal they were last heard on, and a preview of the last message. A reception still coming in previews live, marked ▸, character by character, as it decodes.
Press + (or right-click → New conversation…) to start one. You do not have to have heard a station first — FSQ lets you call a station before it sounds. Type a callsign (portable suffixes work on FSQ; AX1200 uses the AX.25 callsign/SSID form), or a group name starting with @ or # — typing a group here also joins it.
Search chats (Ctrl+F) searches more than the preview you can see: it digs into everything that station has ever sent you, pulls the conversation up, and then narrows the open thread to the matching lines. Clear the box to return to the ordinary conversation list.
Click the callsign in an open conversation, or choose Actions ▾ → Station info…, for a non-modal card titled Station N1ABC with what OpenJSQ actually knows: whether they are on the channel now, first and last heard, last and best SNR, the last mode, whether their callsign checksum has been verified (FSQ), how many messages you have exchanged, and Link Quality. Missing evidence is shown as a dash rather than invented as zero.
A group is a shared address several stations listen to at once — @ARES, #SKYWARN. Joining is as simple as starting a conversation with the group's name, or listing it under Radio → Groups → Subscribed groups. One list serves every radio. Group traffic is broadcast: delivery is always Live, and 📎 Files is unavailable.
The Actions ▾ menu in a group offers one thing, Ask for a signal report; everything else is greyed with the reason. Every member whose station answers group questions replies after its own short delay, so the answers do not collide, and the answers are filed in the group's conversation — N1ABC heard you at 14 dB — while your question's footer counts them: 1 station answered, 3 stations answered. Because each question costs the channel an answer from every member, you may ask the same group once every 5 minutes by default; inside that time the menu row reads Ask for a signal report — again in 3 min. Both halves live in Settings → Automatic replies: Limit group signal report requests to one per group every (No limit, 1, 2, 5, 10, 15 or 30 minutes) for asking, and Answer group signal report requests (Automatically by default, and only while automatic answers are on) for whether your own station replies.
Above the thread, on the right, sit three controls and one piece of evidence.
A long conversation does not draw itself all at once. The newest 200 lines appear immediately and a bar above the thread says how many are still behind them — “1,340 earlier lines in this conversation are not drawn yet.” — with a Show 200 more button beside it. Nothing has been lost or trimmed; only the drawing is deferred, which is what keeps a two-year conversation from taking a visible moment to open.
The note line under the box is the app thinking out loud: what the message will do, what it costs (on AX1200: bytes, packets, and airtime), and any problem with it — before anything transmits.
Open a single-station chat and press Actions ▾. As the menu itself says: each of these loads the box below — nothing goes on the air until you press Enter.
| Menu item | What it does |
|---|---|
| Station info… | First in the menu, and the one item that transmits nothing: the station card described above. |
| Ask for a signal report | How do they hear you? Your question stays in the thread as Asked for a signal report, its footer says answered when it is, and the reply arrives as its own sentence: N1ABC heard you at 12 dB (or …heard you, but could not measure the signal). A station answering you automatically shows You heard N0CALL at 12 dB on its own screen, marked sent automatically. |
| Ask where they are (QTH) | Their location text. |
| Ask what's new (QTC) | Their status line. |
| Ask who they can hear | Their heard list. |
| Ask them to repeat that / Ask for a delayed repeat (type seconds 0–60, default 15) | Their last message again, now or after a pause. After arming delayed repeat, type 0–60 to request that many seconds; blank or invalid input falls back to 15 seconds. |
| Ask what software they run | Program and version. |
| Wake them (sound their alarm) | Sounds an alarm at their radio — even if they're “asleep.” Use sparingly. |
| Send an alert… | An alarm plus your words at their station. |
| Send through a relay station… | Prefills a one-hop route into the compose box for this message only. For a route that stays put, use the Route chip in the header instead — see below. |
| Leave a message in their mailbox… | Stores a note at their station; they read it any time from their Inbox. |
| Browse their files… | Asks that station for the list of files it shares. The list arrives on the Files page, in Browse a station, where you pick a row and download it. The remote path is never typed over the air. There is a second door to the same thing: 📎 Files ▾ → Browse their files in the same header. |
| Send a text file… | On FSQ, transmits a small text file (8 KB cap — FSQ is slow); on AX1200 and JG25, hands off to the Files page. |
| Send an ICS-213 form… | The EmComm general-message form as a fill-in sheet — see below. |
Grayed items explain themselves — hover for the reason (station doesn't support it, radio not running, APRS profile, and so on).
When a station is beyond your reach, you send through one that hears you both. The station in the middle retransmits your traffic; the recipient sees it as coming from you, tagged via whoever carried it.
In the header of any single-station conversation, beside Actions ▾, sits a chip reading Route: Direct ▾. Click it and you get Direct, then one via … entry for every station you have heard — hover an entry for that relay's link quality, so you are choosing on evidence rather than hope. Pick one and the chip becomes Route: via K4ABC ▾.
That route then stays set for that conversation until you change it. It is not a one-shot decision per message, which is the point: if a correspondent is only reachable through a relay, that is a property of the path, not of one sentence you happened to type. The route is per conversation and is forgotten when you restart — it never silently persists into a session where propagation has changed.
The chip does not appear on Allcall or a group. Everyone hearing a broadcast has already heard it.
Once a route is set, it carries almost everything you do in that conversation — ordinary messages, the questions on the Actions menu, alerts, and mailbox notes. A route and an armed action work together rather than cancelling each other: arm Ask for a signal report, and the note line reads the whole plan back to you before you press Enter. Under the compose box you will see ↗ Goes to K4ABC, who passes it to N0XYZ — the route in English, never in punctuation.
The chip offers one hop, because one hop is what almost everyone needs, and it never offers the recipient as their own relay. For a longer route, type it: VIA1;VIA2;DEST your message — each hop separated by a semicolon, destination last. FSQ will carry a chain; AX1200 and JG25 pass traffic through one relay only and refuse a longer route rather than quietly truncating it.
Every hop is a separate transmission, so a chain is slow, and every station in it has to be listening and willing to relay. The note line warns you about any hop you have not actually heard.
Each of these is refused with the reason in the note line, never silently downgraded to a direct send:
| Traffic | Through a relay |
|---|---|
| Messages, actions, alerts, mailbox notes | Yes, on every radio. |
| Verified delivery (AX1200, JG25) | No — a relayed message goes out Live. An acknowledgment would come from the relay rather than the recipient, which would be a delivery confirmation that confirms nothing, so the app declines to offer it. |
| Files | Up to 256 KB, travelling as a letter's body. Larger than that, send it directly. |
| A long ICS-213 | One hop only. Past one frame the form travels as a file, and a file can be relayed through a single station, not a chain. |
| Browsing a station's shared files | Not yet. The listing travels as a file transfer and has no relayed form — ask that station directly. A route you have set is refused in words, with the route named, rather than quietly downgraded to a direct transmission you were never told about. |
| A long mailbox note on AX1200 | No. Past the frame size it becomes a file, and AX1200 file transfers do not relay. Shorten it or send direct. |
Typing #your note in a chat stores the note in that station's mailbox instead of their chat window — they read it later from their Inbox, even if they weren't listening when you sent it. #[name.txt] your note gives it a file name. This is the classic FSQ store mechanism, so it works with fldigi stations too.
Actions ▾ → Send an ICS-213 form… opens a fill-in sheet mirroring the paper form: To, From, Subject, Message, Signature; date and time are stamped automatically in UTC. A box at the foot, File it in their mailbox, so they send back a receipt, is ticked by default, and the button reads Send form. Like every other action, Send form transmits nothing by itself: it loads the compose box — N1TSB#[ics213-n1tsa-2609152129.txt], the form filed under a name your station derives — and the note line says ICS-213 for N1TSB is ready — press Enter to transmit it. The byte counter now explains the transport rather than simply refusing a large form: a short form rides directly, while a form that exceeds the short-message budget is carried by the JSQ file service. At the far end it still opens as an ICS-213 form in the conversation/Inbox, and the underlying transfer remains visible on Files. Short labeled-text forms remain readable by classic FSQ software.
Use a message's ✕ button (Delete this message); delete a whole conversation from its header's 🗑 or the list's right-click menu. Everything goes to the Deleted page, where it waits 30 days and can be restored with one click (Restore puts it right back; restored files never overwrite — a name clash becomes name (restored).ext).
Chats told you how to hold a conversation. This section is about reading one: the numbers under each message, the badge beside a callsign, and how much the program is willing to vouch for any of it. It is the part of OpenJSQ an operator grows into, and none of it needs a setting changed.
Every bubble carries a footer line, and it is worth learning to read — it answers most of what you want to know about a contact without going anywhere else. On a received message the fields are, in this order, separated by bars — 18:28 | SNR 29 dB | 100% | FSQ-3 | slot 2 | 4.8 ch/s (58 wpm):
| Field | Example | What it tells you |
|---|---|---|
| Time | 14:32 | When it was decoded here, in local time. |
| Signal | SNR 29 dB | The signal in dB above your receiver's own noise floor (not an absolute S/N). Above 40 dB it reads 40+; where nothing was measured it reads --, never a made-up number. On FSQ, hover the footer for the decode margin — how far the signal sat above the measured decode threshold for that mode. A margin near zero is the app telling you to slow down before the band does it for you. |
| Link quality | a colored 92% block | See below. |
| Mode | FSQ-3, AX1200, JG25-FM 2400/F0 | What carried it. A JG25 message names its mode and error correction together. |
| Slot | slot 3 | Where on the channel — FSQ only, and only when the channel plan has more than one slot. |
| Realized speed | 4.8 ch/s (58 wpm) | What the reception actually achieved — message characters divided by the channel time it occupied. It always reads below the mode's nominal rate, and the shorter the message the further below, because the frame's own header, callsigns and checksum share that same span. Hover for the arithmetic. A question or other request has no text to divide, so this place shows its air time instead: 2.8 s on air. |
After those, a received footer adds notes only when they happen: via N1ABC on a relayed message, naming the station that actually handed it over; on AX1200, FEC recovered, 3/5 packets or live partial, missing packet, gap repaired, and APRS when it arrived under APRS coexistence; the outcome of a station action; low margin -2 dB on FSQ when there was little to spare; and no CRC on an FSQ message that carried no checksum.
A sent bubble is shorter — time, mode, slot where there is one, and the delivery state from section 8: 18:34 | FSQ-3 | Sent. There is nothing to measure on something you sent. Its notes say what else is known: answered or 2 stations answered on a question; sent automatically, automatic presence, carried for another station or mailbox service when a service rather than you sent it; 12/15 packets on a multi-packet AX1200 send; the relay journey below; and relayed for N1ABC.
A message you sent through a relay carries a short journey line that fills in as evidence arrives:
via K4ABC · unconfirmed | Sent, and nothing has been observed since. This is not failure. Many relays simply cannot be overheard from where you sit, and no confirmation is ever required for a relay to work. |
via K4ABC · carried 11:16 | Your station has positive evidence the relay put it back on the air — it overheard the retransmission, or heard the relay's own wrapped copy, or heard a digipeater repeat the frame. |
via K4ABC · carried 11:16 · delivered 11:17 | The destination itself sent a receipt — delivered is added to whatever the line already said, so a relay you never overheard reads via K4ABC · unconfirmed · delivered 11:17. Only a receipt from the destination ever says delivered — a relay carrying your message is not the same as the far end receiving it, and OpenJSQ will not blur the two. |
Messages sent before this tracking existed simply say so rather than pretending to be unconfirmed. And when evidence could plausibly belong to more than one pending relayed message, it promotes neither — an ambiguous match leaves both unconfirmed rather than crediting the wrong one.
Where a station has enough scored receptions, you will see a colored percentage such as 92%. That is Link Quality: how reliably this station's recent transmissions have actually decoded here. Signal strength is the physics when it is measurable; Link Quality is the outcome history.
| 80–100% | Reliable — their traffic gets through. |
| 50–79% | Marginal. |
| 0–49% | Poor. |
| gray | The evidence is old, not bad. After 30 minutes without a scored reception the badge grays in the conversation header, the Station info panel and the Network page — a message's own footer keeps the colour it had when that message arrived — but the number itself is never decayed, so gray 92% honestly means "92%, measured two hours ago." |
The number is always inside the badge, so color is never the only signal. You will see Link Quality in chats, the open-conversation header, incoming bubbles, the Station info panel, and the Network page's Link column. It is tracked on FSQ, AX1200 and JG25 and survives a radio restart. A dash means OpenJSQ does not yet have enough evidence to claim a score.
The header of an AX1200 conversation says what the other station can receive. Before anything has been exchanged it reads what they can receive is learned from the first file, station action or confirmed chat exchanged with them; once they have answered, it says so in plain words — can receive delivery-confirmed chat, files, station actions and group messages, with relays for others added when they do. A station that offers none of the extras reads receives plain chat only — a real answer, and deliberately worded differently from "not asked yet." What was learned is kept across a restart and dated, (as of Sep 11 19:57). This is why grayed items in the Actions menu are grayed: the other end has told you what it can do.
Sometimes a banner replaces the ordinary footer, and it is worth knowing why. Weak-signal decoding means occasionally receiving a message almost perfectly. Most software silently guesses at the rest. OpenJSQ grades instead, and shows you the grade:
| What you see | What it means |
|---|---|
| received, checked | Framing intact and integrity verified (e.g. CRC-16 verified). Trusted — eligible to trigger automatic replies. |
| ⚠ NOT VERIFIED | Sender identified, but not every character can be vouched for. Shown with the banner ⚠ NOT VERIFIED — may contain errors; you approve it (✓) or discard it (✕, recoverable from Deleted). Never triggers automatic actions. |
| 👁 MONITORED | Marked 👁 MONITORED — not vouched for: attributed text the receiver does not stand behind at all. Kept for completeness on the Channel page and marked wherever it appears. |
| REJECTED | Failed validation. On the Channel page — as Damaged in its Basic view, and as REJECTED with the reason under Show advanced settings — and never delivered to a conversation. |
That table grades one message. The Link Quality badge grades a station — how reliably its recent traffic has decoded here — and the two are deliberately separate: a perfectly checked message from a station you have mostly been missing is still a checked message, and OpenJSQ will not average the two into a single reassuring number.
The Receive effort setting moves how much marginal text you see, but never what the station trusts — an unverified message stays unverified at every setting. Where OpenJSQ has a valid signal measurement, it normalizes SNR into the same 3 kHz reference so values are comparable across native radios. A KISS TNC that supplies no SNR is shown as unknown, not zero. OpenJSQ tells you when it has done something on its own; nothing happens off-screen.
The Files page is the whole file service for every waveform — sending, another station's files, the folder you share, and the log of what you were asked for, in that order down the page. Under the title and its one-line description sit the three commands, then the Send a file card, then the transfer ledger. To send, choose a recently heard station from the editable station list (its placeholder reads Destination, e.g. N1RX-7), or type a callsign, click anywhere in the Choose a file field or its folder button, then press Send file. A zero-byte file is refused up front — there is nothing to send.
Each row has its own checkbox. Tick one or several rows, then use the action bar. The table shows direction, station, mode, file, size, Progress, rate, retries, state, and location. Progress counts blocks: 12 / 40 is what the receiver has confirmed, and an outgoing transfer that is ahead of its acknowledgements reads 16 / 40 sent · 12 confirmed. Being ahead is normal: the sender fills its window and only then asks. Hover the cell for the difference — blocks sent are not blocks delivered. Rate is measured by each station on its own clock, so the two ends of one transfer can differ slightly; Retries is counted by the sender and left blank on an incoming row. States include Queued Waiting Sending / Receiving Confirming Retrying Verified Failed Cancelled Paused. Confirming means every block is acknowledged and the whole-file verdict is still to come. Verified means the end-to-end file check completed successfully.
incoming folder for the active profile. Old FSQ and AX1200 folders are intentionally left where they were after an upgrade; OpenJSQ shows a one-time notice so you know where those older files remain.How it works underneath. JSQ File ARQ sends blocks, polls the receiver for the missing set, and retransmits only what still needs to arrive. On slow FSQ modes OpenJSQ sizes DATA blocks by airtime rather than forcing one enormous fixed block; if a transfer stops making progress it drops to smaller blocks and tries again — still the same transfer, so mail and resumption never lose track of it. The whole-file check is the final authority, not the number of apparently successful blocks.
Everything about files is on this one page now. Send a file… opens the file picker for the Send a file card just below. Browse files jumps to Browse a station. Share files reads Share files: Off, or Share files: On · 6 files, and scrolls you to your own sharing section. Nothing on the action bar transmits.
Off by default, and the first thing you see is an invitation rather than a switch:
How sharing works spells out the whole contract before you commit to anything: you choose one folder; a station that has heard you can ask for the list of what is in it, and then ask for one file by its number in that list; your station answers only stations you allow, only files inside that folder, only up to the size and daily limits, and — if you choose Ask me first — only after you say yes.
Pick a folder and the invitation is replaced by the section that owns every sharing decision:
| Control | What it decides |
|---|---|
| Sharing on | Whether anybody may browse or download at all. Turning it off withdraws the offer immediately — the capability your station advertises follows the switch rather than waiting for the next request. |
| Folder | The one folder that is served. Nothing outside it is ever offered, hidden files are never listed, and links leading out of it are not followed. Open folder and Choose folder… sit beside the path, which is shortened in the middle when it is long — hover for the whole thing. |
| Who may browse | Stations I have heard (the default), Everyone, or Only these stations — which reveals an Allowed stations box. |
| When a station asks | Serve automatically, or Ask me first — each download then pops a question and the asker is told busy until you answer. |
Under those, two lines the folder itself writes: a warning for every file the size ceiling would refuse, named individually so you can act on it before anybody asks, and the count — “6 files offered from this folder.”, or “Sharing is off — nothing is offered.” Changes apply at once; there is no Save button and no restart.
Why you pick by number and never by name. The download carries the row's position in the listing plus a short fingerprint of that entry, never a filename. A filename is a path, and a path is something that can be pointed outside the shared folder; a row number cannot. The fingerprint is what makes a changed folder come back as “refused: their files changed since you listed them — ask for the list again” instead of quietly sending you the wrong file.
A refusal is a sentence, not a silence, and most of them are ordinary. The same words reach you whichever waveform carried the request — FSQ has no status byte and answers in short text, AX1200 and JG25 carry a code, and both are translated into one vocabulary before you see them.
| What the State column says | What it means |
|---|---|
| Refused: busy — try again | Another shared-files transfer is already running there, or the far operator runs Ask me first and is being asked right now. Wait — do not hammer it, which earns the next line. |
| Refused: asking too often | You asked again inside their per-station interval (10 seconds by default). |
| Refused: over size limit | The file is above their per-file ceiling — 256 KB unless they raised it. |
| Refused: sending budget spent | They cap how much they will transmit per day, and it is used up. |
| Refused: their list changed | Your listing is stale. Refresh and download from the fresh one — the cached list is cleared for you. |
| Refused: no such entry | That row number is not in their current listing. |
| Refused: not sharing with you | Sharing is off, no folder is chosen, you are outside their Who may browse setting — or they answered No to the prompt. Those are deliberately the same answer on the air. |
| Refused: not supported there | That station's build does not speak the shared-files service at all. |
| Retrying… / Failed | A granted transfer that is being re-attempted, or one that ended without delivering. |
| No answer — try Download again | Nothing came back within three minutes of asking. |
This is monitoring, not correspondence: your station working for somebody else, so it belongs beside the files rather than in Chats. The header counts today's requests; the table gives the time, the station, what was asked for ((file list) or a filename), and the answer your station gave, in this end's words — served — 14336 B, refused: asking too often, refused: not offered, refused: too large, refused: budget spent, waiting for you — while the far operator sees the same decision in the vocabulary of section 11's refusal table. It is cleared when the application restarts.
Under Settings → Shared files, with Show advanced settings ticked:
| Setting | Default | What it does |
|---|---|---|
| Include subfolders | No | Whether the scan descends past the folder itself. |
| Largest file to serve | 256 KB | 64 KB, 256 KB, 1 MB, 10 MB or Unlimited. Unlimited is a real choice — your licence, your airtime — but a 10 MB file is hours of channel time. |
| Serve at most, per day | Unlimited | A daily ceiling on what you will transmit for other people: 1, 5 or 20 MB. |
| Each station may ask every | 10 seconds | The per-station interval. This is the one limit here that protects everyone on frequency rather than just you — the airtime an answer spends is shared. Removing it is a courtesy decision, not only a personal one. |
| Approval timeout | 2 minutes | How long an Ask me first question waits for you before the station is refused. The asker was told busy meanwhile; a refusal after the wait is the honest answer of a station whose operator was not there. |
Mail exists for one situation: the other station is not on the air right now. Your station takes custody of the letter and handles delivery itself.
One announcement goes out straight away, heard or not — you just pressed send, and the worst case is one unanswered call. A small notice says so as the dialog closes: Held for N1ABC, and announced now. If they do not answer, it waits until they are heard — leave the radio running, and watch Holding for its progress. From then on it's automatic: when the recipient is next heard — even from a routine sounding — your station announces the letter again, they fetch it, and their confirmation releases it. Leave the radio running and watch Holding for progress.
If nothing goes out at all, the activity line says which hold is stopping it — “Held for N1ABC. Net mode is on, so nothing goes out automatically.”, or “Held for N1ABC. Not transmitting: …” for a licence or transmit problem — rather than reporting that the letter is on its way.
A letter that fits in one frame rides inside the mail message itself. A longer one is not refused — the recipient is sent a short notice and the text follows automatically as a file transfer. You are told which is happening before you commit, because the second costs a negotiated transfer on the air and the first does not.
| Radio | Fits in one frame up to | Above that | Hard ceiling |
|---|---|---|---|
| FSQ | 768 bytes | Sent as a file transfer. The dialog says so as you type — “923 bytes — over the 768-byte FSQ limit, so this letter travels as a file transfer (up to 256 KB)” — and the activity line notes “Sending the letter's body as a file transfer.” The recipient needs a build that speaks the file service. | 256 KB |
| JG25 | 256 bytes | ||
| AX1200 | 128 bytes |
Past 256 KB the letter is refused with the reason, and the dialog points you at the Files page — which is what the recipient would have received either way. Letters left with a mailbox station work the same: an oversize deposit carries a referral and the custodian passes the file along.
A letter too long for one frame travels as a file — the bench letter above did, at 288 bytes on JG25 — and still arrives as ordinary text in your Inbox, read back from the transfer once it is verified. A letter whose body is a file, on the other hand (a file handed on through a relay as a letter, say), shows in your Inbox as Attachment: name (n KB) rather than as body text. The file is kept exactly as it was sent, byte for byte — nothing is decoded, trimmed or tidied on the way in, because a letter that was acknowledged as delivered and then quietly altered would be worse than one that failed. The name is derived by your own station, never taken from the sender: a filename chosen by a remote station is a path supplied by a stranger.
The same rule constrains what you can send this way. A file relayed as a letter body has to be genuine text that survives the round trip — an empty file, one containing binary data, or one that is not valid UTF-8 is refused up front with the reason, rather than being carried and arriving as mush.
# mailbox note routes the reply back to Chat. A letter created in Inbox opens a mail compose window carrying Include the previous conversation below — ticked by default, and it quotes the original under a divider the way email does. Watch the byte counter as you toggle it: a quote can be what pushes a reply past the inline limit and turns it into a file transfer.Settings → Mail → Hold letters for other stations (on by default) lets other stations deposit letters with you for third parties — a store-and-forward network needs stations willing to carry mail. Your own letters are always held by your own station regardless.
The right-hand STATIONS HEARD list is your receiver's memory. Its columns are Station, Signal, Link, and Heard. Signal is calibrated SNR when the active modem/TNC actually supplies a valid measurement; an external KISS path that cannot report SNR shows -- dB rather than a made-up 0 dB. Link is the recent decode-success score and is independent of signal strength. Double-click a row to open that station's chat.
The graph is the bigger picture. Arrows point at the station doing the hearing — A ⟶ B means B hears A. Blue straight arrows are first-hand paths: what your receiver heard, a station's own report about hearing you, or — drawn with -- and no number — a station whose traffic proves it decoded you, because it acknowledged your message, answered your request, replied to your file transfer, relayed your message on, or took custody of your letter (hover the leg and it says which); green curved arrows are hearsay from one remote station about another. Edge labels show dB when a valid SNR exists, 40+ dB above the measurable range, and -- dB when nothing was measured. Wheel zooms, drag pans, +/−/fit on the toolbar, and hovering an edge explains who heard whom and when.
Press Map network. Your station asks each neighbor who they hear and draws the combined graph. The same station-action dispatch is used on FSQ, built-in AX1200, and KISS AX1200; if a request cannot actually be queued, the crawl skips it with the refusal reason instead of pretending it waited for a remote timeout. The button becomes Stop mapping; stopping keeps partial results.
Reset clears the topology picture and the RELAY ACTIVITY table below it — not your heard list, and not any history. Switching profiles also clears the old profile's graph so a plausible-looking map from the shack cannot leak into a field profile.
A station that has given evidence of sharing carries a Shares files badge beside its callsign in Stations heard, with a small network icon — the same badge the chat header and the Files pickers show, from the same single record. No evidence means no badge, never a grey “unknown”: the program does not report a station as not sharing merely because it has not been told. Right-click any row for Open chat, Browse their files and Send … a file… — the same verbs as the chat header, and browsing a station with no badge is allowed, because that is how you find out.
Below the map, RELAY ACTIVITY lists the traffic your station has passed along for others. This is service work, not conversation — none of it ever appears in Chats or in an unread count, which is exactly right: being a relay should not fill your inbox with other people's mail.
Six columns: From (the station that wrote it), To (where it was going), Carried (what was relayed — on AX1200 a sentence naming the kind, Relayed a message for N1ABC, or file traffic, a station action, a control frame; on FSQ the text that was passed along), Heard, Passed on, and State. States run waiting for the channel → transmitting → passed on, with retrying, failed and cancelled where they apply. A row reading not passed on means your station heard the request and did not retransmit it — relaying switched off, or the traffic was a duplicate or a loop.
What the map answers in practice: who would make a good net control (everyone hears them), which paths are one-way (A hears B at +12 while B hears A at +2 — perfectly normal on HF, and exactly what you need to know), and who is only reachable via which relay.
Chats shows conversations; Channel shows the channel — every slot, every decode, addressed to you or not, plus the evidence behind every decision. You never need this page to operate. You'll want it anyway.
The page has two views. Basic, the everyday one, answers “what came and went?”. Its colour key is received, checked · needs your eye · sent by you · damaged, and its history has four columns: Time, Station (N1ABC → you, you → everyone), Message in plain words (N1ABC heard you at 29 dB, file block 12, 102 bytes, mail announcement), and Result — Received, Sent, Needs your eye, Damaged, Unreadable, Presence or Local note. A frame heard but not readable at all is listed as Signal heard, message unreadable. The filters are All, Received, Sent and Damaged. Selecting a row shows a short card — who, when, which radio and mode, then Result, Signal, Kind and Length — with Open chat with N1ABC › (Open in Chats › where the row names no station) and Show diagnostics ›. Keep history and Clear all are in both views, and so — on FSQ — is the Monitor squelch box beside the filters, which sets how strong a signal the live decoder cards react to and changes nothing about what is decoded.
Show advanced settings, at the top right, turns the same page into the evidence view the rest of this list describes. On FSQ, MONITOR SLOT and LIVE DECODERS show in both views.
receive-audio.wav, the overlapping channel-history.jsonl, session-notes.jsonl, the receive-emphasis and JG25 reception logs, tx-path.jsonl with transmit-audio.wav, and session.txt — the configuration and version mapping. Turn this on before a hard-to-reproduce on-air test.The Busy margin control on the Radio page's FSQ card belongs to this world: it's how many dB above a slot's own noise floor the signal must rise before the slot counts as busy (default 3.0 dB; 0 turns busy detection off). It gates only transmitting — decoding always runs.
While Record diagnostics is on, a JG25 reception that
never became a packet still gets a row. It is named JG25
receive rather than drawn as an arrow between two blank callsigns — nothing
was recovered to read addresses from — and its inspector opens a
Receive attempt group, followed by a Branches group, carrying the whole account: what
the acquisition, header and body each decided, the mode and FEC if the header
was read, the clock and timing figures if a body was demodulated, the SNR where
the geometry allowed one, the busy-detector's capture with its RMS, peak, noise
floor and why it closed, and the result of every equalization branch in
the order they were tried. A field the decoder never reached reads
null, never zero — a clock error of 0 ppm and a clock error
nobody measured are not the same reading.
This matters because the alternative was silence: a reception that never
acquired, one whose header checksum did not hold, and one whose header
described an impossible frame all used to leave no trace at all, so a recording
full of strong signals could sit beside a channel history with one row in it.
Successful receptions keep their single traffic row — duplicating them would
cost this page its readability for a comparison the diagnostic bundle supports
better. The bundle now carries the same account as
jg25-rx-attempts.jsonl and a jg25-summary.json whose
funnel accounts for every reception, including the two losses that are
not decode failures and look exactly like them: a reception the busy
detector had no free slot for, and a good result the hand-off could not
carry.
A successful frame can also be marked Rescued. On JG25 that means it decoded on a fallback equalization branch — the best-scoring branch could not produce it, which is the receiver telling you its emphasis setting is off from what this path wants. On AX1200 it means the frame check failed but OpenJSQ's own CRC-32 held, which points at a damaged end of transmission: an early unkey, a squelch tail, a discriminator transient.
Everything hardware. Two habits to know: this page saves as you change things (no Save button), and the Show advanced settings toggle at the top right reveals the controls whose defaults already do the right thing. The pinned footer holds Start radio / Stop radio and a status line.
What Adaptive learns is remembered against the audio path it was measured on — a particular sound device at a particular rate — not against the application. That matters: a correction learned through a de-emphasised FM rig would be actively harmful if it were reloaded into a session running on a flat virtual cable, so a path OpenJSQ does not recognise starts neutral and learns from scratch. If you suspect a remembered correction is doing harm, Forget learned receive emphasis clears every path back to flat; restart the radio afterwards so the filters rebuild cleanly.
The card that answers “is this station actually working?” without going on the air.
Backend: None — OpenJSQ does not talk to the radio, flrig — already knows your radio, on localhost:12345, or Hamlib rigctld — more radios, better units, on :4532. With a backend connected you get live frequency/mode/meter readouts, a Set mode row to put the rig in its data mode, and the option of CAT keying. OpenJSQ deliberately shows — rather than a stale number whenever the link can't vouch for a reading.
127.0.0.1 and only changes if flrig or rigctld runs on another computer. The port box pre-fills from the backend you chose — 12345 for flrig, 4532 for rigctld — and follows a change of backend unless you have typed a port of your own.Subscribed groups is a full-width card on the Radio page, because one group list serves every radio. Enter one per line or comma-separated; group names must begin with @ or #. The larger box is meant to be audited at a glance rather than treated as a hidden protocol setting.
incoming folder.APZJQ1 by default. It is how other software on a shared channel recognizes this traffic as OpenJSQ's rather than something addressed to a station. Leave it alone unless you are coordinating a channel where someone has asked you to use a different identifier.WIDE1-1, WIDE2-1. Every hop you add is another transmission of the same frame on the same channel.OpenJSQ is one program over three different radios' worth of physics. The waveform decides how fast you can talk, how bad the path may get before you stop being heard, and who else can decode you — but it does not decide what the program can do: chats, mail, files, groups, the network map and relaying are the same services on all three. Pick the one that matches the band you are on, and change your mind later on the Radio page.
| FSQ++ | AX1200 | JG25 | |
|---|---|---|---|
| Band it is for | HF and NVIS — 40 and 80 m above all. Works on VHF/UHF too. | VHF/UHF FM. | VHF/UHF FM only. See the warning below. |
| Waveform | 33-tone IFK+, 1.95 to 41 baud. | Bell 202 AFSK, 1200 baud, 1200/2200 Hz. | Continuous-phase 4-FSK, 600 to 1200 baud, two bits per symbol. |
| Speeds you can pick | Eleven, FSQ-2 to FSQ-42 — see section 17. | One. 1200 baud is the standard. | Seven, JG25-FM 1200 to JG25-FM 2400 (the number is the bit rate). |
| Room it needs in the audio | 430 Hz classic; up to 3 kHz on the widest Fast mode. | About 2 kHz within the FM voice passband. | Roughly 475–2600 Hz — very nearly the whole voice passband, in every mode. |
| Error correction | None. Checksums tell you what arrived damaged. | None on the link. Files carry their own FEC. | Selectable — F0 to F3 convolutional coding, plus a CRC-32C over every frame. |
| Who else can decode you | fldigi and FSQCall, at the four classic speeds. The Fast modes are OpenJSQ-only. | Any AX.25 station; it can share a channel with APRS. | Nobody. It is OpenJSQ's own waveform and no other program speaks it. |
| Verified chat | No — FSQ chat is best-effort by design. | Yes. | Yes. |
| Reliable file transfer | No. # is the file protocol on FSQ. |
Yes, with whole-file verification. | Yes, with whole-file verification. |
| Letter that fits in one frame | 768 bytes. | 128 bytes. | 256 bytes. |
| Relay chain you may ask for | As long as you like — the route travels in the frame. | One hop. | One hop. |
| What the Channel page shows | Slots, and the admission ladder behind every reception. | Packet traffic. | Packet traffic. |
| Status | Shipped. | Shipped. | Experimental. Present only in a build compiled to offer it. |
JG25 is OpenJSQ's own packet waveform: continuous-phase 4-FSK carrying two bits per symbol, a slow protected header in front of every frame that names the speed and coding used, convolutional forward error correction over the body, and a CRC-32C the receiver checks before it will accept anything. It carries the whole service stack natively — chat with fragmentation, verified chat, reliable files with whole-file verification, custody mail, station actions, one-hop relay and delivery receipts.
It appears only in a build compiled to offer it. In a build without it, JG25 is reserved and unselectable, and the program says so rather than offering a waveform it cannot start; you will not see a JG25 button on the Radio page or a JG25 entry in the first-run wizard.
Seven modes, JG25-FM 1200 to JG25-FM 2400, named for their raw bit rate. This sets what you transmit, and only that — the frame header tells the receiver which mode was used, so the far station follows you automatically and the two of you do not have to agree in advance.
Faster modes pack more into the same bandwidth and survive less. On a weak or fluttery path a slower mode gets through where a faster one does not decode at all. JG25-FM 2400 is the narrowest margin of the set, and it is the default because it is the mode JG25 was validated at; if it struggles on a path, Robust acquisition is the first thing to try.
Spare bits sent alongside your data so the receiver can rebuild what the noise damaged without asking you to send it again. The rate is how much of the frame is your data:
| Setting | Rate | What it means |
|---|---|---|
| F0 | — | No spare bits at all. Fastest; a damaged frame is simply lost. The shipped default. |
| F1 | 3/4 | Three quarters of the frame is your data. |
| F2 | 2/3 | Two thirds is yours. |
| F3 | 1/2 | Half is yours. The most robust. |
Like speed, this is a choice about what you send: both stations choose independently and the header carries the answer. There is no automatic ladder yet — the pairing that suits the path is the operator's call, which is exactly why both controls are on the top bar as well as on the Radio page.
This section is about FSQ. AX1200 has one speed and JG25 has its own seven — section 16 covers those. The top bar's Mode box lists eleven FSQ modes. The first four are classic FSQ — every FSQ program ever shipped decodes them. The seven below the separator are OpenJSQ-only Fast modes: the same waveform run faster and wider. Changing mode restarts the radio (a transmission in progress finishes first).
| Mode | Effective baud | Channel allocation | Who can decode / what it wants |
|---|---|---|---|
| FSQ-2 | 1.95 | 430 Hz | Everyone (fldigi/FSQCall). The weak-signal workhorse — usable copy to about −16.5 dB. |
| FSQ-3 | 2.93 | 430 Hz | Everyone. The everyday default. |
| FSQ-4.5 | 3.91 | 430 Hz | Everyone. |
| FSQ-6 | 5.86 | 430 Hz | Everyone. The classic top speed. |
| FSQ-6W | 5.86 | 860 Hz | OpenJSQ only. FSQ-6's speed with double-spaced tones — extra multipath/drift tolerance, and it still shares the channel. |
| FSQ-12 | 11.7 | 1.3 kHz | OpenJSQ only; any band. |
| FSQ-16 | 15.6 | 1.7 kHz | OpenJSQ only; wants a quiet band. |
| FSQ-20 | 19.5 | 2.2 kHz | OpenJSQ only; quiet band. |
| FSQ-30 | 29.3 | 2.2 kHz | OpenJSQ only; wants a strong, clean signal — strength, not just quiet. |
| FSQ-36 | 35.2 | 2.6 kHz | OpenJSQ only; strong and clean. The practical top rung. |
| FSQ-42 | 41.0 | 3.0 kHz | OpenJSQ only; strong, clean, and a genuinely wide SSB filter. |
Every step up the ladder costs sensitivity, and predictably so: about 3 dB for each doubling of speed, 8.5 dB from the bottom rung to the top. The mode list's tooltips carry each mode's requirements. Beyond that physics, two rules keep the Fast modes civilized, and the app enforces both:
Unlike the Radio page, Settings stages your edits: nothing takes effect until Save & restart radio (theme and text size are the exceptions — instant). Show advanced settings reveals the extra cards. The cards run Station, Known callsigns, Automatic replies, Mail, Shared files, Presence, Channel courtesy, Receive coverage, Appearance, Alerts, Files & configuration and About; while FSQ is not the selected radio, the settings that apply only to FSQ are hidden and the page says so.
Callsign — the base call alone. A packet SSID such as -7 is not part of it: type one here and a note says so and Save is refused; pick the SSID on the Radio page instead. A callsign already saved with an SSID is kept, with a note asking you to remove it. Location (sent when asked), Station message (sent when asked). Advanced, and shown only while FSQ is selected: Check every message for corruption — adds a 5-character checksum to each message; off by default on the classic modes because fldigi shows those characters as line noise, always on in OpenJSQ-only modes.
Accept stored messages (mailbox), and Hold letters for other stations (the community-mailbox switch, on by default). Advanced: Give up on undelivered letters after (12 hours … 30 days, default 7 days — a ceiling, so a letter that arrived with a shorter deadline of its own keeps it) and Tell a station it has mail at most (every 30 s … 15 min, default 2 minutes). The second is not how often mail is delivered — a station that answers gets its letter at once; it is how often the “I am holding mail for you” notice may repeat, which is airtime everyone on the channel pays for.
The switch is not here. Sharing on/off, the folder, who may browse, the allow-list and serve-automatically all live on the Files page — one home for the whole file service, so no control exists in two places and can be set two ways. What this card carries is a read-only summary in the same words the Files page uses (“File sharing: On · 6 files offered · folder …”), a Manage in Files button that takes you there, and, under Show advanced settings, the five technical limits: Include subfolders (No), Largest file to serve (256 KB), Serve at most, per day (Unlimited), Each station may ask every (10 s) and Approval timeout (2 minutes). Section 11 covers all of it, including which of those limits protects the whole channel rather than just you.
One schedule for every waveform: Announce my presence plus Presence status. AX1200 carries the status in its beacon, JG25 in its presence announcement, and FSQ sends it as a status-bearing automatic Allcall line. Clear the status to get the classic bare FSQ sounding. The interval list also carries an Every minute entry marked (bench) — it is there for testing on a cable and is far too often for a shared channel.
Two advanced fields decide how long a station you have heard goes on counting, and they are not the same thing:
Sound when a message arrives (On/Off), and — important — Play alert sounds through. Point this at your speakers, never the radio's sound card: OpenJSQ detects that conflict and silences alerts rather than transmitting your chime, but naming the right device is better. Test sound checks it. The list starts with two entries that are not devices: System default output, and Silent (no sound) — the way to keep the arrival chime switched on while producing no sound at all, which is what you want on a machine sharing a room with the radio.
| Card | What's in it |
|---|---|
| Automatic replies | Whether your station answers signal/location/heard queries automatically (Answer signal / location / heard queries (every radio)); whether it answers a group's signal-report question and how often you may ask one group (Answer group signal report requests and Limit group signal report requests to one per group every — Automatically and 5 minutes by default; see Groups in section 9); and whether it carries relayed traffic and answers a request that reached you through a relay (Carry relayed traffic (FSQ, JG25) and answer relayed requests (AX1200, JG25)). Every automatic transmission appears in the conversation stream. This is not the same setting as AX1200 relay on the Radio page: that one decides whether you forward other people's AX1200 traffic onward; the relay choice here carries relayed traffic on FSQ and JG25 and decides whether AX1200 and JG25 answer questions that arrived by relay. |
| Channel courtesy (adv., FSQ) | In wide modes, wait for a clear channel: how long a wide-mode transmission waits for the whole channel to clear — Don't wait to Wait indefinitely, default 30 s. |
| Receive coverage (adv., FSQ) | Decoders running at once: everything the mode can hear, or at most 9, 7 or 5. Each one costs roughly 1.6% of a processor core, so the default is generous on a modern machine and worth trimming on an old netbook. The speeds classic stations use are never dropped. |
| Appearance | Colours (Dark/Light) and Text size (Normal/Large/Extra Large, with a live preview). Both instant. |
| Known callsigns (adv.) | A roster of callsigns your station has verified, with Add, Remove, pin, import and export. Exact matches can surface damaged traffic for your review — they never authorize automatic actions. Keep unpinned learned callsigns sets how long a callsign the station worked out for itself stays on the roster: 60 days by default, settable to 30, 90 or 180. Callsigns you typed in yourself, and any you have pinned, are kept regardless of this. Clear expired is what actually removes the ones past that age — nothing is deleted behind your back. |
| Files & configuration (adv.) | Folder for files (with Browse… and Open), Settings file with Open folder, and a note on portable installs. |
| About | Version, build, credits, license. |
A profile is one theater of operations — the shack, a POTA kit, an ARES deployment. Each one keeps its own callsign and radio setup, its own conversations, mail, network map, and files, and nothing crosses between them. If you operate in more than one situation, this is the feature that stops the situations contaminating each other.
| Per profile | Shared by the whole computer |
|---|---|
| Callsign and station identity · radio and audio setup · PTT and rig control · conversations · mail and Holding · file history · network map · theme | Text size — so a large-print setting follows you into every profile instead of needing to be set again in each one. |
Shack, Truck, Field Day beat Profile 2 at three in the morning.--instance NAME, which also stamps the name into the window title so you can tell them apart on the taskbar.)Everything a profile owns lives in one directory, which makes the whole station portable: copy it to the field laptop and you have the same setup, the same mail, and the same history. Settings → Files & configuration (under Show advanced settings) names it: the Settings file row prints the profile's openfsq.ini, and the Open folder button beside it opens the profile directory. It also makes backup obvious — copy the folder before a deployment, and a mistake in the field costs you nothing at home.
| What | Where |
|---|---|
| Your files folder | Documents\OpenJSQ\<profile-id> by default — the id is the profile's name in lower case with spaces turned into hyphens, so Field Day lives in field-day — change the base under Settings → Files & configuration → Folder for files. An older Documents\OpenFSQ in that default place is renamed to OpenJSQ on first start, and the move is noted in migration-log.txt inside it. |
| Newly received files, any radio | …\incoming. FSQ, AX1200 and JG25 share one destination because “what arrived?” matters more than which modem carried it. |
| Mailbox notes | …\mailbox for the classic flat-file mailbox material owned by that profile. |
| Deleted file material | …\deleted where applicable; the Deleted page is the operator-facing recycle bin. |
| This guide | <data folder>\help\OpenJSQ_Help.html, written fresh from the running program each time you press Help or F1, so it always describes the build that wrote it. |
| Settings & history | Inside the active profile's data folder. Settings → Files & configuration shows the exact settings path (under Show advanced settings). A portable install — a file named openjsq-portable.txt beside the program, in a folder that takes writes — keeps everything beside the program instead. |
fsq and ax1200 folders, because historical transfer rows already point to those paths. The first radio start after the change shows a one-time notice. New arrivals go to incoming; old files stay exactly where the old build put them.| Symptom | What to check |
|---|---|
| The RX meter never moves | The wizard's own words: the wrong input device is selected, the radio's volume is down, or the cable isn't connected. Radio → Audio input → pick the interface, press Refresh if it was plugged in late. Windows tip: check the device isn't muted in the sound control panel. |
| The radio won't start | The footer status line names the reason. “Set your callsign in Settings first.” means exactly that, on every radio. Could not start: followed by a device error means another program has the sound card, or it's unplugged. A card that was saved by name and is no longer connected is refused outright — Audio input '…' isn't connected. Plug it in or choose another card on the Radio page. — and the picker shows that choice as … - not connected, rather than opening whatever now holds its old position in the list. |
| Decodes but won't transmit | PTT. The Radio page's Live status card shows the PTT state; “PTT unavailable: … Receiving only” in the status bar means the keying method needs fixing — wrong serial port, or CAT keying with Backend still on None (the page warns in red). |
| Strong stations decode with characters missing from the middle | Look at Dropouts in the Radio page's Live status card. All zeros means the sound card is keeping up and the problem is on the air. A number that climbs while you watch means the machine is not feeding the sound card in time — another program competing for it, power saving, or a machine that is simply busy. Press Reset counters, change one thing, and watch whether it climbs again. |
| Everyone says you're splattering | Transmit level. Tune into a dummy load and back Drive off until ALC barely moves. If the hint line says Clipping, it's telling you the same thing. |
| Messages sit at “Queued” | The channel really is busy — or the busy detector is being touchy. The status bar will suggest it: raise Busy margin a little (Radio page, FSQ card), or set it to 0 to disable busy detection entirely. Per-slot states are on the Channel page. |
| Alert chime got transmitted / alerts are silent | OpenJSQ silences alerts when they're routed to the radio's own sound card and says so in the status bar. Point Settings → Alerts → Play alert sounds through at your actual speakers. |
| AX1200 file transfers keep failing | Radio page → advanced → File transfer pacing: set window to 1 and the wait to 4000 ms. If the errors stop, the radios were transmitting over each other's acknowledgments — raise listen toward 500 ms and re-widen the window gradually. |
| Dire Wolf connects but no frames ever pass | Almost always AGWPORT (8000) where KISSPORT (8001) was wanted — see section 6. A station aimed at the AGW port connects perfectly and then never passes a frame. |
| An external TNC hears nothing from you | Check KISS port on the Radio page. Single-radio TNCs and every handheld with one built in use port 0. See section 15: a multi-port TNC silently discards frames sent to a port with no radio on it. |
| The far end rejects every frame, but says the header looks perfect | On the built-in sound-card modem this is the PTT tail being shorter than your sound card's output latency: the transmitter is released while the end of the frame is still inside the sound card, so the closing flag and checksum never reach the air. Open Channel and read the AX1200 diagnostics — it prints both numbers side by side and tells you which way round they are. The fix is to raise Key-down tail (Radio page, advanced) above the reported latency. |
| Wide FSQ modes always lose the same characters | Start with Radio → Receive emphasis → Adaptive (recommended). Wide FSQ is sensitive to a receiver that rolls off the upper audio tones; Adaptive learns from the radio's idle audio, locks its choice during a signal, and remembers the learned slope for that radio profile. Use Manual de-emphasis correction only when you specifically need the fixed correction (including an AX1200 path); Off is right for genuinely flat audio. |
| A file transfer gives up having moved nothing | If OpenJSQ reports that the same block failed every round, the far station is not decoding at this speed — it is not a lost-packet problem that more retries will fix. Drop to a slower FSQ mode, or send a smaller file. |
| A relayed message says “unconfirmed” forever | Usually nothing is wrong. Unconfirmed means only that your station has not overheard the relay retransmitting — and most relays cannot be overheard from where you are. A relay needs no confirmation to work. Check Network → RELAY ACTIVITY on the relay's own station if you have access to it, or simply ask the recipient. |
| Nothing relays through your station | Two different switches. Radio → AX1200 relay decides whether you forward other stations' AX1200 traffic, and Settings → Automatic replies → Carry relayed traffic whether you forward it on FSQ and JG25; Settings → Automatic replies decides whether you answer questions that arrived via a relay. The RELAY ACTIVITY panel says which case you are in — if relaying is off it tells you so in as many words. |
| A relayed send is refused | Read the note line; it names the reason rather than failing quietly. The usual ones: more than one hop on AX1200 or JG25 (FSQ takes chains, they do not), a station appearing twice in the route, a route ending back at you, a file over 256 KB, or a shared-folder listing — which cannot be relayed at all yet. |
| Serial KISS won't connect (UV-PRO) | KISS TNC on, Digital Mode Enable off, radio paired; take the COM port OpenJSQ offers first — it prefers the port Windows reports as the outgoing side of the pair and never offers the incoming one, falling back to the higher-numbered port only when it cannot tell; close the radio's programming software (it holds the port); speed 9600. |
| “The profile … is already open in another OpenJSQ window” | Two windows may not share one profile (it would corrupt the databases). Close the other window, or start this one on a different profile. |
| A message shows ⚠ NOT VERIFIED | Not a malfunction — the honest grade for a marginal decode. Read it; Approve if it reads right, Discard if not. If you want fewer of these, move Receive effort toward Strict. |
| A failure only happens on the real radio | Before reproducing it, open Channel, tick Show advanced settings, then Record diagnostics. After the failure, press Save bundle…. The ZIP ties the last ten minutes of modem-input audio to the exact Channel-history rows and session configuration, which is far more useful than a screenshot of the symptom. |
| OpenJSQ will not start, and says something about a beta licence | Section 2 has all seven messages and what each one means. The two most common: the file is not named exactly openjsq-beta-license.json (Windows hides the extension, so a correct-looking file may really be …json.json), or the computer's clock is wrong. Press Open Data Folder in the dialog — it opens the folder the file belongs in. |
| It receives beautifully and never transmits, and nothing looks wrong | On a beta build, check the title bar. A callsign mismatch deliberately does not stop the program: you get a fully working receiver with the transmitter, presence, soundings and automatic replies all silenced. Make Settings → Station → Callsign match the callsign the licence was issued to. If that is not it, check Net mode is off and see Decodes but won't transmit above. |
| Your station is not relaying on AX1200 although the wizard said it would | Two switches, and the wizard only set one. Radio → AX1200 relay → Forward other stations' AX1200 traffic onward is AX1200's own, and it ships off. The wizard's “Carry other stations' messages” sets the station-wide consent that FSQ and JG25 read. Tick the AX1200 box as well. |
| Station actions get no reply, but only when a third station is relaying | A known rough edge in this build, reproducible on the bench: on a channel where all three stations hear each other and one of them has AX1200 relaying on, replies to Actions ▾ queries can fail to come back — with peer capability discovery timed out or they had nothing to send against them — while ordinary chat between the same two stations keeps working. Turning the third station's relay off restores them. On a channel where every station hears every other, nobody needs to relay anyway. |
| You cannot find the shared-folder settings any more | They moved to the Files page in this build — Share files on the action bar, or Settings → Shared files → Manage in Files. Settings keeps only the size, budget, rate and approval-timeout limits, plus a read-only summary. |
| Another station's file list opens nowhere | There is no window any more. The listing lands on the Files page under Browse a station, with the station preselected. Browse shows a list this session already has; only Refresh puts a fresh request on the air. |
| A station has no “Shares files” badge, but you think it shares | The badge needs positive evidence — a capability answer, a capability token, or a listing you have already decoded. Not having been told is not the same as “no”, so nothing is shown. Browse them anyway; that is how you find out, and it is allowed. |
| Your station refuses every request with “not offered” | Read Sharing activity on the Files page — it records the answer that actually went back. The usual causes: Sharing on is off, no folder is chosen, the asking station is outside Who may browse (the default admits only stations you have heard, so a station you have not yet decoded is refused), or an Ask me first question timed out. |
| A file in your shared folder is never served | The section names it: “county-map.png is over the 256 KB limit — a download will be refused”. Raise Largest file to serve under Settings → Shared files, or take the file out of the folder. Zero-byte and control-character-named files are never offered at all. |
| JG25 loses about four packets in ten, both directions | Transmit turnaround on the Radio page's JG25 panel. Keying again within a few tens of milliseconds of unkey damages the waveform before it leaves the transmitter; the default is 1.5 s and lowering it is what causes this. Recorded audio replayed offline loses the same packets, which is how you tell this apart from a receive problem. |
| A JG25 signal is plainly there and the Channel page shows nothing | On the Channel page tick Show advanced settings and Record diagnostics, and look again: failed receptions then appear as JG25 receive rows you can expand, naming which stage gave up. Without it, only receptions that became packets are drawn — see section 14. |
| A station's shared-file list never appears | A listing is fetched as a file transfer, and it is only recognised as a listing if it arrives within 15 minutes of your asking. A slow AX1200 link, a retried transfer or a walk away from the computer can push it past that, and then the listing is filed as an ordinary received file in …\incoming instead — no error, just nothing under Browse a station. Look in incoming for a file you did not expect, and ask again when the channel is quieter. |
| JG25 does not decode from a station you can hear clearly | Check you are both on the same build — the wire format is not frozen between betas. Then work down the list in section 7: radio processing off, wide FM, adaptive equalization on, drop a speed, raise the FEC, check drive. |
| There is no JG25 button on the Radio page | That is not a fault. JG25 is experimental and only appears in a build compiled to offer it. Where it is not offered, the entry is absent rather than present and refusing to start — and if something does ask for it, the program says “JG25 is reserved in this build…” rather than a vague error. |
| Where did my deleted thing go? | The Deleted page. Nothing you delete anywhere in OpenJSQ skips it. 30 days, then gone. |
| ALC | Automatic level control — the circuit that pulls back your transmitter when it is pushed too hard. On a data mode any ALC movement means you are overdriving: back the Drive slider off until the meter barely twitches. |
| Allcall | The everyone-on-frequency address. FSQ's version of calling CQ. |
| APRS | The Automatic Packet Reporting System, which shares the 1200-baud packet world. OpenJSQ has an APRS-coexistence profile that keeps it quiet on a shared APRS channel. |
| ARQ | Automatic repeat request — the receiver tells the sender what's missing, and only that is re-sent. How OpenJSQ moves files reliably. |
| AX.25 / AX1200 | The amateur packet-radio protocol, and OpenJSQ's 1200-baud implementation of it for VHF/UHF FM. |
| Custody | Responsibility for a mail letter. Exactly one thing releases it: the recipient's acknowledgment. |
| dB / SNR | Signal-to-noise ratio in decibels. OpenJSQ's figures are calibrated in a standard 3 kHz bandwidth: 0 is workable, +10 is comfortable, −10 is weak-signal territory. |
| De-emphasis | The treble roll-off an FM receiver applies to its audio. Fine for voice; it weakens the high tones of a wide data mode, which OpenJSQ can correct. |
| Digipeater | A packet station that repeats your AX.25 transmission to extend range; a path such as WIDE1-1 is a familiar APRS-style example. |
| Dire Wolf | A widely used software TNC that runs on a PC or Raspberry Pi. OpenJSQ connects to it over the network as a Network KISS TNC. |
| FEC | Forward error correction — extra parity sent alongside the data so the receiver can rebuild a damaged block without asking for it again. Used on AX1200 and JG25 file transfers, and selectable (F0–F3) on every JG25 frame. |
| FSQ | Fast Simple QSO, by ZL1BPU and ZL2AFP — a 33-tone HF keyboard mode built for weak, fading paths. OpenJSQ's FSQ is fully compatible with fldigi and FSQCall. |
| Heard list | The stations a receiver has decoded recently. The raw material of the network map. |
| ICS-213 | The standard general-message form used in emergency communications. OpenJSQ carries it as a fill-in sheet and renders a received one as a form card rather than a wall of text. |
| KISS | The simple protocol a computer uses to talk to a TNC — over serial, Bluetooth, or the network. Its KISS port number (0–15) selects which radio on a multi-radio TNC; single-radio TNCs use 0. |
| Link Quality | A per-station score, 0–100%, for how reliably that station's recent transmissions actually decoded here. It is built from what actually decoded, not converted from SNR; it works on every waveform, and grays when the evidence is old. |
| Margin | How many dB a reception sat above the measured decode threshold for the mode you are running. Positive is headroom; near zero means slow down. |
| Net mode | A temporary top-bar hold on automatic transmissions for a directed net. Presence, automatic query replies, and held-mail work wait; operator-initiated sends remain available. It resets off at application restart. |
| PTT / VOX | Push-to-talk — keying the transmitter. VOX keys automatically when audio is present; RTS/DTR keys via a serial control line; CAT keys through the rig-control link. |
| Peak over noise | The second figure on a Channel page decoder card, peak 18 dB over noise, beside its SNR. Related to but deliberately not the same as SNR — it describes the tones that decoder is hearing, not the strength of a decoded message. (Earlier builds showed it as Q.) |
| Realized speed | The characters per second (and words per minute) a reception actually achieved, as opposed to the mode's nominal rate. Always lower, because the frame's own overhead shares the airtime. |
| Shared files | A folder you deliberately offer to other JSQ stations, managed on the Files page. Requesters browse a listing and download by entry number; sharing is off by default and every request/answer is logged. |
| Simplex | One frequency, both directions, no repeater in between — the normal arrangement for packet, and for OpenJSQ on VHF. |
| Slot | One of several sub-channels FSQ stations share within a single SSB channel. OpenJSQ listens to all of them at once. |
| Sounding | A brief automatic station ID that keeps you on other stations' heard lists. Off by default in OpenJSQ. |
| SSID | The -0…-15 suffix on a packet callsign (for example N0CALL-7) distinguishing several AX.25 station identities that share one base call. |
| TNC | Terminal node controller — a packet modem. OpenJSQ has one built in (sound card) and also talks to external ones via KISS. |
Every default and limit the rest of this document mentions, in one place. None of these is something you have to set. They are the answers OpenJSQ already gives. Useful when someone asks "what is yours set to?", and useful for deciding what to change first.
| Busy margin | 3.0 dB above the noise floor before a slot counts as busy. 0 disables busy detection. Radio page, FSQ card. |
| Channel courtesy | Wide modes wait up to 30 s for the whole channel to clear, then go anyway. |
| Key-up lead / key-down tail | 100 ms each. The lead is raised to 300 ms automatically when you pick CAT keying. |
| Serial keying line | RTS, normal polarity (keys on a high line). |
| Unasked signal reports (AX1200) | Off. At most once every 30 s per station when on. Nothing at all over a KISS TNC. |
| Group signal reports | Answered automatically. You may ask one group once every 5 minutes; settable from no limit to 30 minutes. |
| KISS handover allowance | 1500 ms — how long a frame may still be inside the TNC before an acknowledgment counts as late. |
| AX.25 application identifier | APZJQ1. Digipeater path: empty. |
| AX1200 default chat delivery | Live. The chip on the compose row overrides it per message. |
| Presence (sounding) | Off. Nothing announces you until you choose an interval. |
| Net mode | Off, and deliberately never remembered — a station silenced for one net must not still be dark next week. |
| AX1200 relay hops you will forward | 2 by default, settable 1–8. Off unless you enable AX1200 relay. |
| Relayed route length you can send | FSQ: a chain. AX1200 and JG25: one hop. |
| File carried through a relay | 256 KB. |
| Relay duplicate memory | 10 minutes on AX1200 — how long a relay remembers traffic so it does not carry the same thing twice. |
| Network crawl | 6 queries, 2 hops deep, and it will not relay through a path weaker than +3 dB. |
| Receive effort | Balanced — the calibrated middle of five levels. |
| JG25 mode / FEC | JG25-FM 2400 and F0 (no FEC). Seven modes, JG25-FM 1200 to JG25-FM 2400; four FEC settings, F0–F3. |
| JG25 acquisition | Normal. Robust roughly doubles the preamble. |
| JG25 receive equalization | Adaptive, on. Branches at 0, +3, +4, +5, +6 and +8 dB/octave. |
| JG25 carrier-detect offset | 0 dB, settable −6 to +12 dB. |
| JG25 tones | Four per mode, each set falling between about 475 Hz and 2600 Hz; the widest, JG25-FM 2400, spans 500–2600 Hz. Header 950/1350/1750/2150 Hz at 350 baud. |
| Receive emphasis | Adaptive. Manual's corner frequency defaults to 210 Hz, settable 50–1000 Hz. |
| Sound-card sample rate | 48000 Hz. The decoders run at 16000 Hz regardless; OpenJSQ resamples. |
| CAT polling | Every 1000 ms, and stopped while transmitting. |
| Spectrum display floor | −70 dBFS. Display only; it changes nothing about decoding. |
| Link Quality | Grays after 30 minutes without a scored reception. The score itself is never decayed. |
| Diagnostic recording | A rolling 10 minutes of receive audio, when switched on. |
| Fits in one frame | 768 bytes on FSQ, 256 bytes on JG25, 128 bytes on AX1200. Above that a letter travels as a file transfer. |
| Largest letter | 256 KB. Past that, send it from the Files page. |
| Undelivered letters expire | 7 days. Settable 12 hours – 30 days. |
| “You have mail” notice | At most once per recipient every 2 minutes. Settable 30 s – 15 min. |
| Receipts kept | 30 days. |
| Holding for others | On. Your own letters are always held by your own station regardless. |
| Nearby / forgetting | A station stops counting as nearby after 2 hours and is forgotten entirely after 24 hours. |
| Learned callsigns kept | 60 days, unpinned only. Pinned and hand-entered callsigns are kept indefinitely. |
| Text file from a chat (FSQ) | 8 KB. |
| AX1200 file size limits | 64 MB in, 64 MB out. Settable 1–4096 MB. |
| Blocks in flight | 16 by default — the shipped window. The protocol itself allows up to 32 before the sender must stop and ask what is missing, so raising the window above 32 buys nothing. |
| AX1200 file error correction | 16 data blocks, 4 repair blocks. Clamped at 32 and 16. |
| Concurrent transfers | 16 in, 4 in from any one sender, 16 out. |
| Shared files | Off. Once on: browsable by stations you have heard, served automatically, subfolders excluded, 256 KB per file, no daily cap, one request per station per 10 seconds, and an Ask-me-first question that expires after 2 minutes. |
| “Shares files” badge | Shown only on positive evidence. A decoded listing holds the stronger form for 24 hours. |
| Conversation drawn at once | The newest 200 lines, then 200 more per Show 200 more (fewer, when fewer are left). |
| JG25 transmit turnaround | 1.5 s, settable 0–30 s. |
| Deleted items | Kept 30 days, then really gone. |
| Dire Wolf KISS port | 8001. Not 8000 — that is AGW, a different protocol, and a station pointed at it connects and then never passes a frame. |
| KISS port number | 0, unless your TNC documents otherwise. |
| Serial KISS speed | 9600 — the BTECH default, and the cable speed only. The radio still transmits at 1200 baud. |
| FSQ compatibility slot | 1500 Hz, which is where fldigi and FSQCall listen. |
OpenJSQ by Jerome Goddard II (W4IJG) · Copyright © 2026, All Rights Reserved · current OpenJSQ source is distributed under the repository's proprietary license; third-party material keeps its own license terms. FSQ was designed by Murray Greenman ZL1BPU and Con Wassilieff ZL2AFP.
Describes OpenJSQ 1.0 as shipped, September 2026 — what the program does today, not what is planned. Labels quoted in blue match the program's own text. Build reference: the text was checked against commit b0c8b01a on main, 15 September 2026, and the Help button that opens this guide, and the JG25 button in the Radio page's basic view, arrived in the build of 16 September. The screenshots were taken the same day from that commit, compiled with the experimental JG25 provider enabled so its controls could be photographed, on a bench of two stations (N1TSA and N1TSB) joined by a virtual audio cable; where a picture and the text disagree, the text is current.