Documentation

Everything you need to get up and running with ContestLogX.

1. Getting Started

Install Dependencies (Ubuntu/Debian)

sudo apt install cmake qt6-base-dev libqt6serialport6-dev libqt6xml6-dev

Build & Run

make        # build
./clx       # run

First-Time Setup

  1. On first launch, go to File → Settings and enter your callsign, name, and QTH.
  2. Download the DXCC database via File → Download cty.dat. This is required for DXCC multiplier scoring.
  3. Optionally download the Super Check Partial database via File → Download master.scp for callsign checking.
  4. Select a contest via File → New Log, choose your contest and station class, then fill in any required exchange information.

Supported Contests

ContestLogX ships with built-in modules for the following contests:

  • North American QSO Party (NAQP) — CW, SSB, RTTY
  • ARRL 10-Meter Contest
  • ARRL DX Contest
  • ARRL VHF Contest
  • CWops CWT (CW Mini Test)
  • YB DX Contest
  • EU DX Contest
  • Minnesota QSO Party (MNQP)
  • Winter Field Day
  • General DXCC (open-ended DXCC tracking)

Additional contests can be added by dropping a JSON definition file into the contests/ directory — no recompilation needed.

2. Rig Control via flrig

ContestLogX integrates with flrig for rig control. When connected, frequency and mode are polled automatically and reflected in the logging entry fields.

Setup Steps

  1. Start flrig and connect it to your radio.
  2. In flrig, go to Config → Server, enable the XML-RPC server, and note the port (default: 12345).
  3. In ContestLogX, go to Rig → flrig Connection.
  4. Enter localhost as the host and 12345 as the port, then click Connect.
  5. The status bar will show the current frequency and mode (e.g., 14025.0 CW), updated every 500 ms.

Troubleshooting

  • Connection refused: flrig is not running, or the XML-RPC server is not enabled.
  • Frequency shows 0: Check the port number and verify flrig is responding. You can test with:
    curl -X POST http://localhost:12345/RPC2 \
      -H "Content-Type: text/xml" \
      -d '<?xml version="1.0"?><methodCall><methodName>rig.get_vfo</methodName></methodCall>'
  • Debug mode: Run ./clx --debug and enable flrig debug messages from the Debug menu to see full XML-RPC traffic.

3. Logging a QSO

The entry row at the top of the log accepts QSO data. Fields vary by contest but always include callsign, frequency/band, mode, and exchange data.

Entry Workflow

  1. Type the callsign in the CALL field.
  2. Press Tab or Space to move to the next field. Call history and dupe checking run automatically.
  3. Fill in received exchange fields (RST, name, state, serial, etc.).
  4. Press Enter to log the QSO. The entry row clears and the QSO is appended to the log.

Sorting the Log

Click any column header to sort the log by that field — click again to reverse the order. The status bar shows the active sort (e.g., Sorted by CALL ▲). The sort resets to chronological order automatically when you start typing a new callsign.

Filtering the Log

Press Ctrl+F (configurable in Preferences → Shortcuts) to open the filter bar. Type any substring to narrow the log to matching QSOs — the search covers callsign, mode, exchange, comment, and frequency. The status bar shows Filter: N of M QSOs while a filter is active. Press Escape, click the clear button, or start typing in the entry fields to dismiss the filter.

Dupe Checking

Duplicate checking is contest-aware. Depending on the contest definition, dupes may be checked per-band, per-mode, per-band-and-mode, or across the whole contest. A visual indicator highlights duplicate callsigns before you log.

Score Display

The score widget updates in real time showing QSO count, multipliers, and total score broken down by band and mode. Multipliers are tracked as named mults (e.g., states/provinces), DXCC entities, grid squares, or ITU regions depending on the contest.

4. Call History & Exchange Autofill

ContestLogX maintains a persistent call history database. When you enter a callsign, exchange fields (name, state, QTH, CWops ID, grid, etc.) are automatically pre-filled from previous QSOs — across contests and sessions.

How It Works

  1. Enter a callsign and press Tab or Space.
  2. If the call is in history, matching exchange fields are auto-populated.
  3. Accept the values or type over them, then log as normal.
  4. On save (with auto-save enabled), operator data from all QSOs is merged back into history.

Managing History

Go to File → Manage Call History to:

  • Browse all stored records in a sortable table
  • Double-click or right-click any record to edit or delete it
  • Toggle call history insertion on/off
  • Toggle auto-save on/off
  • Clear all history

What Gets Stored

Static operator info is stored: name, QTH, state/province, CWops ID, grid square. Per-QSO data (date, band, RST, serial numbers, points) is never stored in history.

5. CW & SSB Memories

ContestLogX supports eight programmable message memories (F1–F8). CW messages are sent via your keyer interface; SSB messages use the system text-to-speech (TTS) engine — no audio recordings to manage.

Token Substitution

Both CW and SSB memories support token substitution. The following tokens are expanded at send time:

  • {CALL} — callsign in the entry field
  • {MYCALL} — your station callsign
  • {SN} / {SNs} / {serial} — next outgoing serial number

For SSB memories, {CALL} and {MYCALL} are automatically converted to NATO phonetics before being sent to TTS (e.g., "Kilo One Alpha Bravo Charlie"). CW memories send the expanded text literally.

