Skip to content

vincois/wsjtx-udp-bridge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WSJT-X UDP Bridge

A cross-platform GUI application that acts as a UDP splitter/bridge for WSJT-X, allowing you to forward WSJT-X UDP traffic to multiple ham radio applications simultaneously (HAMRS, GridTracker, JTAlert, Log4OM, etc.).

Python Platform License

The Problem

WSJT-X only allows you to configure a single UDP output destination. If you want multiple applications to receive WSJT-X data (e.g., HAMRS for logging and GridTracker for monitoring), you need something in the middle to split that traffic.

Some applications like HAMRS are also particular about which port they listen on, making direct connections difficult when multiple apps are involved.

The Solution

This bridge sits between WSJT-X and your other applications:

                          ┌──→ HAMRS (port 2237)
WSJT-X ──→ UDP Bridge ──├──→ GridTracker (port 2333)
           (port 2238)   ├──→ GridTracker ADIF (port 9876)
                          └──→ JTAlert (port 2442)

Features

  • One-to-many UDP forwarding — Send WSJT-X data to as many apps as you need
  • Per-destination bidirectional mode — Apps like GridTracker can send commands back to WSJT-X (e.g., clicking a callsign in the Call Roster)
  • Automatic heartbeat generation — Keeps destination apps connected even if WSJT-X heartbeats are delayed
  • WSJT-X protocol awareness — Parses and displays message types (Heartbeat, Status, Decode, QSO Logged, etc.)
  • Live packet log — See all traffic flowing through the bridge in real time
  • Persistent configuration — Your settings are saved between sessions
  • No dependencies — Uses only Python standard library (no pip installs needed)
  • Cross-platform — Works on Windows, macOS, and Linux

Requirements

  • Python 3.7 or later
  • Tkinter (included with most Python installations)

Checking Your Setup

python3 --version      # Should be 3.7+
python3 -c "import tkinter; print('Tkinter OK')"

On some Linux distributions, you may need to install Tkinter separately:

# Debian/Ubuntu
sudo apt install python3-tk

# Fedora
sudo dnf install python3-tkinter

Installation

git clone https://github.com/vincois/wsjtx-udp-bridge.git
cd wsjtx-udp-bridge

Usage

1. Launch the Bridge

python3 wsjtx_udp_bridge.py

2. Configure WSJT-X

In WSJT-X, go to File → Settings → Reporting and set:

  • UDP Server: 127.0.0.1
  • UDP Server port number: 2238 (or whatever port the bridge is listening on)
  • Accept UDP requests: ✓ (checked, if you want bidirectional support)

3. Add Destinations

Click Add in the bridge to add your applications:

App Name IP Port Bidirectional
HAMRS 127.0.0.1 2237 No
GridTracker 127.0.0.1 2333 Yes
GridTracker ADIF 127.0.0.1 9876 Yes

4. Start the Bridge

Click ▶ Start and you should see packets flowing in the log.

Bidirectional Mode

Some applications need to send commands back to WSJT-X. For example, clicking a callsign in GridTracker's Call Roster tells WSJT-X to reply to that station.

Enable bidirectional mode per-destination:

  • Check the Bidirectional checkbox when adding/editing a destination, or
  • Select a destination and click Toggle Bidir

One-way (→) is fine for passive logging apps like HAMRS. Use bidirectional (↔) for interactive apps like GridTracker or JTAlert.

Note: Bidirectional changes require a Stop/Start of the bridge to take effect.

Testing Without WSJT-X

Two test scripts are included for verifying the bridge works without needing WSJT-X or a radio:

# Terminal 1: Start the bridge
python3 wsjtx_udp_bridge.py

# Terminal 2: Simulate a destination app receiving packets
python3 test_receiver.py

# Terminal 3: Simulate WSJT-X sending packets
python3 test_sender.py

Configuration

Settings are saved to ~/.wsjtx_bridge_config.json and persist between sessions. You can edit this file directly if needed:

{
  "listen_ip": "127.0.0.1",
  "listen_port": 2238,
  "destinations": [
    {
      "name": "HAMRS",
      "ip": "127.0.0.1",
      "port": 2237,
      "enabled": true,
      "bidirectional": false
    }
  ]
}

Troubleshooting

App shows "connecting..." or doesn't see data:

  • Make sure the bridge is started (green status)
  • Verify the destination port matches what the app expects
  • The bridge sends heartbeats every 15 seconds — wait a moment for the app to connect

Port already in use error:

  • Another application is already listening on that port
  • Make sure WSJT-X and the bridge aren't trying to use the same port

GridTracker callsign clicks don't work:

  • Enable bidirectional mode on the GridTracker destination
  • Stop and restart the bridge after changing bidirectional settings
  • Check that "Accept UDP requests" is enabled in WSJT-X settings

Return traffic isn't reaching WSJT-X:

  • The bridge learns WSJT-X's address from its first incoming packet
  • Make sure WSJT-X is sending data before trying to send commands back

License

MIT License — see LICENSE for details.

Contributing

Contributions are welcome! Feel free to open issues or submit pull requests.

Acknowledgments

73 de the ham radio community!

About

A UDP bridge to connect WSJTX and "Other" applications. Full disclosure, vibe coded with Claude.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages