Getting Started

APRStac runs as a single binary with no dependencies. Download the correct version for your platform from the downloads page.

First Launch

On first run, APRStac creates a default configuration file (aprstac.toml) and a SQLite database (aprstac.db) in the working directory. Your browser will open automatically to the web interface at http://localhost:14501.

Station Configuration

Navigate to Settings → Station to configure your callsign, SSID, symbol, and position. If you have a GPS module connected, you can enable auto-position updates under Settings → GPS.

Your callsign must be set before you can transmit. APRStac uses the tocall APRTAC to identify itself in the APRS network.

Accessing from Other Devices on Your Network

By default, APRStac only listens on 127.0.0.1 (your local machine). To access it from other devices on your LAN, such as your phone or another computer, go to Settings → General and enable Enable Local Network Access. This binds the server to 0.0.0.0, making it available on all network interfaces.

After enabling, restart APRStac. Then access the web interface from any device on your network using your computer's IP address, for example http://192.168.1.100:14501.

Setting Up Ports

Ports are your connections to the APRS network, and the source for all input/output data for the application. All ports are configured from Settings → Ports.

KISS Serial

Connect a local TNC via serial port. Select the serial device (e.g., /dev/ttyUSB0 on Linux, COM3 on Windows), set the baud rate (typically 9600 or 1200), and enable the port.

KISS TCP

Connect to a local or remote KISS TNC over the network. Enter the host and port. This can be a software TNC such as Direwolf, SoundModem, or even VARA's KISS mode.

APRS-IS

Connect to the APRS Internet System. Enter a regional server (e.g., rotate.aprs2.net), port 14580, your callsign, and APRS-IS passcode — you can obtain your APRS-IS passcode here. Optionally, enable IGating afterwards to get RF → APRS-IS and APRS-IS → RF packet forwarding.

UDP Broadcast

Share packets on your local network via UDP broadcast on port 14581. Useful for linking multiple APRStac instances on a LAN. This will allow devices on a flat network to communicate without configuring special IP/ports to do so, if your network allows broadcast traffic.

Meshtastic TCP

Bridge a Meshtastic LoRa device over your network. Enter the device's IP address and port (default 4403). See Meshtastic Integration for details.

Real APRS frames sent by other APRStac stations over Meshtastic devices are fully supported. Those packets can be IGated to APRS-IS and digipeated to other ports, just like packets heard on a traditional TNC. You can optionally check a box to import native Meshtastic nodes onto your map, but you will be unable to message them directly with the APRStac application.

Meshtastic Serial

Bridge a Meshtastic LoRa device connected via USB. Select the serial port (auto-detected at 115200 baud). See Meshtastic Integration for details.

Real APRS frames sent by other APRStac stations over Meshtastic devices are fully supported. Those packets can be IGated to APRS-IS and digipeated to other ports, just like packets heard on a traditional TNC. You can optionally check a box to import native Meshtastic nodes onto your map, but you will be unable to message them directly with the APRStac application.

VARA FM

Connect to a VARA FM software modem for connected-mode packet sessions over VHF/UHF. Enter the host and command/data ports of your running VARA FM instance. Note: VARA FM ports can only be used for BBS and Fileshare at this time.

Reflector Server

Host a private, encrypted APRS reflector. The server listens for TCP connections from Reflector Clients and distributes all received packets to every connected client. All traffic is encrypted with AES-256 using a shared password. Configure a bind address, port, and password.

Reflector Client

Connect to a remote Reflector Server to securely share APRS traffic over the internet. Enter the server hostname, port, and the same password configured on the server. All traffic is AES-256 encrypted end-to-end. Packets received from the reflector are parsed and displayed like any other APRS source, and your local packets are forwarded to the server for distribution to other connected stations.

APRStac Public Reflector

A pre-configured reflector client that connects to the public APRStac reflector using encrypted communication. No setup required, just enable the port. You can use it to send position reports, messages, and connect to BBS or Fileshare hosts of other stations on the public reflector. Stations using the public reflector can be seen at aprstac.com/map.html.

TAK (Team Awareness Kit) BETA

