← Spektra RF · Licences & source

License

Spektra ships as two separate programs under two different licenses. This file is the authoritative map of which paths are covered by which license. If you only read one licensing file in this repo, read this one.

The App — proprietary

© 2026 Squaresmile Media. All rights reserved.

The desktop application — the Tauri shell, the browser frontend, and the branding/assets that make up the packaged .app/.dmg/Windows installer UI — is commercial, proprietary software. It is licensed to end users under the terms of EULA.md, not under an open-source license.

Proprietary paths:

  • src-tauri/ (Rust shell: Cargo.toml, tauri.conf.json, capabilities)
  • index.html
  • js/ (except the vendored js/vendor/jspdf.umd.min.js, whose own MIT header stays verbatim — see THIRD-PARTY-NOTICES.md)
  • css/
  • advisor.js, analysis.js, export.js
  • favicon.svg and other branding assets

Do not add an open-source license header to any file under these paths.

The Engine — GPL-3.0-or-later

The Python engine — the RF scanning/DSP backend that is frozen into the PyInstaller sidecar and shipped inside the App bundle — is free software licensed under the GNU General Public License, version 3 or later (GPL-3.0-or-later). The full, verbatim license text is at licenses/GPL-3.0.txt.

This licensing choice is not a preference — it is a requirement. The engine links pyrtlsdr (GPL-3.0-or-later) and, at runtime, loads GPL-2.0-or-later native libraries (librtlsdr, libhackrf, libairspy). Distributing a program that links GPL code means the combined work must itself be GPL-licensed.

The exact 24 GPL-3.0-or-later engine files (each carries its own SPDX header, see below):

Root (8): scanner.py, transport.py, transport_audio.py, transport_dsp.py, transport_http.py, transport_waterfall.py, demod.py, synthetic_sdr.py

sources/ (15): sources/__init__.py, sources/airspy_source.py, sources/base.py, sources/demo_source.py, sources/device_constants.py, sources/hackrf_source.py, sources/rfexplorer_source.py, sources/rtlsdr_source.py, sources/sdrplay_source.py, sources/serial_source.py, sources/soapy_enumerate.py, sources/soapy_source.py, sources/tinysa_detect.py, sources/tinysa_source.py, sources/tinysa_ultra_source.py

pyinstaller-hooks/ (1): pyinstaller-hooks/rth_soapy_plugin_path.py (a PyInstaller runtime hook frozen into the sidecar to fix the SoapySDR plugin search path)

Nothing in EULA.md does or can limit anyone's rights under the GPL-3.0-or-later for these 24 files — the EULA governs the App only, and the GPL carve-out clause in EULA.md says so explicitly.

The boundary between them

The App and the Engine are separate programs. The Tauri shell spawns the Engine as a subprocess (the PyInstaller sidecar) and talks to it exclusively over local network sockets — HTTP on 127.0.0.1:38080 (walking to :38090 if occupied) and WebSocket on 127.0.0.1:38765. There is no shared process memory, no linked library boundary, and no compiled-in coupling between the two programs; they communicate at arm's length via a local network protocol, the same way a browser talks to any local web server.

Third-party components

Everything else bundled into the shipped distributions — third-party libraries, tools, and installer resources not written for this project — is inventoried with its own license in THIRD-PARTY-NOTICES.md, including the written source offer required for the GPL/LGPL components.

Verbatim from the Spektra 3.19.0 release. Download LICENSE.md · SHA-256 551d702adcf15f8adf6bf54dc647195d5c010120b095c37b869940c39d5e9b1e