Skip to content
mathisono edited this page Jun 11, 2026 · 8 revisions

APRS Bridge

Crow can bridge APRS text messages through a configurable APRS backend, allowing AREDN nodes to send and receive messages with APRS stations. The default backend is APRS-IS, but Crow also supports Dire Wolf KISS-over-TCP and Xastir/YAAC-style TCP text streams.

⚠️ Important: APRS is public amateur-radio traffic. Keep transmit (tx_enabled) disabled until the station callsign, APRS-IS login/passcode or local TNC path, and operator control requirements are fully understood.


Configuration

Add an aprs block to your crow.conf and include an APRS channel in the channels array:

{
  "callsign": "N0CALL-10",
  "aprs": {
    "enabled": true,
    "callsign": "N0CALL-10",
    "channel": "APRS og==",
    "default_group": "APRSgroup1",
    "inline_max_members": 10,
    "backend": {
      "type": "aprsis",
      "host": "rotate.aprs2.net",
      "port": 14580,
      "tx_enabled": false
    },
    "groups": [
      {
        "name": "APRSgroup1",
        "members": ["N0CALL-4", "N0CALL-7"],
        "repeat_member_messages": false,
        "rate_limit_seconds": 20,
        "max_members": 10
      }
    ]
  },
  "channels": [
    { "namekey": "AREDN og==", "telemetry": false },
    { "namekey": "APRS og==", "telemetry": false }
  ]
}
Field Description
callsign Your station callsign with SSID
channel The Crow channel name that carries APRS traffic
default_group The group used when no group is specified
inline_max_members Maximum stations allowed in an inline address list
backend Connection details for the APRS backend (see below)
groups Pre-configured station groups for group messaging

Backends

Crow supports three APRS backend types. Choose the one that matches your station setup.

APRS-IS

Connect to the internet APRS gateway. This is the only backend that requires a passcode — see APRS-IS Passcode below.

For receive only, no passcode is needed (Crow defaults to -1, which gives read-only access). To transmit, set a valid APRS-IS passcode and enable tx_enabled.

"backend": {
  "type": "aprsis",
  "host": "rotate.aprs2.net",
  "port": 14580,
  "passcode": "REPLACE_WITH_APRS_IS_PASSCODE",
  "filter": "b/N0CALL-4/N0CALL-7",
  "tx_enabled": true
}
Field Default Description
host rotate.aprs2.net APRS-IS server hostname
port 14580 APRS-IS server port
passcode -1 (read-only) APRS-IS passcode for your callsign (required for TX)
filter (none) Optional server-side filter (e.g. b/N0CALL-4/N0CALL-7)
tx_enabled false Enable transmitting messages to APRS-IS

Dire Wolf KISS TCP

Connect to a local Dire Wolf TNC via KISS-over-TCP. No passcode is needed — authentication is handled by the TNC/radio path.

"backend": {
  "type": "kiss_tcp",
  "host": "127.0.0.1",
  "port": 8001,
  "kiss_port": 0,
  "path": [],
  "tx_enabled": true
}
Field Default Description
host 127.0.0.1 Dire Wolf host
port 8001 KISS TCP port
kiss_port 0 KISS port number (0–15)
path [] Digipeater path (e.g. ["WIDE1-1", "WIDE2-1"])
tx_enabled false Enable transmitting

TCP Text Stream (Xastir / YAAC)

Connect to an APRS application that exposes a TNC2-style TCP text interface. No passcode is needed — the connected application handles its own authentication to APRS-IS or RF.

"backend": {
  "type": "tcp_text",
  "host": "127.0.0.1",
  "port": 14580,
  "tx_enabled": true
}
Field Default Description
host 127.0.0.1 Application host
port 14580 TCP text port
tx_enabled false Enable transmitting

APRS-IS Passcode

The APRS-IS passcode is a numeric hash derived from your callsign (without SSID). It is used only by the APRS-IS backend to authenticate for transmit access. The other backends (KISS TCP, TCP Text) do not use or need a passcode.

How it works

When Crow connects to an APRS-IS server, it sends a login line:

user N0CALL-10 pass 12345 vers Raven 0.1
  • If the passcode is omitted or set to -1, the server grants read-only access — you can receive APRS messages but cannot transmit.
  • If a valid passcode is provided and tx_enabled is true, the server grants read-write access.

Generating your passcode

The APRS-IS passcode is a simple hash of your base callsign (without SSID). Many tools can generate it:

  • Online: Search for "APRS-IS passcode generator" (e.g. aprs-passcode)
  • Command line: Various scripts exist — the algorithm is a public, well-known hash

Note: The passcode is not a security secret — it is a simple validation that you are using your own callsign. Anyone can compute the passcode for any callsign. APRS-IS transmissions are public amateur radio traffic and all standard FCC Part 97 rules apply.

When do you need a passcode?

Backend Passcode needed? Why
aprsis — receive only ❌ No Default passcode -1 gives read-only access
aprsis — transmit enabled ✅ Yes APRS-IS server requires valid passcode for write access
kiss_tcp (Dire Wolf) ❌ No Direct TNC connection, no APRS-IS login
tcp_text (Xastir/YAAC) ❌ No The application handles its own APRS-IS auth

Sending Messages

All APRS messaging happens on the configured APRS channel (e.g. APRS og==).

Direct message to a station

@N0CALL-4 message text

Send to a configured group

#APRSgroup1 message text

Send to an inline list (without changing the group)

#APRSgroup1 N0CALL-4, N0CALL-7 message text

Create or update a group and send

join #APRSgroup1 N0CALL-4, N0CALL-7 message text

The join command creates the group if it does not exist, replaces its member list with the listed stations, and sends the message to all of them.


Group Message Repeating

Each group can optionally repeat a received APRS message from one member back out to the other members of the group. Enable this with repeat_member_messages:

{
  "name": "APRSgroup1",
  "members": ["N0CALL-4", "N0CALL-7"],
  "repeat_member_messages": true,
  "rate_limit_seconds": 20,
  "max_members": 10
}

When enabled, a message received from one group member is forwarded to the other members — not echoed back to the sender. Crow applies duplicate suppression and rate limiting to prevent loops.

Crow Wiki

Pages

Markdown files

  • APRS.md
  • Backend-Selection-and-Deployment.md
  • Change-Log.md
  • Command-Reference.md
  • Configuration.md
  • Configuring-Channels.md
  • Home.md
  • LoRa-Gateway-Tags.md
  • Meshtastic-API.md
  • Memory-Use.md
  • Strict-Gatekeeper.md
  • USB-Storage.md
  • Winlink.md
  • _Sidebar.md

Maintenance

  • Keep every .md wiki page linked here.
  • Keep Home.md and _Sidebar.md in sync.
  • When a wiki page is removed, remove it from both the Home page inventory and this sidebar.

Clone this wiki locally