Bridge to a TAK Server using mTLS authentication. Upload your TAK data package's client .p12 file (and optionally a truststore .p12), enter the password, and APRStac will exchange Cursor on Target (CoT) events with the server — translating positions and messages to/from APRS in both directions.

Email Gateway

The email gateway forwards APRS messages to your email inbox and lets you reply from email back to APRS stations.

Note: Gmail, Hotmail, and Yahoo are not supported due to their restrictions on third-party IMAP/SMTP access. You can use your own dedicated mail server, or by becoming a patreon, you get your own aprstac email account and instructions for use.

Setup

Navigate to Settings → Email and configure:

  • SMTP, outgoing mail server, port, TLS mode, and credentials
  • IMAP, incoming mail server, port, TLS mode, and credentials (for receiving replies)
  • Listen Callsign, the APRS address that triggers email forwarding (e.g., EMAIL-9)
  • Recipient Address, your email address where APRS messages are forwarded

Sending Email from APRS

Any APRS station can send an email through your gateway by addressing a message to your listen callsign. The message body should be formatted as:

recipient@example.com Your message text here

The first word (the email address) is used as the destination. Everything after it becomes the email body. For example, sending this APRS message to EMAIL-9:

john@gmail.com Hello from the field!

will deliver an email to john@gmail.com with the body "Hello from the field!" and the sender's callsign in the subject line.

Replying from Email

To send an APRS message from your email, compose a new email (or reply to a forwarded one) to your gateway's email address. Set the subject line to the destination callsign (e.g., KN4MKB-7), and write your message in the email body. APRStac polls your IMAP inbox and transmits the body as an APRS message addressed to the callsign in the subject. The reply is sent from your listen callsign.

Keep your message under 67 characters, which is the maximum length for an APRS message. Anything beyond that will be truncated.

Meshtastic Integration

APRStac can use Meshtastic LoRa devices to transport APRS and AX.25 packets, supporting APRS packet transport over the mesh.

Connecting

Add a Meshtastic port under Settings → Ports:

  • Meshtastic TCP — connect to a Meshtastic device on your network (default port 4403)
  • Meshtastic Serial — connect via USB (auto-detected, 115200 baud)

Enable Import Nodes to pull position data from all nodes in the mesh handshake and ongoing position broadcasts.

Two Types of Traffic

APRStac distinguishes between two kinds of data on the mesh:

  • Native Meshtastic data (positions from regular Meshtastic nodes) — displayed on the map with a [Mesh] badge but tagged as local-only. These are never forwarded to other configured ports or APRS-IS.
  • Real APRS frames (sent by other APRStac stations over the mesh using a private portnum) — these traverse the mesh with full packet integrity preserved. Source callsign, digipeater path, and info field arrive byte-for-byte identical. These frames are treated as RF traffic and can be IGated to APRS-IS, digipeated to RF ports, and participate fully in the APRS network.

Connected Mode over Meshtastic

BBS and Fileshare connected-mode sessions work over Meshtastic ports. Timer values are automatically relaxed to account for mesh latency. Expect slow connections when using connected-mode packet over the Meshtastic network.

Discord Webhook

APRStac can post APRS packets to a Discord channel as formatted embeds using a webhook. This is useful for monitoring station activity from Discord.

Creating a Webhook in Discord

  1. Open your Discord server and go to Server Settings
  2. Navigate to Integrations → Webhooks
  3. Click New Webhook
  4. Choose the channel where packets should be posted
  5. Click Copy Webhook URL

Enabling in APRStac

  1. Navigate to Settings → Notifications and scroll to the Discord Webhook section
  2. Toggle Enable Discord Webhook
  3. Paste your webhook URL into the Webhook URL field
  4. Click Test Webhook to verify the connection
  5. Select which packet types to forward (Position, Messages, Weather, Objects, Telemetry, Mic-E)
  6. Set the Per-Station Rate Limit to control how often a single station triggers a post (default: 1 per minute)

Each packet is posted as a color-coded Discord embed with the station callsign, decoded data, and raw packet. Packets with position data include a clickable link to aprs.fi.

Offline Maps

APRStac includes a built-in tile cache and MBTiles reader for offline map operation, ideal for field deployments or Raspberry Pi setups without reliable internet.

