Feature requests (planned future development)

  1. Port mobile App code to .Net MAUI in preparation for open-sourcing the mobile app.
    • [Update 6/30/2024: this is in-progress. About 50% of the application has been ported to .Net MAUI]
  2. Updates to SOTACAT (and SOTAMAT) tracked on the Github SOTACAT Issues page.
  3. Document server-side code and donate into escrow for SOTA Org and/or POTA org
  4. Add QSO Logging functionality built specifically for SOTA and POTA

Features in Development

  • See BETA release (below). NOTE: Beta releases are available as follows:
    • iOS:
      • First install Apple’s “Test Flight” on an iOS device,
      • then click here: SOTAMAT while on an iOS device
    • Android: Google Play Store Beta Test:
      • On an Android device click here,
      • scroll down and join as a “beta tester”, and wait several (!) minutes until Google updates the icon showing you’ve been added to the Beta tester list
      • Assuming you have the old build 46 installed, and want to upgrade to the latest Beta build:
        • go to your account icon in the upper right of the Google Play store
        • “Manage apps & device”
        • Find SOTAmat in the list and update to the new version.

Released Changes

2024-06-30 SOTACAT Firmware update

Version 240630:1935-R: available here: via the big blue button “Connect to SOTACAT via USB”

  • @Jeff KC6X added a new tab (work-in-progress) for additional CAT control:
    • Play voice memory
    • Play CW memories, or input new text in the UI for transmission via CW on the fly.
    • Adjust radio power (0watts or 10watts)
  • I have changed the WiFi connection logic a lot.  It now simultaneously tries to connect to the configured SSID’s in station mode (as a client) while also accepting connections as an Access Point (as a server).  This should help Android users who use a hotspot since Android doesn’t support split networking like iOS.  Note that Android users will still want an mDNS app such as BounjourBrowser 1.14 to be able to connect to the SOTACAT after it connects to your hotspot.  iOS users have it easy – it just works.
  • Cleaned up the UI style code a bit
  • At boot the radio negotiates the connection with the radio in parallel with the negotiation of the WiFi.

2024-02-28 SOTACAT hardware module PREVIEW

See information about SOTACAT here.

2023-11-13 Mobile Apps: BETA update V1.2.0-65

  • Fixes for two crashing bugs:
    • A crash on launch issue if the app had been previously installed before updating and if that prior version had not been uninstalled. The database schema changes between versions were not being handled properly. Handled correctly now. After upgrading you will need to re-download the Summits and Parks database.
    • A crash when hitting the “Clear” button when searching either the Summits or Parks databases. There was a case where a “trim” function was called on a null string. Crash. Boom. Fixed.

2023-11-12 Server Side:

Bug Fix: the 2-way command “callinfo” was returning SOTA bonus points as “(bonus:0)” even when an operator had more than zero bonus points. This was due to an API change by the SOTA organization. SOTAmat has been updated to recognize the new parameter name.

2023-11-12 Mobile Apps: BETA update V1.2.0-63

New Features:

  • The “Point Me” feature for SOTA and POTA now works better both online (with maps shown) or offline (when no maps are available). There is now a set of orientation vectors displayed both when online and offline. The orientation vectors are drawn as dashed lines. Here is a key to the different line types:
    • Blue shows your orientation:
      • dashed-blue always points in the direction of the phone (points straight up on the device).
      • solid-blue is only shown when maps are available (when online). It shows your orientation relative to the map (if available). For example, if you are facing East, and the map is being shown with North up on the screen, then you will see a solid blue line facing to the right on the screen (showing you facing East on the map). The length of the solid blue line is identical on the map as the distance from your current location to the target location.
    • Red shows the heading from your current location to the target (Summit or Park):
      • dashed-red points in the orientation of the target relative to the dashed-blue line (which is your device’s orientation). To orient yourself to travel in the direction towards the target (peak or park), rotate your body with the phone (while the dashed-blue line is pointing away from you) until the red-dashed line covers the dashed-blue line. Now you are oriented towards the target.
      • solid-red is only shown when maps are available (when online). It shows the heading of the target relative to your current location. The length of the solid-red line indicates the distance to travel to the target.
      • When using the “Point Me” navigation feature with SOTA, it will color code your “Remaining Altitude” against how close you are to the SOTA Activation Zone. It will turn green when you are above 25 meters from the peak height. Note that this is an approximation using the GPS data (which is fairly accurate horizontally, but inaccurate vertically in altitude). Many Android devices seem particularly inaccurate in their GPS altitude values.
  • When Searching the Summits and Parks database, you can now search on callsign and Summit-ID or Park-ID as well as the Name of the entity. There is a known bug with the timing of how you type the search string in the async code. If you hit the bug, just backspace and retype to refresh.


  • Login information now required to download Summits and Parks databases.
  • When viewing the list of Summits or Parks, the name of the Summit/Park will highlight when it is a member of your currently loaded configuration (meaning you can self-spot). It will be dimmed if it is a Summit/Park that is not in your configuration. If you try to select a Summit or Park that isn’t in your configuration it will be ignored (can’t be selected).
  • When loading a configuration from the server, if there is an error in the configuration the mobile app will share more information about the cause of certain types of errors (as sent from the server). For example, if your configuration contains a duplicate SOTA Region or POTA Location, that information will be viewable in the mobile app.

