Skip to content
KC3SMW
KC3SMW

Adventures in Ham Radio

  • Welcome
  • HF Propagation
  • Posts
  • Packet Radio Maps
  • Contact
KC3SMW

Adventures in Ham Radio

Simple Packet Terminal (SPT.py)

admin, September 25, 2025September 25, 2025

A Lightweight KISS/AX.25 Client for the Everyday Operator


Introduction

The Simple Packet Terminal (SPT.py) is a Python-based tool written by Greg “Chengmania” Cheng, KC3SMW, designed to connect directly to a KISS interface and give operators a clean, no-frills terminal for packet operations.

Unlike heavy GUI-based clients, SPT.py is lightweight, intentionally simple, and fully cross-platform — running cleanly on Windows, Linux, and macOS. The goal is to offer a packet terminal that is:

  • Easy to install and use (just Python and a terminal)
  • Cross-platform friendly (no Windows-only dependencies)
  • Operator-focused (streamlined for node access, BBS work, and UNPROTO keyboard chat)
  • Hackable (open source, so others can expand on it)

By removing the distractions of graphical interfaces and complicated configuration menus, SPT.py makes it easy for both new and experienced hams to connect to packet nodes, explore BBS systems, or engage in real-time keyboard-to-keyboard chat.


Downloading SPT

You can grab the latest code straight from GitHub:

https://github.com/chengmania/SimplePacketTerminal

Clone with git:

git clone https://github.com/chengmania/SimplePacketTerminal.git
cd SimplePacketTerminal

Or just click Download ZIP on the GitHub page, then unzip it.

Inside you’ll find SPT.py—that’s the script you’ll run.


Running the Program

First, make sure Direwolf or SoundmodemTNC is running and configured to provide a KISS TCP port.

Using Direwolf (Linux, macOS, Windows/WSL)

Open your direwolf.conf and look for a line like this:

KISSPORT 8001

