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.