WaveLogGate DJ7NT
winget install --id=DJ7NT.WaveLogGate -e Gateway for connecting WSJT-* and FLRig to Wavelog
winget install --id=DJ7NT.WaveLogGate -e Gateway for connecting WSJT-* and FLRig to Wavelog
WavelogGate is a desktop gateway application that connects amateur radio logging software (WSJT-X, FLDigi) and radio control hardware (FLRig, Hamlib) to the Wavelog web logging platform.
Built with Go + Wails v2 + Svelte. Ships as a single self-contained binary — no runtime dependencies.
Pre-built packages are published with every GitHub release.
| Distribution | Package | WebKit variant |
|---|---|---|
| Debian / Ubuntu | .deb | webkit4.0 (Ubuntu 22.04) or webkit4.1 (Ubuntu 24.04+) |
| Fedora / RHEL / openSUSE | .rpm | webkit4.0 or webkit4.1 |
Download the package matching your system's WebKit version and install it with your package manager:
sudo dpkg -i wavelog-gate__webkit4.1_amd64.deb
sudo dnf install wavelog-gate--webkit4.1.x86_64.rpm
sudo zypper install wavelog-gate--webkit4.1.x86_64.rpm
Two AUR packages are available and automatically updated on every release:
| Package | Description |
|---|---|
waveloggate-bin | Installs the pre-built binary from the GitHub release |
waveloggate-git | Builds from source using the latest tagged release |
Install with your AUR helper of choice, for example:
yay -S waveloggate-bin
# or
yay -S waveloggate-git
Download the .dmg for your architecture (arm64 for Apple Silicon, amd64 for Intel) and drag the app to /Applications.
Download the .exe for your architecture and run it directly — no installer required.
| Port | Protocol | Direction | Purpose |
|---|---|---|---|
| 2333 (configurable) | UDP | Inbound | QSO log packets from WSJT-X / FLDigi |
| 54321 | HTTP | Inbound | QSY requests from Wavelog (GET /{freq}/{mode}) |
| 54322 | WebSocket | Outbound | Live radio status broadcast |
If any of these ports is already in use, a message is shown in the Status tab. Stop the conflicting application and restart WavelogGate.
| Field | Description |
|---|---|
| URL | Full Wavelog URL including index.php, e.g. https://log.example.com/index.php |
| API Key | Wavelog API key (found in Wavelog → Settings) |
| Station | Station profile dropdown — populated automatically from Wavelog after entering URL and key |
| Radio name | Name sent with radio status updates (default: WLGate) |
Press ↻ to reload the station list without leaving the field.
Select the backend that matches your setup:
| Type | Description |
|---|---|
| None | No radio control — WavelogGate only forwards UDP log entries |
| FLRig | Connects to a running FLRig instance via XML-RPC |
| Hamlib | Connects to a running rigctld daemon via TCP |
Enter the Host and Port for the chosen backend. Defaults are 127.0.0.1:12345 (FLRig) and 127.0.0.1:4532 (Hamlib).
Set MODE on QSY — when Wavelog sends a QSY request, also change the radio mode (LSB below 8 MHz, USB above).
Ignore Power (Hamlib only) — skip reading TX power, useful for rigs where Hamlib reports power unreliably.
Max Power (Hamlib only) — Hamlib reports TX power as a level from 0.0 to 1.0 rather than
in watts, so it has to be scaled. Leave this blank and WavelogGate asks Hamlib to do the
conversion itself (power2mW), which stays correct on radios whose maximum output differs per
band. Set a value in watts to override that — needed when you run an amplifier or transverter,
or when Hamlib's figure for your radio is wrong. If your radio's backend cannot do the
conversion and no value is set, power is simply not reported.
| Button | Action |
|---|---|
| 💾 Save | Save the current profile settings to disk |
| Profiles | Open the profile manager (create / rename / delete / switch) |
| Test | Send a demo QSO to Wavelog's dry-run endpoint to verify connectivity |
| ⚙ Advanced | Configure UDP port and enable/disable the UDP listener |
| Quit | Exit the application |
WavelogGate supports multiple named configuration profiles. A minimum of two profiles must exist at all times.
Unsaved field changes are lost when switching profiles — save first if needed.
localhost (or the WavelogGate machine IP)2333> Use Secondary UDP Server only — the primary server sends binary protocol packets that WavelogGate does not handle.
localhost and port to 2333127.0.0.1, port 12345, and save.Start rigctld for your radio, for example:
# Icom IC-7300 on USB serial
rigctld -m 3073 -r /dev/ttyUSB0 -s 115200 -t 4532
# Kenwood TS-2000
rigctld -m 2 -r /dev/ttyUSB0 -s 4800 -t 4532
Find your radio's model number with rigctl -l. In WavelogGate, set Radio type to Hamlib, host 127.0.0.1, port 4532, and save.
WavelogGate can control an antenna rotator via a running rotctld (Hamlib) daemon.
In the Config → Rotator section:
| Field | Description |
|---|---|
| Host | IP address of the rotctld host (leave empty to disable rotator) |
| Port | TCP port of rotctld (default: 4533) |
| Threshold Az | Minimum azimuth change in degrees before a move command is sent (default: 2°) |
| Threshold El | Minimum elevation change in degrees before a move command is sent (default: 2°) |
| Park Az / El | Target position for the Park command (degrees) |
Save the profile after changing these fields. The rotator panel in the Status tab only appears when a host is configured.
ROTATOR ● connected
Az: 123.4° El: 45.0°
○ Off ● HF Az: 270°
○ SAT Az: 180° El: 30°
[Park]
lookup_result WebSocket message).satellite_position WebSocket message).Start rotctld for your rotator, for example:
# Yaesu G-5500 via serial
rotctld -m 603 -r /dev/ttyUSB0 -s 9600 -t 4533
# Dummy rotator for testing
rotctld -m 1 -r /dev/null -t 4533
Find your rotator's model number with rotctl -l. In WavelogGate, set Host 127.0.0.1, Port 4533, and save.
When Wavelog sends bearing data over the WebSocket connection (port 54322), WavelogGate forwards it to the rotator according to the active follow mode:
| WS message type | Follow mode | Action |
|---|---|---|
lookup_result (contains azimuth) | HF | Move to the reported azimuth |
satellite_position (contains azimuth + elevation) | SAT | Move to the reported az/el |
Bearing updates are rate-limited (150 ms minimum between moves). The bearing display in the Status tab updates immediately regardless of follow mode.
WavelogGate can launch and manage its own rigctld process — useful if you want a single application to handle everything without running a separate daemon.
rigctld must be available on the system. WavelogGate searches in this order:
~/.config/WavelogGate/hamlib/rigctld[.exe] — a previously downloaded managed copy/opt/homebrew/bin/, /usr/local/bin/)PATHWindows — click Download in the Internal Hamlib settings to automatically fetch rigctld.exe and its DLLs from the latest Hamlib GitHub release.
macOS — install via Homebrew:
brew install hamlib
Linux — install via your package manager:
# Debian / Ubuntu
sudo apt install hamlib-utils
# Fedora / RHEL
sudo dnf install hamlib
# Arch / Manjaro
sudo pacman -S hamlib
After installing, click Detect in the Internal Hamlib settings so WavelogGate can locate the binary.
Enable Internal Hamlib (select InternalHamlib as Radio type). The following fields become available:
| Field | Description |
|---|---|
| Radio model | Hamlib model number — use the search box to find your radio (e.g. IC-7300 → model 3073) |
| Serial port | Device path (e.g. /dev/ttyUSB0, /dev/cu.usbserial-*, COM3) |
| Baud rate | Serial baud rate matching your radio's CI-V / CAT setting |
| Parity | Serial parity: none, odd, or even (default: none) |
| Stop bits | Number of stop bits (0 = default; typically 1 or 2) |
| Handshake | Flow control: none, rtscts, or xonxoff (default: none) |
| rigctld port | TCP port that the managed rigctld will listen on (default: 4532) |
WavelogGate automatically passes these settings to rigctld and monitors the process. Status is shown in the Status tab (Stopped / Starting… / Running / Error: …).
rigctld process is stopped and restarted whenever you switch profiles or change the Internal Hamlib settings.rigctld exits unexpectedly the status changes to Error with a diagnostic message; fix the configuration and save to restart.rigctld on the same port to poll frequency and mode — no separate Hamlib entry is needed./dev/cu.usbserial-*; use the serial port dropdown to enumerate detected ports.Any client can connect to ws://localhost:54322 to receive live radio status:
{
"type": "radio_status",
"frequency": 14225000,
"mode": "USB",
"power": 100,
"radio": "WLGate",
"timestamp": 1700000000000
}
A {"type":"welcome","message":"..."} message is sent on connect, followed immediately by the last known radio status.
WavelogGate can emit successfully logged QSO as a Wavelog-native ADIF datagram to a configurable UDP destination. This is useful for forwarding QSOs to a second application (e.g. a local logger, a contest/awawrd-collector or display tool) without having that application talk directly to Wavelog.
This only works for QSOs which are logged on the Wavelog-Site. e.g.: You log a QSO on your instance (while WavelogGate runs and is connected via Websocket) --> QSO is locally emitted to the configured Host/Port if enabled. Emitting QSOs which are alreadt generated locally (e.g.: via WSJT-X) doesn't make any sense. They're already locally
Enable and configure via ⚙ Advanced:
| Field | Description |
|---|---|
| UDP Emit | Enable / disable broadcast |
| Host | Destination host (default: 127.0.0.1) |
| Port | Destination UDP port (default: 2334) |
Each datagram contains the ADIF string for the QSO which was logged within Wavelog. The feature is disabled by default and persisted per global config (not per profile).
Port conflict — another application is using port 2333, 54321, or 54322. Find it with lsof -i : (macOS/Linux) or netstat -ano | findstr : (Windows) and stop it.
Station dropdown empty — check that the Wavelog URL (including index.php) and API key are correct, then press ↻.
Test returns "wrong URL" — the URL points to a page that returns HTML instead of JSON. Ensure the path ends with index.php.
No QSOs appearing — in WSJT-X, make sure you're using the Secondary UDP server, not the primary one.
| Tool | Version | Install |
|---|---|---|
| Go | 1.23+ | https://go.dev/dl/ |
| Wails CLI | v2.x | go install github.com/wailsapp/wails/v2/cmd/wails@latest |
| Bun | any | https://bun.sh |
-tags webkit2_41cd WavelogGate-Go
wails dev
This starts a live-reload server — Go and Svelte changes are picked up automatically.
wails build
The binary is placed in build/bin/. On macOS it produces a .app bundle, on Windows an .exe, on Linux a standalone binary.
| Flag | Effect |
|---|---|
-clean | Clean build cache before building |
-platform windows/amd64 | Cross-compile for Windows |
-nsis | Generate Windows NSIS installer (requires NSIS) |
-upx | Compress binary with UPX |
Example:
wails build -clean -platform darwin/arm64
New contributors should base their work on the master branch, which tracks ongoing development.
git clone https://github.com/wavelog/WaveLogGate.git
cd WaveLogGate
Before starting on a feature or fix, check the open pull requests and issues to see what is currently being worked on and avoid duplicating effort.