TinyGS
A Python ground station for the TinyGS satellite network.
Plug in an RTL-SDR dongle and it connects to TinyGS over MQTT, takes the satellite assignments the server sends you, decodes the packets the SDR picks up, and reports them back to the network. A simulator is included, so you can try it without hardware.
This project is in hypercare and needs extensive field testing. It works, but it has not yet run on many antennas, SDRs or sky views. If you deploy it, we would genuinely like to hear how it went, a working station is as useful to us as a broken one. Open an issue, or email info@librecube.org with your setup: SDR, antenna, location, the satellites you caught, and anything that went wrong. Thanks :)
Install
pip install tinygs
That brings the LoRa decoder (softlora) with it. To drive an RTL-SDR dongle, add the hardware backend too:
pip install 'tinygs[sdr]'
Run a station
tinygs-create # answer some questions once -> station.json
tinygs-run # go live: connect, receive, report
tinygs-stop # go offline
tinygs-create asks for your MQTT credentials (send /mqtt to
@tinygs_personal_bot on Telegram), your
location, and your SDR settings. tinygs-run then keeps the station online.
One catch: the server only assigns satellites to stations with Auto Tune turned on, and that's a setting on the tinygs.com website. The setup guide covers it, along with antennas, credentials and troubleshooting.
Use it from Python
import tinygs
from tinygs.adapters import SimulatorRadio
config = tinygs.StationConfig(
user="...", # from the Telegram bot
password="...",
mac="AABB11223344", # any stable 12 hex chars; becomes the MQTT client id
station_name="my_gs", # the name shown on tinygs.com
)
tinygs.GroundStation(config, SimulatorRadio(interval=2.0)).run()
StationConfig.from_env() reads the same settings from TINYGS_* variables.
For a real station, swap in RtlSdrRadio(sample_rate_hz=250_000.0, gain=30.0).
RtlSdrRadio is just an IQ source plus a decoder, so supporting a different
SDR like HackRF, a ZMQ stream, a recorded file, only means a different source.
See tinygs/adapters/, and examples/ for runnable versions of all of this.
Tests
pip install '.[dev]'
python -m pytest
The integration tests run a local MQTT broker, so nothing touches the real TinyGS network.
Docs
- Setting up a live SDR station
- TinyGS MQTT protocol — the wire format this implements, reverse-engineered from the ESP32 firmware
About
Developed with LibreCube, an open source initiative for space and earth exploration systems, as a Google Summer of Code 2026 project. The LoRa decoder it builds on, softlora, comes from the same effort.
MIT licensed. See LICENSE.
Metadata
Release files for tinygs 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| tinygs-0.1.0.tar.gz | 37.1 kB | Without provenance | Details for tinygs-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| tinygs-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for tinygs-0.1.0-py3-none-any.whl |
Total release size: 78.7 kB
Release files / tinygs-0.1.0.tar.gz
| Download URL | tinygs-0.1.0.tar.gz |
|---|---|
| Size | 37.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
126fe22c1352d14cfbd036264d252c0c8145a50ca45c1def8ea3e1b2d23f8bee
|
|
BLAKE2b-256 checksum How to use checksums |
8900006d6b6bdbe0c02563f7ac2200ae61d5181cc9fc00ffc45d09db2250b37c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|
Release files / tinygs-0.1.0-py3-none-any.whl
| Download URL | tinygs-0.1.0-py3-none-any.whl |
|---|---|
| Size | 41.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cfcf1f811db5b183e0ccbc5e682eb66ae2bec79505f675733087a95b6abcc158
|
|
BLAKE2b-256 checksum How to use checksums |
69f15c6a85d9c23a75f523eb0643ae406698a67bacaa39d76bab46d99c8229f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|
Security for tinygs 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.