Bug Fixes since build-61:

  • On Android, Google Maps should now load when internet is available. The issue was with a permissions keystore which differs in production builds from development builds. Google’s API has been updated to include both keys. [NOTE: it is still broken.]
  • On the Setup tab the setting for “Imperial” vs. “Metric” was not persisting across sessions. Fixed.
  • Either loading the entire SOTA Summits and POTA Parks databases the first time, or when updating just the changes since a prior download, the last 1,000 or so changes (a batch size) would not be applied to the database. The UI would indicate it had downloaded “X” changes, but if “X” was less than the batch size it would never update the mobile device data. Fixed.

Known Bugs Remaining:

  • Clicking on the “Cancel” button when doing a database search results in a crash. Easy fix but found it too late in this build cycle. Will fix in next iteration. Simple workaround: don’t hit the cancel button (it isn’t needed). Use the “< Back” button at the top of the screen instead.
  • MAX-3B Transceiver integration – it basically works, but sometimes isn’t as smart as it should be about automatically finding the right frequency/mode to use based on the state of the radio when launched.
  • Switching from a “Point Me” map guidance screen to any other tab and returning leads to a stuck compass heading. The workaround is to use the “< Back” button at the top of the page to properly “exit” that screen.

2023-11-05 BETA release V1.2.0-61

You can find links to the beta on the Getting Started page under the “Development Builds” section.

Changes include:

  • GPS Assisted SOTA Summit and POTA Park database search and select based on distance
  • GPS Assisted SOTA Summit and POTA Park bearing and altitude view
  • Experimental: MAX-3B transceiver support – directly get/set frequency and transmit FT8: the radio and SOTAmat communicate with each other directly
  • UI changes: more efficient information layout, better responsiveness to non-default font sizes
  • New Time-Sync button: use WWV or listen to other FT8 stations and click to sync.
  • Updated Setup tab instructions
  • Updated Frequencies reference: now includes atomic-clock radio frequencies (WWV, etc.)
  • Updated the Services reference to include new features with SOTA Alerts (now|+<hours>).
  • Completely redesigned the UI event handling.
  • …and other small changes too numerous to list.

A lot of code has changed. I’ve tested most everything, but I need your help testing on a wide array of devices.

Note: the app only uses GPS Location data locally on-device. It is never transmitted.

2023-10-17 CWSL_DIGI 0.88+ Supports SOTAmat and vice-versa

The CWSL_DIGI skimmer software (version 0.88+) now has support for SOTAmat messages and reporting to SOTAmat via PSKreporter. This means the number of monitoring stations world-wide has increased by this community of skimmers. A planned version of CWSL_DIGI may even have direct reporting to SOTAmat built-in. Cool! If you run a CWSL_DIGI skimmer, please update to the latest version to help the SOTA and POTA communities!

2023-07-17 – Partial Support for new Bullitt Satellite Communicator

The Bullitt Satellite Messenger device and app allow users to send SOTAmat commands via SMS. However, this device does not allow replies from SOTAmat and only allows replies via a dedicated cell phone application (humans only!). Even so, the most important commands to self-spot or self-alert do work and have been validated. However, you must use the “login” command. See the page 2-way commands for details.
NOTE: 2023-09 – I have reports that Bullitt has changed their protocol and it no longer works. Sigh! Of all the satellite devices, I don’t recommend Bullitt because it works differently from other systems and is not compatible with SOTAmat.

2023-07-11 – 2-way Command “SotaPostAlert” gains new time options

The original version of the SotaPostAlert 2-way command required a Date and Time parameter for the expected time the activator would be on-peak, measured in UTC (Zulu) time. Having to compute the future UTC time rather than local time was cumbersome to compute at 13,000 feet when oxygen to the brain is low. The original version still works, but there are two new options that have been added to make specifying a time easier:

  1. now – indicates the alert should be posted 5 minutes into the future. Thus you don’t need to compute UTC.
  2. +<hours> – indicates that the alert should target the specified number of hours into the future from now. So +0.5 means a half-hour from now, and +48 means two days from now.

