mrkeyoor.com_
Thu 10 Sept 16:50 UTC
Self-Hostedevaluationupdated 10 Sept 2026

ground-station review

Ground Station is a browser application for tracking satellites, steering antennas and radios, receiving SDR signals, and saving or decoding observations. It brings orbit planning, live waterfall views, hardware control, recording, and scheduled passes into one self-hosted interface.

trackingstars / 7d
Verdict

Our Ground Station backend installed 139 packages and built in 7 seconds, but the test run exited 2 before producing results and pip-audit found 3 known vulnerabilities. Try it if a single web console can replace several satellite, SDR, and scheduling tools, and if privileged hardware access fits your host policy. Wait if clean source validation, a native Windows package, or uniformly finished decoder support is a requirement.

We ran it

Lab card: what happened when we ran ground-stationScreenshot of ground-station (github.com/sgoudelis/ground-station)
Install✓ · 95s139 packages · 505 MB
Build✓ · 7s
Tests✗ · 11sran, no count parsed
Known vulns3(pip-audit)
Repo2328 files~246,507 lines of source · 167.3 MB · 3 CI workflows · tests dir

Answers from our run

Does ground-station build from source?

Dependencies installed in 95 seconds (139 packages), and the build succeeded in 7 seconds. We cloned commit 7846137 into a clean Debian container with 3 CPUs and no project-specific setup.

Do ground-station's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Does ground-station have known vulnerabilities in its dependencies?

pip-audit flagged 3 known advisories in the dependency tree at the time of our run.

Who should not use ground-station?

Windows users expecting a supported native installer: development issue 74 still asks for an .exe, while the documented release path is Docker on AMD64 or ARM64.

What are the alternatives to ground-station?

SatDump, Gpredict, OpenWebRX. Our Ground Station backend installed 139 packages and built in 7 seconds, but the test run exited 2 before producing results and pip-audit found 3 known vulnerabilities.

Setup2/595-second install; pytest arguments were intercepted
Docs4/5Detailed hardware, Docker, architecture, and workflow guidance
Community4/54,771 stars with current pushes and active issue replies
Maturity3/5Frequent v0.8 releases, with tests and decoder caveats

Who it’s for

Amateur radio operators who want one browser interface for satellite passes, SDR reception, rotators, and rigs.
Ground-station builders prepared to give a container direct access to USB radio hardware.
Researchers who need scheduled IQ recording in SigMF format with target and pass metadata.
Operators with several SDRs who want live monitoring and unattended observations from the same system.

Who it’s NOT for

Windows users expecting a supported native installer: development issue 74 still asks for an .exe, while the documented release path is Docker on AMD64 or ARM64.
Security teams that prohibit privileged containers or host networking: the documented USB commands use --privileged, and automatic SoapySDR discovery needs host networking.
Buyers who need every advertised receiver and decoder path to have the same support level: the README calls Airspy HF+ untested and marks some AFSK, LoRa, and GMSK work as unfinished in its architecture notes.
Teams requiring a clean standard pytest run before adoption: our backend test command exited 2 because the application parser rejected pytest's arguments.
Operators unwilling to investigate dependency advisories: our installed Python environment produced 3 known vulnerabilities in pip-audit.

Setup reality

Our backend install took 95 seconds, added 139 packages, and used 505 MB. The build succeeded in 7 seconds. Tests failed with exit 2 after 11 seconds because __main__.py rejected pytest flags such as -q, --maxfail=200, and --timeout=120; the log had no pass/fail summary. Pip-audit found 3 known vulnerabilities.

Useful operation needs a station location and a mounted data directory. Hardware paths can also require USB device access, udev rules, SoapySDR or vendor libraries, Hamlib services, and radio-specific configuration. Gemini Live or Deepgram credentials are optional and only needed for their transcription paths.

The current release docs favor Docker on AMD64 or ARM64, use port 7000, and recommend Raspberry Pi 5 for Pi deployments. Automatic SoapySDR discovery needs host networking; the sample USB commands run privileged. Our measured scope reported no Dockerfile, while the current README documents a root multi-stage Dockerfile, so our successful build was not a verification of the published container path.

One web app controls passes, radios, and recording

Ground Station combines orbit tracking, a live SDR waterfall, rig and antenna control, signal decoding, and observation scheduling. Its FastAPI backend coordinates worker processes while a React interface shows targets, hardware state, audio, packets, and saved files. Scheduled jobs can start tracking at acquisition of signal, stop at loss of signal, and combine IQ or audio recording with decoding and optional transcription.

The broad scope is the reason to consider it. A SigMF recording can be replayed through the same processing path as live radio, including FFT display, demodulation, and decoders. Multiple SDRs can observe one pass, while isolated internal VFO sessions keep scheduled work separate from an interactive session. Two account roles, admin and operator, cover a small station better than exposing every control to every browser user.

Device coverage includes paths that remain untested or unfinished