Tile Cache

By default, APRStac fetches map tiles from OpenStreetMap and caches them in a separate SQLite database (tiles.db). Cached tiles are served instantly on subsequent views. The cache uses LRU eviction with a configurable maximum size (default 10 GB).

Supported tile layers: street (OpenStreetMap), topo (OpenTopoMap), satellite (ArcGIS), and dark (CartoDB).

MBTiles Files

For fully offline operation, place pre-downloaded .mbtiles files in the mbtiles/ directory (created automatically next to the database). Then select the file under Settings → Map.

You can download free raster MBTiles files from these sources:

  • OpenMapTiles, offers regional and worldwide raster tile downloads in MBTiles format
  • MapTiler Data, provides free OpenStreetMap-based raster tiles by region

Three modes are available:

  • OSM Only (default), fetch from the internet, cache locally
  • MBTiles Only, serve tiles exclusively from the .mbtiles file, no internet access
  • OSM + MBTiles Fallback, try MBTiles first, fall back to cached OSM tiles
APRStac supports raster tiles only (PNG, JPEG, WebP). Vector tiles (PBF format) are detected and flagged as incompatible in the UI.

Cache Management

View cache statistics and clear the cache from Settings → Map. The API also exposes tile cache endpoints for programmatic access.

BBS

APRStac includes a full BBS (Bulletin Board System) that supports public postings and private user-to-user messages over LoRa Meshtastic, Native APRS via KISS TNC, VARA FM, and TCP/IP modes like the reflector client and UDP broadcast. You can host your own BBS for other stations to connect to, and connect to other BBS stations using either a modern web interface or a traditional terminal.

Hosting a BBS

Navigate to BBS → Host to configure your BBS:

  1. BBS Listen Callsign — must be unique from your station, digipeater, and fileshare callsigns.
  2. Welcome Message (optional) — custom greeting shown to connecting stations (max 60 chars).
  3. Enable BBS Host Mode to start accepting connections.
  4. BBS Beacon (optional) — periodically advertise your BBS. Optionally append unread-message callsigns to the beacon comment (e.g., MSG:KN4MKB,W4XYZ).
  5. Storage Limits — oldest postings/messages are pruned when exceeded.

BBS Commands

All commands are case-insensitive. Short forms are shown in parentheses. If a command is entered without its required argument (e.g., just P instead of P subject), the BBS will prompt for the missing information interactively.

Public Postings

  • (L)IST [N] — list the N most recent posting subjects (default 10)
  • (R)EAD # — read a posting by its number
  • (P)OST <subject> — compose a new public posting (enter content, then send RRR on a new line to finish)

Private Messages

  • (S)END <callsign> — send a private message to a callsign (prompts for subject, then content, RRR to finish)
  • (M)SG [N] / MESSAGES [N] — list your private messages (default 10)
  • (O)PEN # — open and read a private message by ID (marks it as read)
  • (U)NREAD [N] — list only your unread messages
  • (D)EL # / DELETE # — delete a private message by ID

Session

  • (E)XIT — disconnect from the BBS

You can also create and manage postings from the BBS → Postings tab and messages from the BBS → Messages tab in the web interface without needing an RF connection.

Connecting to a BBS

Navigate to BBS → Connect, select a port, enter the remote BBS callsign, and click Connect. If the remote station is running APRStac, you will automatically see the modern web interface. Otherwise, you will see the traditional terminal interface.

Web Interface

When connecting to another APRStac BBS, the client automatically detects the remote system and switches to a modern web interface with action buttons for viewing posts, composing new posts and messages, and managing your inbox. All commands are sent as standard BBS text over RF under the hood. A Terminal toggle lets you switch to the raw terminal view at any time.

Fileshare

APRStac includes a file hosting and transfer system that operates over AX.25 connected mode, allowing stations to share files over LoRa Meshtastic, Native APRS via KISS TNC, VARA FM, and TCP/IP modes like the reflector client and UDP broadcast.

Setting Up Fileshare Hosting

Navigate to Fileshare → Host to configure your fileshare:

  1. Fileshare Listen Callsign — must be unique from your station, digipeater, and BBS callsigns.
  2. Enable Accept Incoming Connections to start accepting connections.
  3. Fileshare Beacon (optional) — periodically advertise your fileshare callsign.

