A cross-platform ham radio logging application written in Rust using egui.
- Contact logging with callsign, name, QTH, band, mode, frequency, RST, grid square, notes
- Local SQLite database storage (default)
- Remote database support (PostgreSQL, MySQL)
- QRZ.com callsign lookup with encrypted credential storage
- ARRL Logbook of the World (LoTW) integration — check confirmations, mark submitted/confirmed
- ADIF export (LoTW-compatible with STATION_CALLSIGN, MY_GRIDSQUARE, SUBMODE)
- Cabrillo export (contest format)
- Search and filter contacts
- Transceiver control via Hamlib rigctld (CAT/CIV)
- Cross-platform support (Windows, Linux, macOS)
- Rust (1.70 or later): https://rustup.rs/
- Cargo (included with Rust)
# Ubuntu/Debian sudo apt update sudo apt install build-essential pkg-config libssl-dev # Fedora sudo dnf install gcc pkg-config openssl-devel # Arch Linux sudo pacman -S base-devel pkgconf openssl- Xcode Command Line Tools:
xcode-select --install- Visual Studio Build Tools or Visual Studio (with C++ workload)
- OR MinGW-w64
# Clone the repository git clone https://github.com/yourusername/qsolink.git cd QSOLink-client # Build in debug mode cargo build # Build in release mode (optimized) cargo build --release# Debug mode cargo run # Release mode cargo run --release# Linux/macOS cargo install --path . # Windows cargo install --path . --forceThe application automatically creates a qso.db file in the current directory.
- Click "Database Settings" in the toolbar
- Select database type (PostgreSQL or MySQL)
- Enter connection string:
- PostgreSQL:
postgres://user:password@localhost:5432/qsolog - MySQL:
mysql://user:password@localhost:3306/qsolog
- PostgreSQL:
- Click "Test Connection" to verify
- Click "Connect" to switch to remote database
- Click "LoTW Settings" in the toolbar
- Enter your LoTW username and password (same as your ARRL account)
- Enter your station callsign and grid square
- Click "Save & Close"
- On app start and every 60 minutes, QSOLink automatically syncs with LoTW to check for confirmations
- To export contacts for LoTW signing: click "Export ADIF" and open the file in TrustedQSL (TQSL) to apply your digital signature and upload to LoTW
- Click "QRZ Settings" in the toolbar
- Enter your QRZ.com username and password
- Click "Save & Close"
- Credentials are encrypted using AES-256-GCM before storage
# Ubuntu/Debian sudo apt update sudo apt install hamlib rigctl # Fedora sudo dnf install hamlib rigctl # Arch Linux sudo pacman -S hamlibbrew install hamlibDownload Hamlib from: https://sourceforge.net/projects/hamlib/files/hamlib/4.7.0/
# For Icom IC-7300 (USB serial) rigctld -m 1024 -r /dev/ttyUSB0 -s 115200 -T localhost -t 4532 # For Icom IC-705 rigctld -m 1029 -r /dev/ttyUSB0 -s 115200 -T localhost -t 4532 # For Yaesu FT-991A rigctld -m 135 -r /dev/ttyUSB0 -s 38400 -T localhost -t 4532 # For Kenwood TS-480 rigctld -m 305 -r /dev/ttyUSB0 -s 4800 -T localhost -t 4532 # For Elecraft K3 rigctld -m 2041 -r /dev/ttyUSB0 -s 38400 -T localhost -t 4532Common rig model numbers:
1024- Icom IC-73001029- Icom IC-705135- Yaesu FT-991A305- Kenwood TS-4802041- Elecraft K3
See rigctl --list for full list of supported rigs.
- Start rigctld with your radio connected
- Click "Rig Settings" in the toolbar
- Enter host (default: localhost) and port (default: 4532)
- Click "Connect"
When connected:
- The header shows a green indicator with current frequency
- Frequency and mode auto-populate in the contact form
- The indicator turns red when disconnected
- Click "Export ADIF" in the toolbar
- File is saved as
qso_YYYYMMDD.adif
- Click "Export Cabrillo" in the toolbar
- File is saved as
qso_YYYYMMDD.cabrillo
QSOLink-client/ ├── src/ │ ├── app.rs # Main UI application │ ├── db.rs # SQLite database operations │ ├── export.rs # ADIF/Cabrillo export │ ├── lotw.rs # ARRL LoTW API client and ADIF parser │ ├── models.rs # Data models, validation, ADIF mode info │ ├── qrz.rs # QRZ.com API client │ ├── remote_db.rs # Remote database support │ ├── rigctl.rs # Hamlib rigctld client │ ├── security.rs # Credential encryption, station profile persistence │ └── main.rs # Entry point ├── Cargo.toml # Dependencies └── Cargo.lock # Locked dependencies - QRZ.com credentials are encrypted with AES-256-GCM
- SQL injection protection via parameterized queries
- Input validation on all user fields
MIT License - See LICENSE file
See TODO.md for the full list.