• 2.0 14e4886c1b

    2.0 Stable

    ian released this 2026-08-22 07:11:03 +00:00 | 3 commits to main since this release

    After nine months of effort, I'm proud to announce the second major release of Spothole!

    This is a major behind-the-scenes update with breaking changes to the API and configuration file, along with a huge overhaul in how some of the software's internals work, particularly looking up SIG references and callsigns.

    For Web UI Users

    The big changes in Spothole v2.0 are all under the hood. In terms of new features you'll notice, check out the new ability to highlight "wanted" calls, and the "distance" column in the main spot list.

    For Client Developers

    The good news is, backwards compatibility and the v1 API calls all still work, so there is nothing you need to change immediately. However, I recommend you update to the v2 API when you can. There are only a few minor breaking changes which may not even affect you, depending on how your software calls the API. Please see the API changelog for more information and specific notes about updating from v1 to v2.

    For Self-Hosters

    Please note that the config file (config.yml) has significantly changed its structure and a number of property names have changed as well. I recommend starting from scratch by copying config-example.yml to config.yml and re-populating any fields you had set for your instance, such as the URL, server owner callsign, GMA and ClubLog API keys, etc.

    If you would like to run Spothole in a docker container, a Dockerfile and documentation is now available for this.

    For Developers

    The developer docs (minimal as they are) have been updated to show the new locations of areas of source code. The major structural change is the move from spotproviders, alertproviders and solarconditionproviders into sub-directories of providers, where they are now joined by new providers which allow lookups of SIG reference and callsign data. SIG reference lookup now operates using downloaded static data (e.g. CSVs) from each SIG, to spare the third-party servers from too much load, and the provider classes sort out regular repeating lookups.

    Full Changelog

    Features

    • Complete rework of how SIG references are looked up, based on downloaded static data (e.g. CSVs) from each SIG rather than live queries to their server for every reference
    • Moved callsign lookup to another provider subclass tree
    • Introduced API v2, including breaking change to the API to allow for future upstream posting of spots to other services e.g. cluster, POTA. This feature has not yet been enabled, but the v2.0 API changes provide the groundwork to support it in future.
    • API changes to keep QRZ/HamQTH credentials out of server logs, provide more consistent variable names, add support for the new provider types.
    • Add "altitude" (when relevant) and "type" to SIG ref lookups using the API
    • Add backwards compatibility hooks for v1 APIs
    • Support for reCAPTCHA on spot submission
    • Support for highlighting of "wanted" calls and partial calls in the web UI
    • Add support for SANPCPA and GMA Islands SIGs
    • Add location lookup for KRMNPA SIG
    • Support Toilets on the Air at HOPE 26
    • Add "distance" column to main spot list
    • Add Dockerfile and documentation for running Spothole in docker
    • Improve cache handling for all data types

    Bug Fixes

    • Fix a bug where duplicate spots and alerts could sometimes be registered
    • Fix ZLOTA location lookup
    • Fix incorrect IOTA locations
    • Fix a large number of places where errors could be logged (including full exception stack traces) due to invalid user input when calling APIs
    • Fix inconsistencies about whether dashes or underscores are used in certain config properties and variable names
    • Fix inconsistencies in how log formatting was applied across the codebase
    • Fix some incompatibilities with older Python versions
    • Static analysis fixes and enforce better formatting using ruff

    Thanks

    Thanks in particular are due to Dan S50U, Matt W1CDN, Norby LX1NO, Andrew VK3ARR, Mario DL4MFM, Mark M5TEA, Michael G7VJR, Rob G7LAS, Ed DD5LP, Raph F4LUB, Luc ON7KEC, Richard GD4OFB, Daniel PY2TDB, Alan VK1AO, Andrew WK1AD, Ullrich DF5WC, Wayne N3CDF, Jonathan G4IVV, Erik N2EPE, Sorin YO9TSN, Matt HB9HWI, Priit ES1TEB, and Leigh KG7WED for providing assistance, feedback, bug reports, feature requests or just showing me something cool they built with the Spothole API. (There are probably more of you that I have forgotten, sorry!)

    Downloads
  • 1.5.2 0e6eba80a9

    1.5.2 Stable

    ian released this 2026-08-11 04:50:18 +00:00 | 119 commits to main since this release

    This release fixes a bug where the software did not start using the example config, due to a stray dash character. It also fixes a "nested quotes in format string" issue that affected Python 3.11 and below.

    Downloads
  • 1.5.1 7860b60f47

    1.5.1 Stable

    ian released this 2026-08-10 05:06:33 +00:00 | 121 commits to main since this release

    This release fixes a bug where the software did not start using the example config, due to "spot providers enabled by default" still being fetched through WEB_UI_OPTIONS on a path that required spot providers to have a "name" field in config rather than at runtime (#124). Thanks @W1CDN!

    Downloads
  • 1.5 d9ce8db48b

    1.5 Stable

    ian released this 2026-08-08 07:43:43 +00:00 | 122 commits to main since this release

    Version 1.5 is a minor release that includes the following features:

    • Support and documentation for running in a Docker container
    • Extraction of grid references from comments like JO21sv -> IO70vt
    • Use the newly added lat/lon data from SOTA spots
    • Update WAB/WAI grid layer in preparation for misc.ianrenton.com going offline
    Downloads
  • 1.4 c2ecef1003

    1.4 Stable

    ian released this 2026-08-02 10:40:28 +00:00 | 133 commits to main since this release

    The following changes are included in the 1.4 release:

    • Support for the DME (Diploma Municipios de España) SIG
    • Support for KC2G propagation data
    • Improvements to map marker reloading
    • Improvements to general spot loading when QRZ/HamQTH credentials are supplied
    • API-only mode (disables web UI)
    • Update GMA server to gma.rocks
    • Supply GMA API key now that GMA API requires it
    • Improve IOTA location lookup
    • Fix support for Towers references that start with three letters
    • Update LLOTA references to new "LLXX" scheme
    • Improved disambiguation between Towers, Tiles and Toilets on the Air
    • Look up nicknames from QRZ
    • Extract grids and propagation modes from cluster comments like AA00aa<ES>AA00aa
    • Cache 400-series responses from API calls so we don't repeatedly query for SIG refs that don't exist
    • Reduced logging of errors due to clients' malformed requests
    • Internalise 3rd party JavaScript files to prevent checksum errors on CDN server re-minifying
    • Improved README to suggest serving static files directly from nginx
    • Improved README with credits for data files
    • Various bug fixes and performance improvements

    This version includes a new dependency on the simplejson library. When updating from 1.3 to 1.4, please ensure you update your dependencies (e.g. source .venv/bin/activate && pip install -r requirements.txt).

    This version includes config file changes. The most significant ones that you may consider updating in your config.yml are:

    • At the top level, api-only-mode, log-level and log-web-requests have been added. These have sensible defaults that shouldn't break anything, so add them to your config.yml (based on the example in config-example.yml) if you like.
    • The GMA spot provider now needs an api-key parameter set, otherwise GMA will be disabled as a spot provider. GMA API keys can be requested by creating an account on gma.rocks and emailing support to request one.
    • KC2G is now supported as a source of propagation data. Under solar-conditions-providers, add a new entry as follows:
      - class: "KC2GProp"
        enabled: true
    

    Thanks for using Spothole!

    Downloads
  • 1.3 af1974f36d

    1.3 Stable

    ian released this 2026-06-02 18:16:10 +00:00 | 206 commits to main since this release

    The following major changes are included in version 1.3:

    • Conditions panel, showing solar condition history and forecast from multiple sources
    • Ability to tag callsigns as "worked"
    • Optional audible alert for new spots
    • Support for Towers and Tiles on the Air
    • Improvements to theme detection
    • Add choice of basemap and overlays to the map
    • Add the option for server owners to add a link or button to support the server financially (or inject other content)
    • Improvements to default zoom behaviour on the map
    • Added support for Python versions back to 3.8

    The release also includes a number of bug fixes, layout tweaks and other general improvements.

    Downloads
  • 1.2 33bdcca990

    1.2 Stable

    ian released this 2026-01-18 12:47:34 +00:00 | 311 commits to main since this release

    Features

    • Support Lagos y Lagunas On The Air
    • Allow filtering based on mode, not just mode type
    • Bring back the search box on the mobile spots list

    Bug Fixes

    • Fix a bug where an exception would be shown when parsing the BOTA page if there were no upcoming activations
    • Fix a bug where some WWFF references had "-" for lat/lon/grid and Spothole did not deal with them well
    • Fix a bug where the "last updated time"/"last spot time" of providers that have never updated would be sent as a large negative number and represented on the web UI as e.g. "2026 years ago"
    Downloads
  • 1.1.1 9b3536d740

    1.1.1 Stable

    ian released this 2026-01-12 20:37:56 +00:00 | 319 commits to main since this release

    • Ensure "RTT" as a mode is understood as "RTTY" and similar.
    • Replace "Z" in ISO timestamps with "+00:00" for backwards compatibility with older versions of Python
    Downloads
  • 1.1 059d9364eb

    1.1 Stable

    ian released this 2026-01-11 15:35:39 +00:00 | 321 commits to main since this release

    Major changes

    • Add a Server-Sent Event endpoint and use it for the main "spots" page of the web UI #3
    • Allow the callsign used when connecting to a DX cluster node to be different to SERVER_OWNER_CALLSIGN. This allows you to specify and SSID and therefore make multiple connections to the same cluster using different filters, or simply not kick off your other logger's connection to a cluster (requested by S50U)
    • Allow RBN spots to come from cluster node connections (configurable) (requested by S50U)
    • 39C3 (and future) Toilets on the Air support #82
    • Allow general search of callsigns and comments #86
    • Dark mode! (for 39C3)
    • Band colour schemes!
    • Embedded iframe mode to set up Spothole with pre-configured filter/display options and hide all UI (for 39C3)

    Minor changes

    • Add "de" callsign to mobile spots list
    • Added a quick toggle to the band filters to select Ham HF bands only
    • Add config for "Number of Spots" and "Spot Age" #79 (requested by W1CDN)
    • Look up a dxcc.json from the web rather than embedding DXCC data in Python code #80
    • Remove duplicated enums in spec #83
    • Allow filtering on SIG, not just on Source #84
    • "Guess mode based on frequency" should take into account common digimode ranges #85
    • Detect and handle PWA app switch #89
    • Activation score should move into a sig ref rather than being top level in a spot/alert #91
    • Allow providers to be off-by-default in the web UI #93
    • Use tower-cell icon for cluster/unknown spots rather than the desktop icon
    • Improve expired spot handling and efficiency of handling expired spots during web requests.

    Bug Fixes

    • Fix a bug where API spots with grid have dx_location_source NONE, dx_location_good false #90
    • Fix a bug where a spot with no DX lat/lon could still be marked as having "good location"
    • Fix URLs for WOTA outlying fells
    • Fix a bug where SIG API spots could be re-tagged as another SIG e.g. WAB if that was named in the comment.
    • Fix a bug where spothole was too keen on extracting secondary references for xOTA programmes from comments, and was not checking that the "references" it found were surrounded by whitespace.
    • Hacky workaround for browser JS file cache invalidation issues
    • Improved rejection of "AA00aa" grids
    Downloads
  • 1.0.1 cf46017917

    1.0.1 Stable

    ian released this 2025-11-12 17:40:24 +00:00 | 409 commits to main since this release

    Fix lack of emoji flags on Chromium/Windows by including images. Fix a WOTA spot parsing bug.

    Downloads