Skip to content

Repository files navigation

HFcast

HFcast is a privacy-first offline-friendly HF propagation forecasting app for amateur radio operators. Absolutely free, no ads, no tracking of any kind.

Get it on Obtainium Get it on GitHub

Pick a place, pick a band, enter your radio settings and get a custom forecast for HF propagation.

Home screen dark theme Home screen light theme Home screen low light theme

All band propagation grid view Station power and mode settings Antenna height, type and orientation

Licence Android 7.0+ GrapheneOS Built with Isopod

What the forecast is

HFcast runs two propagation models, both run locally on your device. Both are built on the physics behind VOACAP, the point-to-point model NTIA/ITS has maintained for decades, translated faithfully to Rust.

Truecast, the default, is HFcast's own model. It works from what the ionosphere is doing on a day to day basis, using a daily sunspot figure derived from ionosonde stations, a table of magnetic storms, and an estimate of the height a signal bounces from. Scored day by day against ionosonde measurements since 2015, it was closer than VOACAP on 77% of days, and its average miss was about a fifth smaller.

VOACAP is the classic model, reproduced faithfully down to a few defects in the original, and available in Preferences for anyone who wants to use this traditional reference model. It reports a monthly average, so 4pm on a Tuesday in August will look the same as a 4pm this Thursday in August.

Both models work with no network. Online, Truecast takes a live effective sunspot index and VOACAP takes the current sunspot number; offline, Truecast falls back to a built-in correction for the time of year that still beats the monthly average.

See HFcast engine for more information

Privacy

Three things reach the network, and only when you are online:

  • Today's space weather, from NOAA
  • Recent ionosphere measurements, from GIRO
  • Place-name search, from Open-Meteo. The app has 4,064 places built in, and only searches online when those turn up little or nothing for what you typed. A grid square or a latitude and longitude is worked out on the phone and never reaches the network.

The forecast itself is computed on the phone. Your station, your antenna and the path you are forecasting are never sent anywhere. The one thing that does leave is a place name you type into the search box, which is covered below.

What those three can see

NOAA, GIRO and Open-Meteo each see your IP if you choose to allow network permission for the app, and Open-Meteo also sees the place name you typed. None of them is told who you are, but an IP address is roughly a location, so it is worth knowing about.

Two ways around it:

  • Put the app behind a VPN / Tor
  • Deny the app network access altogether. GrapheneOS has a per-app Network toggle, and a local firewall does the same job on stock Android. The forecast still works from the sunspot table and the seasonal correction built into the app, and you can still name a location by grid square or coordinate.

One item in the code that may cause confusion

Anyone who unpacks the APK will find this, so it is worth explaining:

  • classic-assets.eascdn.net is a hostname inside expo-asset. A standalone build never calls this, so the line cannot run. This is a build tool item that pulls in fonts and images at build time.

Everything else:

  • Runs on a de-Googled phone or your old tablet without any Google services
  • Developed and tested on GrapheneOS
  • Works fully offline by calculating conditions based on historical HF propagation records
  • No ads
  • No account
  • No sign-in
  • No tracking
  • No data collection
  • No phoning home
  • No annoying registration
  • No mandatory tutorials
  • No noisy email spam
  • No push notifications
  • No spyware

Build it

CI arm64-v8a armeabi-v7a x86_64 x86

Start with the quick start — about 15 minutes on a machine that already has the toolchain — then the rest of the development guide if you're going to work on the code.

What's in this repository

Part What it is
mobile/ The application, for Android and the web
server/ The prediction API, for builds that have no engine
docs/ The guides

The propagation engine itself lives in a separate repository, hfcast-engine; a Rust translation of VOACAP, tested cell by cell against the original Fortran.

Built on the work of

Almost everything HFcast knows comes from other people's work. The same list, with links and full licence text, is in the app's About screen.

What Whose Terms
VOACAP, the propagation model NTIA/ITS, maintained by Greg Hand US Government work, not subject to copyright protection in the US
voacapl, the Unix port this engine was translated from J.A. Watson CC0
The ionospheric coefficient maps CCIR Reports 322 and 340, published by ITU-R published for implementers free from copyright assertions
The place list searched offline NTIA/ITS, from the VOACAP distribution US Government work
Coastlines and country borders Natural Earth public domain
Sunspot numbers and solar indices NOAA Space Weather Prediction Center US Government work
Measured ionosonde soundings UMass Lowell Global Ionosphere Radio Observatory used with attribution
Place search, when online Open-Meteo CC BY 4.0
The aurora on the launch screen NASA / Samantha Cristoforetti, ESA public domain
IBM Plex Sans, the typeface IBM SIL Open Font License 1.1

Three of those are live services the app calls directly, with no key: NOAA and GIRO, at most once every 15 minutes each, and Open-Meteo, only when a searched place isn't in the built-in list.

The Institute for Telecommunication Sciences, NTIA, US Department of Commerce, developed VOACAP. NTIA/ITS and NOAA do not endorse HFcast and are not responsible for what it reports.

Licence

Apache-2.0. See LICENSE and NOTICE.