Typical Memory Layout

F1  CQ TEST N9OH N9OH
F2  {CALL} 5NN {SN}
F3  TU N9OH
F4  {CALL}
F5  ?
F6  AGN?
F7  QRZ?
F8  N9OH

6. Importing & Exporting Logs

ContestLogX supports both import and export for Cabrillo and ADIF formats.

Export

  • Cabrillo — standard format for contest submission to sponsors (ARRL, CQ, etc.)
  • ADIF — standard format for uploading to Logbook of the World (LoTW), QRZ, eQSL, and others

Access via File → Export and choose the desired format.

Import

Existing logs in Cabrillo or ADIF format can be imported into ContestLogX via File → Import. This is useful for migrating logs from other software or re-scoring old contest logs.

Cabrillo import is preferred over ADIF for contest logs. ADIF is a general-purpose format and does not have standard field names for contest-specific exchanges (e.g., state, serial number, power category). ContestLogX can only map a small set of well-known ADIF fields; non-standard fields used by other loggers are not recognized, and contest exchange fields will often be empty after an ADIF import.

Cabrillo files contain the exchange data in a structured, contest-specific format and import cleanly. If your logging software can export both formats, use Cabrillo for importing contest logs into ContestLogX.

7. Creating Custom Contest Modules

Every contest in ContestLogX is defined by a JSON file in the contests/ directory. You can add support for any contest — including regional and club-sponsored events — by creating a new JSON file. No recompilation is needed.

→ Full Contest Module Format Reference — complete field-by-field documentation with examples from all built-in contest modules.

File Structure Overview

{
  "contest": {
    "name": "My Contest",
    "abbreviation": "MYC",
    "modes": ["CW", "SSB"],
    "bands": ["40m", "20m", "15m", "10m"]
  },
  "frequencies": { ... },
  "stationClasses": { ... },
  "exchangeFields": { ... },
  "scoring": {
    "qsoPoints": { ... },
    "multipliers": [ ... ],
    "finalScore": "SUM(points) * namedMults"
  },
  "validation": {
    "namedMults": ["CA", "OR", "WA", ...]
  },
  "dupeChecking": { ... }
}

Multiplier Types

  • namedMults — exchange field values validated against a list (e.g., US states, ARRL sections)
  • dxccMultipliers — DXCC entities, scored once per contest or once per band
  • ituRegions — ITU regions per band
  • namedCallPrefixes — specific callsign prefixes (e.g., YB0–YB9)
  • gridSquareMultipliers — Maidenhead grid squares per band (used in VHF contests)

Multiplier Scope

  • multsOnce — counted once for the whole contest
  • multsPerBand — a new multiplier on each band
  • multsPerMode — a new multiplier on each mode
  • multsPerBandAndMode — a new multiplier per band/mode combination

QSO Scoring Rules

Points are assigned based on the geographic relationship between stations. Rules are evaluated in the order listed in the precedence array — the first match wins.

"qsoPoints": {
  "sameDxccEntity":     { "CW": 1, "SSB": 1 },
  "sameContinent":      { "CW": 2, "SSB": 1 },
  "differentContinent": { "CW": 3, "SSB": 2 }
},
"precedence": [
  "sameDxccEntity",
  "sameContinent",
  "differentContinent"
]

Final Score Formula

A formula string in the scoring.finalScore field controls how the final score is calculated, e.g.:

"finalScore": "SUM(points) * (namedMults + dxccMultipliers)"

Installing a New Module

Drop your .json file into the contests/ directory next to the application, then restart ContestLogX. Your contest will appear in the File → New Log dialog.

8. CLX File Format

ContestLogX saves logs in the .clx format — a human-readable JSON file that is easy to inspect, back up, and version-control. It stores all contest and station metadata alongside the full QSO list.

Top-Level Structure

{
  "metadata": {
    "contestFile": "naqp.json",
    "stationClass": "SO_UNASSISTED_CW",
    "version": "1.0"
  },
  "station": {
    "callsign": "N9OH",
    "name": "Steve",
    "qth": "FL"
  },
  "categories": { ... },
  "qsos": [ ... ]
}

Because .clx is plain JSON, you can inspect it in any text editor, query it with jq, or import it into scripts for post-contest analysis.

9. Data Files & Storage Locations

User Data

Linux:   ~/.local/share/ContestLogX/
macOS:   ~/Library/Application Support/ContestLogX/
Windows: %APPDATA%\ContestLogX\
  • cty.dat — DXCC database (download via File → Download cty.dat)
  • master.scp — Super Check Partial callsign database (optional, download via File → Download master.scp)
  • history.json — call history records (auto-maintained)

Configuration

Linux:   ~/.config/ContestLogX/ContestLogX.json
macOS:   ~/Library/Preferences/ContestLogX/ContestLogX.json
Windows: %APPDATA%\ContestLogX\ContestLogX.json

Application settings including rig connection details, call history preferences, and window layout are saved here automatically.

Debug Logging

Run with ./clx --debug --log <logfile.clx> to enable verbose logging to clx_debug.log in the current directory. Useful for diagnosing rig control and scoring issues.