2023-05-29 – New SOTAmat skimmer SparkSDR Plugin

The SOTAmat skimmer has been extended to plug-in to the SparkSDR software in addition to the WSJT-X software. While SparkSDR supports SOTAmat out-of-the-box without a plugin (via the PSKreporter connection), you can now reduce the reporting latency by having the plugin forward SparkSDR SOTAmat messages directly to the SOTAmat server. This can save up to 5 minutes!

2023-04-23 – New SOTAmat skimmer WSJT-X Plugin

  • Run your own home SOTAmat skimmer and help activators using the SOTAmat app get heard! The best way has always been to use the SparkSDR software with a compatible SDR receiver. However, most people don’t have that special hardware. Running the SOTAmat WSJT-X plugin allows any WSJT-X instance to skim (monitor) for SOTAmat messages. You don’t even need your own radio as you can use public radios over the internet (via The plugin filters messages received by WSJT-X and forwards any potential SOTAmat messages to the SOTAmat server for processing. It goes direct and bypasses the normal route through PSK Reporter which can shave off up to 5 minutes of delay!

2023-04-09 – New YouTube Video

  • New Getting Started YouTube video added based on the new V1.1 (build 46) version of the mobile app.

2023-03-05 – Server improvements

  • Added additional debugging code to the logs
  • Improved Health Check code to test for more conditions
  • Added more automation for newly registered users. The server automates validation of the user and looks up their statistics. Some users get automatically approved based on results, and emails are automatically sent. Other users get put into a holding bay for administrator review.
  • Added code to offset a nasty tendency of iOS “auto-correct” where it removes spaces from what you type when auto-complete is followed by punctuation, such as a SOTAmat comment delimiter. The server now sees the syntax error and tries to undo what iOS does. This helps with Garmin inReach users.

2023-02-22 – Mobile app V1.1.0-46 (build 46) Rolling out to App Stores

Build 46 of the mobile app has been submitted to the various app stores as follows:

  1. Production:
  • New feature: you can now login to your SOTAmat account on your mobile device, and click a button to load your configuration. No more need to work with messy “Configuration Blobs” unless you are a very advanced user with an odd set of requirements (the old functionality still exists, but has been moved since most people do not want it or need it). Everyone else can just login and click! Done.
  • New (optional) feature: you can choose to download the entire SOTA Peak and POTA Park databases so they are stored locally on your device for use offline. This data can be displayed on the SOTA Spot and POTA Spot pages so you can see information such as recent activations, points, etc. This also lays a foundation for future features.
  • Several tweaks were made to improve the user interface.

2023-02-11 – POTA Fixes

  • The POTA APIs are not documented nor official. The organization is working to build a public facing and well documented API with authorization tokens. SOTAmat depends on the original undocumented API’s that were reverse engineered by trial-and-error. As POTA has been making server changes in preparation for a public API in the future, they have made breaking changes to the old API used by SOTAmat. This update fixes recent issues and things should be working again. But of course, they may break as the POTA organization continues their development. I’ll try and keep up!

2023-01-26 – server side update

  • POTA Spotting – server updates
    • On the web site POTA “Locations” page, the table has a new parameter “Spot As (optional)” that allows you to provide a special callsign that will be used to post your spots/alerts on This is helpful when you are required to post with a prefix or suffix such as “/P” for portable, or a country prefix when operating outside your home country. For example: “VE/KA2VYS/P".
    • The existing mobile app will work fine with the new feature, but you must reload an updated configuration blob from the web site into the mobile app (in the “setup” tab). An updated mobile app has been built, but is not yet released: all it does is display the new information about what callsign will be used when posted.
    • The server now knows how to decode these new custom “Post As” callsigns.

2023-01-18 – server side update

  • SOTA Spotting / Alerting – server updates
    • On the web site “Regions” page, the table has a new parameter “Spot As (optional)” that allows you to provide a special callsign that will be used to post your spots/alerts on SOTA Watch. This is helpful when you are required to post with a prefix or suffix such as “/P” for portable, or a country prefix when operating outside your home country. For example: “VE/KA2VYS/P".
    • The existing mobile app will work fine with the new feature, but you must reload an updated configuration blob from the web site into the mobile app (in the “setup” tab). An updated mobile app has been built, but is not yet released: all it does is display the new information about what callsign will be used when posted.
    • The server now knows how to decode these new custom “Post As” callsigns.

2023-01-08 – server side update

  • 2-Way Commands
    • Fixed bug with “sotaspots“, ‘potaspots‘, and ‘sotaalerts‘ commands when there are no spots/alerts available that matched the criteria in the 60 minute time window. Now it returns a message telling the user rather than staying silent and keeping the user guessing.
    • Fixed a bug with responses to the Garmin inReach: the Garmin messaging API can’t handle certain characters in the message such as ‘<‘ and ‘>‘. Replaced with ‘{‘ and ‘}‘ until I discover a way to escape them.
    • Improved the error message when the user makes a typo and provides an unknown command. It now provides more information on the error.

2022-12-28 – server side update

  • Implemented support for sending pre-defined eMails from 1-way HF commands. Previously it only supported sending SMS. This can help with international users who don’t have SMS support for outbound SMS messages. Plus eMail is essentially free while SMS costs money.

2022-12-20 – builds 40,41,42 (platform dependent)

  • First Production Version 1.0.0 released:
  • Development builds:
  • Updated attribution page with new libraries used for FT8 audio generation. I ported a bunch of FT8 C code to C# to make it work.
  • Updated some of the in-app text and instructions.

2022-12-16 – build 37

  • New: FT8 audio generation built-in! No 3rd-party app needed.
    • A play audio button added: auto counts down to proper FT8 15-second window
    • Audio automatically repeats for up to 4 FT8 15-second transmissions
    • Added an option on the Settings tab for audio frequency to increase at 51Hz steps for each repeating transmission to try an avoid interference
    • Added an option on the Settings tab to target a specific Audio frequency. Default works well for most cell phones.
    • Added a volume slider. Note that your device must not have the hardware “mute” switch activated. Note that the volume slider in the app is multiplied by the device’s master volume (the hardware volume controls). Normally you should set the system volume at maximum and use the in-app volume slider to get a repeatable known volume percentage (after you calibrate for your radio. Read the FAQ).


  • 2-Way (SMS/eMail/Garmin inReach) Services
    • Added support for POTA Spotting with the new command “PotaPostSpot
    • Added a new option to “maxblocks” called “full” that allows far more verbose responses (in length and detail) when using eMail as the response channel (since eMails are designed to have long responses compared to SMS or Garmin inReach, etc.).
    • Improved the weather command to take advantage of “maxblocks full” verbose mode.
    • Many internal server-side improvements.
    • Bug fixes to how the “login” and “logout” commands work over SMS.


  • Mobile-app:
    • Both iOS and Android apps were updated to version 0.1.0-37. The prior version was 0.1.0-29.
    • New field-notes reference documentation for the new SOTAmāt 2-way services (SMS, eMail, Garmin eMail).
    • Improved handling of Configuration-Blob to ignore characters that are not part of the configuration before and after the blob. Allows for less-precise copy/paste
    • Spelling mistake corrected in mobile-app Setup page, where the configuration-blob goes.
    • Very minor bug fixes.
  • 2-Way (SMS/eMail/Garmin) Services
    • Improved Weather command and syntax greatly. Updated documentation.
    • Fixed issue with DNS.


  • Bug fixes
    • When sending an eMail command, better error messages if the login failed (bad PIN, etc.)
    • Changed how DNS works to (hopefully) increase reliability.
    • Tweaks to the Weather command
    • Documentation fixes for SMS/eMail/Garmin 2-way commands
  • Improvements
    • Added POTA stats to the CALLINFO command (SMS/eMail/Garmin 2-way)
    • Added POTA Park ID support to the WEATHER command (SMS/eMail/Garmin 2-way)
    • Compressed (even more!) the text output from WEATHER to better fit on Satellite devices (Garmin, etc.)
    • Improved WEATHER and how the initial time stride sync’s to midnight over a day boundary. The new way has Weather sync to midnight on a day change. Change the valid values for HourStepSize to be anything evenly divisible into 24 hours (1,2,3,4,6,8,12,24). These comments likely don’t make sense to you. Don’t worry: Weather is just smarter than it was before!
  • New Features
    • Added support for PARKINFO (similar to SUMMITINFO) to return stats on a POTA park (SMS/eMail/Garmin 2-way)


  • Automated 2-way commands (using SMS +1-601-SOTA-MAT, or eMail)
    • Added support for Garmin InReach where the InReach user sends an eMail message to the SOTAmāt automated system, and the reply is returned directly via an undocumented Garmin API. This avoids using SMS since Garmin randomly blocks SMS to non-physical phones (such as automated systems using virtual phone numbers like SOTAmāt and the SOTA SMS Gateway). The undocumented Garmin API is used for the reply message back to the InReach device since Garmin doesn’t support eMail to InReach (as that would allow spam messages to create huge satellite charges!).
    • Added support for inbound and outbound eMail.
    • Added (experimental) mountain weather forecasts
    • Added “callinfo” command to get info on a callsign
    • Added “summitinfo” command to get info on a Summit ID
    • Added Login / Logout / MaxBlocks
    • Added ability to Post a SOTA Spot
    • Added ability to Post a SOTA Alert
    • Added intelligent parsing to reduce typing for many commands
    • Added intelligent remembering of login state, last summit referenced, etc. to reduce typing
    • Added new fields to the Web Site’s “user profile” page to allow users to add a secret PIN and a cell-phone-number for automatic login.
    • Added a bunch of NEW DOCUMENTATION for the SMS/InReach features


  • SMS Inbound (+1-601-SOTA-MAT)
    • Added support for SOTA Alerts
    • Added support for POTA Spots
    • Updated behavior of SOTA/POTA spots: if the same callsign has several spots only the most recent one will be shown. Other (older) spots for that callsign are not returned, which allows more useful information to be shown. For example, if you specify a “count” of 5, and if callsign AB6D has changed frequencies 6 times recently, in the old scheme you might not see other callsigns reported. Now you will!
    • Updated behavior: there are now defaults for all the parameters and command shorthand synonyms. For example:
      • “SotaSpots” = “spots” = “Sspots” = “ss” (case insensitive, case shown for clarity only)
      • “SotaAlert” = “alerts” = “Salerts” = “sa”
      • “PotaSpots” = “Pspots” = “ps”
      • “commands”


  • Web Site
    • Added error checking to the Configuration page to make sure the user has fewer than 1 million suffix combinations. If they are over the limit, the page gives the user a warning message and will note provide a configuration-blob (and thus can’t load a bad configuration into the mobile app).
    • The page so now displays additional information about reception reports for your own callsign (the table at the top of the page). The table at the bottom of the page is unchanged (which has reception information for all callsigns). Added fields:Duplicate reception reports in addition to the first-reporting-station
      1. Receiving station callsign
      2. Receiving station gridsquare
      3. Receiving station signal to Noise ratio


  • Released iOS V0.1.0-29
  • Released Android V0.1.0-29
  • Headline features:
    • POTA Spotting,
    • SOTA Alerting,
    • Mobile app Reference Pages,
    • Backend Timestamps to keep server and mobile app in sync if the SOTA management team adds new peaks.
    • iOS app moved to Open Beta in Testflight
    • Bug fixes
  • Web-site
    • New page to select pre-defined POTA Locations (similar to SOTA Regions)
    • Updated “Preparation” page to include computing total combinations with POTA parks
    • Updated Configuration Blobs
      • Display configuration blob “pull-time”
      • Store per-user pull-time
    • Added a new “Mode” type in the Frequency/Modes page table allowing for “Alerts-CW”
    • Added a new “Mode” type in the Frequency/Modes page table allowing for “Testing”
    • Bug fix: handling of case where there is a 0 Hz step size. [For single step entries]
    • Bug fixes
    • Prevent duplicate Regions / Locations / FreqModes in Blob page
  • Server-processing
    • Database changes for POTA
      • POTA Program database added
      • POTA Locations database added
      • POTA Parks database added
      • POTA-synchronizer service pulls Program/Locations/Parks database changes from the POTA API server on regular intervals
    • Updated Configuration Blob Json to include:
      • POTA Location selections,
      • Database pull time (timestamp)
      • POTA Park ID deltas per POTA Location. This is different from how SOTA Summits work since POTA parks are not sequential within a Locaiton the way SOTA Summits are sequential within a Region. Delta’s allow the client to compute which park ID’s are valid, but still compress well in the Blob.
    • Support for handling a new “Mode” type of “Alert-CW” where it will post an Alert and use the “My Comments” field in the SOTA Alert comments (which can be picked up by RBNhole to adjust Alert time window. For example “S+12”).
    • Support for handling a new “Mode” type of “Testing” where the server will post to SOTA Watch a mode of “Other” and a comments of “Testing Ignore”.
    • Bug fixes
  • Mobile apps
    • iOS changed from Apple TestFlight “Closed Beta” to “Open Beta”. Link pasted on homepage.
    • Bug fixes, performance improvements, code cleanup.
      • Better handling of 0 Hz step size, single step frequencies
    • New Frequencies reference info page
    • New Services reference info page
    • Support for POTA Spotting (new tab)
    • Configuration blob support for POTA, Timestamps