Uploading Files

Navigate to Fileshare → Files to manage your hosted files. Drag and drop a file onto the upload area, or click to browse. Each file can be up to 10 MB. Click the delete button next to any file to remove it.

When a file is uploaded, APRStac automatically compresses it using the best of three algorithms (zstd, gzip, and brotli). Whichever produces the smallest result is stored. If none of them beat the original size, the file is kept uncompressed. This is fully automatic and requires no configuration.

Downloading Files from Another Station

Navigate to Fileshare → Connect, select a port, enter the remote station's fileshare callsign, and connect. The remote station's file list will load automatically. Click any file to begin the download. A progress indicator will show the transfer status.

Files are transferred as base64-encoded chunks over AX.25 I-frames with MD5 checksum verification on completion. Compressed files are automatically decompressed on arrival, so the downloaded file is always the original uncompressed version. Completed downloads can be found in the Files tab of the Fileshare page.

Status Reporting

APRStac stations can broadcast a situational readiness status alongside their normal position beacon. Each station reports a state for eight fixed categories, giving nearby operators a quick at-a-glance picture of local resources and needs.

Categories

Each report covers eight categories: Food, Water, Shelter, Power, Medical, Comms, Fuel, and Personnel. Every category is set to one of four states:

  • Green, OK or sufficient.
  • Yellow, caution or limited.
  • Red, critical or unavailable.
  • Unknown, not checked or not reported.

Enabling Your Status Beacon

Navigate to Settings → Station and find the Status Beacon section. Set each category to the appropriate state, enable the beacon, and choose a transmit interval. Your status is sent as a standard APRS status report on every beacon-enabled port.

Where Status Appears

When a status report is received from another station, it populates two places in the UI:

  • Station info box, click any station marker on the map to see its latest status as colored category chips.
  • Status Report page, a filterable table of every station with a stored status report, including the received timestamp. Auto-refreshes every 30 seconds.

Only the most recent status per callsign is kept. Stations that have never sent a status report do not appear on the Status Report page and show no status chips in their info box.

TLS Certificate

APRStac supports HTTPS using TLS certificates. To enable encrypted web communication, add the paths to your certificate and private key in aprstac.toml:

tls_cert = "/etc/letsencrypt/live/yourdomain.com/fullchain.pem"
tls_key = "/etc/letsencrypt/live/yourdomain.com/privkey.pem"

When both fields are set, the server serves HTTPS instead of HTTP. When omitted, the server runs over HTTP as usual. Any valid PEM certificate and key will work, including Let's Encrypt.

Reflector Mode

Start the server with --reflector to run in reflector-only mode:

./aprstac-server --reflector

This starts a Reflector Server on 0.0.0.0:14502 and a view-only station map on 0.0.0.0:14501. The map displays stations that send packets to the reflector server, with no ability to modify settings, send messages, or access other features. The encryption password is hardcoded to aprstac.com. This is how the public reflector map is displayed at aprstac.com/map.html.

Digipeater

When digipeater mode is enabled, APRStac will repeat received packets back out of the ports that are enabled to do so. Beyond repeating on the same port a packet arrived from, APRStac will also repeat that packet out of other configured digi-enabled ports if the packet meets the repeat criteria. This is what enables cross-medium traffic — a packet heard on any port can be digipeated out over others, such as Meshtastic, KISS, Reflector link, a UDP broadcast segment, and vice-versa.

A packet must meet all of the following to be repeated across ports:

  • The global digipeater setting must be enabled.
  • The packet must arrive on a digi-capable port (APRS-IS traffic is never digipeated).
  • The source callsign must not be one of your own operated callsigns (station, IGate, digipeater, BBS, or fileshare SSID).
  • The path must not contain TCPIP or TCPXX (prevents re-digipeating internet-sourced packets).
  • The packet must contain an eligible WIDEn-N, TRACEn-n, or RELAY alias with hops remaining and the has-been-repeated bit not yet set.
  • The packet must not be a duplicate of one heard within the last 30 seconds.
  • The destination port must have digipeating enabled in its per-port settings.