The README names RTL-SDR over USB or rtl_tcp, local and remote SoapySDR devices, MiriSDR, UHD or USRP, and a virtual SigMF source. Rotator and rig integration use the usual radio control paths, including Doppler-corrected tuning. Release v0.8.6, published September 6, 2026, added MiriSDR support through SoapyMiri and shipped separate AMD64 and ARM64 container tags.

Support depth varies. Airspy HF+ is explicitly untested, and the architecture section labels some AFSK, LoRa, and GMSK decoder work as unfinished even though the larger feature list names those protocol families. Native LoRa development requires building GNU Radio 3.10 and gr-lora_sdr; the guide estimates 15 to 30 minutes for that GNU Radio build. The release image includes those pieces, which makes Docker the saner evaluation path for most operators.

What happened when we ran it

Our sandbox installed the Python backend in 95 seconds, adding 139 packages and using 505 MB on disk. The build step succeeded in 7 seconds. Tests exited 2 after 11 seconds, and pip-audit reported 3 known vulnerabilities. We ran commit 7846137 in an unprivileged Debian container with 3 CPUs, 8 GB of RAM, and no secrets.

The failing log did not report any passed or failed tests. Instead, __main__.py printed the Ground Station application usage and rejected pytest options including -q, --maxfail=200, --continue-on-collection-errors, and --timeout=120. That is the complete supported conclusion: the test command and application argument parser collided in our environment. The log does not show which tests would pass after correcting invocation.

The checkout contained 2,328 files, about 246,507 source lines, and occupied 167.3 MB. Our scan found 3 CI workflow files and a tests directory, but reported no Dockerfile in the measured scope. The current README now describes a root multi-stage Dockerfile and published images. Our 7-second source build therefore says nothing about USB passthrough, SDR libraries, frontend startup, or hardware behavior inside v0.8.6.

Docker needs broad hardware access for the documented USB path

The release examples mount persistent data at /app/backend/data and expose the web interface on port 7000. Direct USB examples pass the bus into the container and use privileged mode. Remote SoapySDR discovery over mDNS also requires host networking; bridge mode works for local receivers and other features. Host administrators still need device-specific udev rules and must verify USB access before startup.

Those permissions deserve deliberate treatment on a machine that stores recordings or shares a LAN with other equipment. Put TLS and access policy at a reverse proxy, bind only where intended, keep the data mount backed up, and confirm the admin account after first setup. The project documents an Nginx route, but the sample container itself is reached over plain HTTP. A Raspberry Pi deployment is recommended only for Pi 5 hardware.

SDRplay adds a separate licensing wrinkle. The Docker build uses a pinned archive of the proprietary RSP API v3.15, verifies its SHA-256, and tells distributors to review its EULA. This is more careful than silently downloading a moving binary. It still means GPL-3.0 coverage of Ground Station does not make every bundled vendor component open source.

A single station still depends on several outside services

Orbit and transmitter data come from configured sources, with CelesTrak feeds and SatNOGS integration documented. Celestial and deep-space targets can call NASA JPL Horizons. Gemini Live or Deepgram power optional transcription and therefore bring separate credentials, network traffic, cost, and retention choices. SatDump can post-process IQ recordings for supported weather-satellite workflows.

The application can run without every optional service, but a planned observation must be tested with the exact combination it will use. Check orbital updates, clock and timezone, receiver selection, rotator limits, disk space, and loss-of-signal cleanup before leaving it unattended. Issue 86 reports that the setup wizard selected a local timezone but the dashboard came up as Europe/Athens until the preference was changed manually.

v0.8.6 is active enough to demand careful upgrades

GitHub recorded a last push on September 9, 2026. Ground Station had 4,771 stars and 13 combined open issues and pull requests when fetched. Fresh reports covered timezone selection, a default rotator port, direct antenna positioning, and another SDR request. That issue activity, together with v0.8.6 three days earlier, shows maintainers and users are currently exercising real station setups.

Fast releases also change operational behavior. v0.8.4 corrected a timezone interpretation bug in orbital epochs, while v0.8.3 changed recording controls and database restore handling. Pin a release tag, preserve the data volume, and rehearse restore before upgrading. Ground Station earns a trial for an experienced radio operator who wants integration more than simplicity, but the 11-second failed test run and 3 dependency findings keep it out of unattended duty until locally verified.

Alternatives

ProjectWhat it isPick it when
SatDumpA desktop and command-line suite centered on receiving and processing satellite data.pick this instead when decoding satellite signals and products matters more than browser-based station scheduling or rotator control.
GpredictA long-running desktop application for satellite orbit prediction and radio or rotator control.pick this instead when pass prediction and direct desktop control are enough, without a web server or recording pipeline.
OpenWebRXA multi-user web receiver for listening to and decoding SDR signals remotely.pick this instead when shared browser access to an SDR is the main job and satellite automation is secondary.

What people are saying

  1. [github-trending] sgoudelis/ground-station

Sources

  1. Ground Station README
  2. Ground Station development guide
  3. Ground Station v0.8.6 release
  4. Ground Station timezone mismatch issue
  5. Ground Station Windows installer request

More self-hosted reviews

halo · server · gpustack · mastodon · changedetection.io · clash-party · the whole board →