Make sure it’s present (and not commented out with a #). This tells Direwolf to open a TCP socket on port 8001, which SPT.py will connect to.

Then simply start Direwolf by typing:

direwolf

For more details on setting up Direwolf, see: Configuring Direwolf

Using SoundmodemTNC (Windows)

In UZ7HO Soundmodem, go to Settings → Devices → KISS Server Port and confirm the TCP port number (often 8100 by default). SPT.py connects to this the same way it connects to Direwolf.


Typical Default Ports

  • Direwolf → 8001
  • SoundmodemTNC → 8100

Starting SPT

Once your TNC software is running and listening on its KISS TCP port, launch SPT.

  1. Default start (MYCALL only): python3 SPT.py N0CALL This assumes your TNC is on the local machine (127.0.0.1) and listening on its default port (usually 8001).
  2. Explicit start (host + port): python3 SPT.py N0CALL 127.0.0.1 8100 This connects to a TNC running on 127.0.0.1 (localhost) at port 8100 — useful if you’re using Soundmodem or if your Direwolf is configured with a nonstandard port.

Important:
When you launch SPT with either of the above commands, you are not yet connecting to a packet node over RF. You are connecting SPT to your software modem (Direwolf or Soundmodem) via TCP. The modem then handles the radio side.

Once SPT is linked to the modem, then you can use /connect inside SPT to reach another station over RF.


Understanding the Prompt

The prompt changes depending on your mode:

  • Idle: [N0CALL] >>
  • Connected to a node: [N0CALL @ KC3SMW-7] >>
  • UNPROTO/UI mode: [N0CALL UI] >>

This makes it clear at a glance what state you’re in.


Using / Commands

SPT works a lot like a chat client, but with slash-commands for control.

Example: To connect to a node running on KC3SMW-7, you’d type:

/connect KC3SMW-7

Once connected, you’ll see the node’s banner or menu. SPT buffers your keystrokes until it’s your turn, so you don’t collide with the node’s output.


Talking to a Node

After connecting, you interact with the node just like you would with any other packet terminal. Common commands might be:

  • BBS — enter the bulletin board
  • SP CALLSIGN — send a personal message
  • I — get information about the node

When you’re done:

/disconnect


UNPROTO (UI) Mode

SPT lets you send UI frames (UNPROTO packets) in two different ways:

  1. One-shot message
    Send a single UI frame in one line by including the destination, optional digipeater, and the message: /unproto CQ VIA W3SK Hello world!!! This transmits just that one message as a UI frame.
  2. Persistent mode
    You can also set a UI destination once, then type messages normally. Every line you enter will be sent as a UI frame until you change modes again. For example: /unproto CQ VIA W3SK (no text after it — just set the destination) Now your prompt changes to [N0CALL UI] >>.
  • In this mode, all UI traffic is monitored, so you can see beacons, chats, and digipeated frames in real time.
  • Anything you type will be transmitted as a UI frame, giving you a simple keyboard-to-keyboard chat method with any station listening on frequency. To exit persistent UI mode, type: /upexit


SPT.py Command Reference

Link Commands

CommandShortcut(s)Description
/connect CALL [via DIGI1,DIGI2]/cConnect to a station or node. Optional digipeaters are comma-separated.
Example: /c KC3SMW-7 via WIDE1-1,WIDE2-1
/disconnect/dPolitely request disconnect. Prompt updates immediately.
/quit/q, /exitExit the program. If connected, sends DISC first.

Screen & Help

CommandShortcut(s)Description
/clear/clsClear the screen and reprint header/command summary.
/help/hShow one-line command summary.
/help -v—Show full detailed help.

Status & Settings

CommandShortcut(s)Description
/status—Show link state, destination, sequence numbers, digi path, and I/O options.
/debug—Toggle debug logging of raw frames.
/echo on|off—Locally echo what you type as it is transmitted.
/crlf on|off—Choose line ending for transmitted text. ON = CRLF (\r\n), OFF = CR (\r).
/retries N—Set number of SABM retries (default = 3).

Unconnected (UI) Frames

CommandShortcut(s)Description
/unproto DEST [via DIGI1,DIGI2] message.../uSend a one-shot AX.25 UI frame.
/unproto DEST [via DIGI1,DIGI2]/uEnter persistent UNPROTO mode. Every line you type is sent as a UI frame.
/upexit/upoff, /upstop, /unproto off|stop|end|exitExit persistent UNPROTO mode.

Why SPT?

SPT.py isn’t meant to replace heavyweight station clients like Outpost, LinBPQ, or RMS Express. Those are excellent for full-service packet messaging and Winlink workflows, but they come with extra layers of setup.

A closer comparison would be tools such as:

  • QTTERMTCP (bundled with BPQ)
  • EasyTerm (from UZ7HO)
  • Other packet terminal clients that rely on GUIs and more complicated configuration

The difference is that SPT runs right in your command-line terminal — nothing fancy, no heavy GUI frameworks, no Windows-only restrictions. Just a clean Python script that:

  • Connects directly to Direwolf or Soundmodem over KISS TCP
  • Gives you a colorized prompt and pager-friendly display
  • Handles both connected AX.25 sessions and UNPROTO (UI) frames
  • Works equally well on Linux, macOS, and Windows (via WSL or native Python)

If you’ve ever wished for a “just works” packet terminal with no distractions, SPT.py is designed to fill that gap.


Quick Start Cheat Sheet

  1. Start your TNC software:
  • Direwolf: direwolf (default KISSPORT 8001)
  • SoundmodemTNC: check Settings → Devices → KISS Server Port (often 8100)
  1. Run SPT: python3 SPT.py N0CALL
    python3 SPT.py N0CALL 127.0.0.1 8100 # explicit host/port if needed
  2. Basic commands:
  • Connect to a node: /connect KC3SMW-7
  • Send a one-shot UI message: /unproto CQ VIA W3SK Hello world!!!
  • Enter persistent UI mode (keyboard chat): /unproto CQ VIA W3SK
  • Exit persistent UI mode: /upexit
  1. Quit: /quit

Uncategorized

Post navigation

Previous post

Recent Posts

  • Simple Packet Terminal (SPT.py)
  • Tinker’s Corner: Playing with Time – LED Patterns Using FOR Loops
  • Sparks, Mics, and Wires: Packet Radio and APRS
  • Building a Packet Radio Chat Interface with Python, HamShield, and Arduino
  • Command Line Ham Prop Data
  • Tape Measure Yagi
  • Building FLDIGI from source on Debian, Ubuntu, and Linux Mint
  • Unlocking the World of Ham Radio: Your Technician Class Adventure Begins
  • Packet Radio With Windows
  • SSTV Connecting Images Through the Airwaves
  • Pat Winlink Using AX25
  • Pat Winlink on Linux Using AGW
  • Winlink
  • APRS
  • Using Linux Packet Radio (4 of 4)
  • Setting Up AXPorts (3 of 4)
  • Configuring Direwolf (2 of 4)
  • Installing Software for Linux Packet Radio (1 of 4)
  • Exploring the Power of Digital Communication in Ham Radio, What is Packet Radio
©2025 KC3SMW | WordPress Theme by SuperbThemes