Features

Everything here runs on your iPhone. Reminders, the widget and the Live Activity are worked out from the same passes the app lists, and nothing is sent anywhere.A-01A-30A-36A-38

Reminders

Pick a pass and tap Set the reminder. Your iPhone tells you 1, 5, 10, 15 or 30 minutes before it rises (10 unless you choose otherwise).A-31A-30 The notification says when it rises and in which direction, how high it gets, when it sets, and whether there'll be anything to see. For example: "In daylight: not visible, radio only."A-31b

Alerts for every pass. Star a satellite and turn on alerts, and the app sets a reminder before every pass it makes over you that reaches your minimum height and clears your horizon. They go up to 10 days ahead. You can limit them to the hours you've chosen to watch.A-32

Go deeper

Live Activity

Start a Live Activity from any pass, up to eight hours before it, and follow it on the Lock Screen and in the Dynamic Island.A-34A-35

Go deeper

The countdowns belong to iOS and keep running by themselves. The live readings need the app, because there's no push server: nothing outside your phone updates it. When you leave the app, the readings stop shortly after, and the countdowns and the rise-and-set frequencies stay.A-36A-35b

Widget

Next pass, for your Home Screen, in small and medium sizes. It shows the next pass of your starred satellites over your location: when it rises and how high it gets. The medium size adds the next two passes after it.A-37

Go deeper

The widget works its passes out itself, from the element sets and location the app keeps on your phone. It fetches nothing. It looks 2 days ahead, for up to 25 starred satellites.A-38

Doppler and radio

A Space Station pass, with its Doppler card for 437.800 MHz. Data: CelesTrak, recorded 21 September 2026.
A Space Station pass, with its Doppler card for 437.800 MHz. Data: CelesTrak, recorded 21 September 2026.

Every pass in Detailed has a Doppler card.A-57

  1. Type the satellite's published frequency in megahertz (1 to 100000).
  2. Choose Downlink (to listen) or Uplink (to transmit).
  3. Read "Tune the receiver to" or "Tune the transmitter to", as a curve and as a table with about ten lines: the rise, round clock times through the pass, the highest point and the set.

A-40A-41 Save this frequency keeps it for that satellite, so you type it once. Saved frequencies can then appear on the Live Activity.A-42A-35b You can also set your location from a Maidenhead grid square of four, six or eight characters.A-43

Go deeper: the formula

As the satellite comes towards you, its signal arrives higher than it was sent. As it moves away, it arrives lower. With the range rate ṙ (how fast the distance changes, positive while it moves away) and the speed of light c = 299,792.458 km/sK-60:

For 437 MHz and a satellite coming towards you at 7 km/s, that is about 10.2 kHz high.K-61 The app doesn't come with a list of frequencies: you enter the one you use.A-42b

A six-character grid square puts you within a few kilometres, which moves a pass's times by a second or so. Four characters can be a hundred kilometres out, so they're good for a rough look only.A-43

Horizon mask

Your real horizon is rarely flat. In Detailed, under Location, Horizon mask lets you set how high the hills, buildings and trees reach in each of eight directions.A-44A-57 Each pass then runs from where the satellite clears them to where it goes behind them. A pass that never clears them is left out, and counted under the list.A-44A-45

Go deeper

Your own files

Download CelesTrak's amateur radio satellites with one tap, or bring your own element sets.A-10A-12

In Detailed, tap Import a file and choose one or more files from the Files app.A-47 GP Passes reads:

The app works out the format from what's in the file.A-46 Satellites numbered above 99,999 are read too. The app shows each catalog number as plain digits, and for 100000 to 339999 it also shows the Alpha-5 form a TLE would use.A-48K-24

Go deeper

Sharing a pass

Tap Share this pass on any pass to send it as plain text, through the share sheet, to a friend, your club, or your own notes.A-24A-62 It's one short line each for the day, the rise, the highest point, the set and the light. There's a warning if the orbit data is old, and the last line names the time zone.A-62

For example, the SARAMAGO pass from How it works, shared from a phone set to US English and Eastern timeA-62E-03E-05E-06E-07:

SARAMAGO passes over on Wednesday, July 15.
Rises at 3:45 AM in the north-north-east.
Highest at 3:50 AM, 48° up in the east.
Sets at 3:56 AM in the south.
Can be seen 3:45 AM to 3:52 AM.
Times are EDT.

Go deeper

The text holds no place: no coordinates, no grid square and no place name. A pass looks like this only from near where it was worked out, so say where in your own words if you want to. The app hands the text to the share sheet and sends nothing itself. Where it goes is your choice.A-62

Sources

  1. A-01 Passes are worked out on the phone, from element sets, using GPKit's SGP4. Source: Passes: Modules/Sources/PassesCore/Passes.swift:116-129; Modules/Package.swift:24-25.
  2. A-30 Reminders are local notifications. The pass screen says under the button: "A notification from this device at the time chosen. Nothing is sent anywhere.". Source: Passes: ReminderCenter.swift:20,42,78-84; PassDetailView.swift:920.
  3. A-36 There is no push server for Live Activities. Source: Passes: LiveActivityCenter.swift:12-17.
  4. A-38 The widget computes passes itself from app-group data, fetches nothing, and looks 2 days ahead for up to 25 starred satellites. Source: Passes: NextPassWidget.swift:17-18; Shared.swift:91,205.
  5. A-31 Reminder lead times are 1, 5, 10, 15 or 30 min, default 10. Source: Passes: Reminder.swift:22; ObserverLocation.swift:437-443.
  6. A-31b The reminder's text: " rises in N minutes"; the rise, highest point and set with directions; a light sentence such as "In daylight: not visible, radio only.". Source: Passes: Reminder.swift:43-77.
  7. A-32 Alerts can be set for every pass of a starred satellite, up to 10 days ahead, within iOS's 64 pending notifications. "Only during my hours" is optional and off by default. Source: Passes: PassAlerts.swift:4-17; AppModel.swift:82-89.
  8. A-33 Reminders use a time-interval trigger (an audit found the earlier calendar trigger moved with daylight-saving time, H-1). Source: Passes: ReminderCenter.swift:78-84; audit/AUDIT-2026-10-08.md:63.
  9. A-44b The widget and Live Activities follow the horizon mask; reminders already set move with their passes, or are removed. Source: Passes: HorizonMaskView.swift:73; Glossary.swift:59.
  10. A-34 Live Activity: Lock Screen and Dynamic Island, countdowns to rise, highest point and set, a progress bar. Source: Passes: PassesWidgetsUI/PassLiveActivity.swift:334-344,406-454.
  11. A-35 The Live Activity can start up to 8 h before the pass. Live elevation and Doppler refresh every 2 s while the app is open. Source: Passes: LiveActivityCenter.swift:42-43; RootView.swift:114-122.
  12. A-35b With a saved frequency chosen ("Tuning for"), the Live Activity shows the frequency at the rise and the set ("Receive … MHz at rise, … at set"). Those stay after the app leaves the screen, and live readings stop. Source: Passes: PassDetailView.swift:1000-1001,1031-1037; PassLiveActivity.swift:186-191,245; LiveActivityCenter.swift:12-17.
  13. A-37 The "Next pass" widget comes in small and medium sizes, and the medium one adds the next two passes. Source: Passes: NextPassWidget.swift:43-55,176-213.
  14. A-57 What Plain hides: sort, import, the grid square and horizon mask controls, Doppler, finer figures, the orbit and the element set. Source: Passes: SatelliteListView.swift:113-150; LocationView.swift:34-47,146-161; PassDetailView.swift:93-129; SettingsScreen.swift:26-31,76-107.
  15. A-40 Doppler: you type a frequency (1 to 100000 MHz) and choose downlink or uplink; it gives "Tune the receiver to" or "Tune the transmitter to". Source: Passes: Doppler.swift:4-23; PassDetailView.swift:646,657.
  16. A-41 The Doppler table gives about 10 rows at round clock times, plus rise, highest point and set. Source: Passes: Doppler.swift:105-130.
  17. A-42 Frequencies can be saved per satellite. No frequency database ships in the release build. Source: Passes: PassDetailView.swift:740; DataSource.swift:130-134.
  18. A-43 Maidenhead grid square entry, with 4, 6 or 8 characters. Source: Passes: LocationView.swift:162-176.
  19. K-60 Doppler: received = f(1 − ṙ/c), transmit = f/(1 − ṙ/c), c = 299,792.458 km/s. Source: GPKit: Observer.swift:75-88.
  20. K-61 437 MHz at 7 km/s approaching comes to about 10.2 kHz. Source: GPKit: test PassTests.swift:125-138.
  21. A-42b No list of frequencies ships in a release build: the user enters the published frequency ("Transmitters on record" belongs to the SatNOGS source, which can't be chosen). Source: Passes: Glossary.swift:50; PassDetailView.swift:646,657,712; DataSource.swift:117-140.
  22. A-44 Horizon mask: eight directions, heights 0–60° in steps (0,5,10,15,20,30,45,60), joined in straight lines between directions. Passes are clipped every 5 s. Source: Passes: HorizonMask.swift:8-16,113-136; Passes.swift:134-139.
  23. A-45 Passes that never clear the mask are counted. Source: Passes: Passes.swift:67-68.
  24. A-18 Minimum elevation 0, 5, 10, 15, 20 or 30°, default 0 ("The horizon"), settable per satellite. Source: Passes: ObserverLocation.swift:246-271; SettingsScreen.swift:185-187.
  25. A-10 The app downloads https://celestrak.org/NORAD/elements/gp.php?GROUP=amateur&FORMAT=CSV, and only when you tap Download. Source: Passes: PassesCore/Download.swift:34; PassesUI/AppModel.swift:438-440 ("Nothing else in the app calls this"); callers SatelliteListView.swift:185-187.
  26. A-12 You can import element-set files from the Files app. Source: Passes: SatelliteListView.swift:161-169.
  27. A-47 Import is through the Files picker, and only in Detailed mode. There is no paste and no share-sheet import. Source: Passes: SatelliteListView.swift:113-169.
  28. A-46 Import reads OMM in CSV, JSON, XML or KVN, and TLE (including .2le and .3le), detected by content. Source: Passes: FormatDetector.swift:4-44.
  29. A-48 Catalog numbers 100000–339999 are shown in Alpha-5 form. Alpha-5 TLE lines are read as integers. Source: Passes: CatalogField.swift:6-25; Tests/PassesCoreTests/DataSourceTests.swift:219.
  30. K-24 Catalog numbers are an Int; OMM NORAD_CAT_ID takes up to nine digits; Alpha-5 is refused in OMM. Source: GPKit: OMM.swift:4-17; ElementSet.swift:9-10; OMMTests.swift:58-70.
  31. K-25 Refusals carry a kind (19 kinds), a message, a field and a line or record. One bad record costs one record. Source: GPKit: Refusal.swift:7-89; README.md:81-83.
  32. K-26 A file cut short is refused whole. Source: GPKit: README.md:85-87; test OMMTests.swift:120.
  33. A-12b An imported file is copied into the app's own folder and read again each time the app starts. Source: Passes: PassesCore/Library.swift:39-42.
  34. A-24 Shared pass text holds no place. Source: Passes: PassDetailView.swift:61-62.
  35. A-62 Share this pass: plain text to the share sheet. One line each for the day, rise, highest point, set and light; an old-data warning; the time zone. No coordinates, grid square or place name; the app sends nothing itself. Source: Passes: PassesCore/PassShare.swift:3-47; PassDetailView.swift:61-66,136-141.
  36. E-03 Over 40.0° N, 75.0° W (100 m), from 2026-07-14T21:45 UTC for two days, Skyfield 1.55 gives a SARAMAGO pass: rise 2026-07-15 07:45:08 UTC at az 17.5°; culmination 07:50:55 UTC, el 48.21°, az 99.4°, range 667.9 km; set 07:56:37 UTC at az 181.1°. Source: GPKit: Tests/GPKitTests/Resources/skyfield-passes.json (set "SARAMAGO"), written by tools/skyfield_passes_reference.py.
  37. E-05 The light of the example pass: sky dark, the sun 17° below the horizon at the highest point (−17.49°); in sunlight from rise until 07:52:57 UTC (3:52:57 AM EDT), then in the Earth's shadow; "Can be seen 3:45 AM to 3:52 AM". Source: PassLight.of and its summary, skyLine, sunlightLine: scratch package docs/checks/site-figures/ (GPKit v1.0.0, PassesCore at Passes cd6b3fd, E-01's lines), run 2026-11-07; output docs/checks/site-figures/output-2026-11-07.txt.
  38. E-06 Local time at the example place: US Eastern Daylight Time (UTC−4) on 14–15 July 2026, so rise 03:45:08, highest 03:50:55, set 03:56:37, epoch 17:45. Source: IANA time zone America/New_York through Python's zoneinfo, run 2026-10-31.
  39. E-07 The SARAMAGO share text as a phone set to en-US and America/New_York would write it (weekday and date, 3:45 AM, compass words, 48°, "Times are EDT."). Source: PassShare.text, en_US and America/New_York: scratch package docs/checks/site-figures/ (GPKit v1.0.0, PassesCore at Passes cd6b3fd, E-01's lines), run 2026-11-07; output docs/checks/site-figures/output-2026-11-07.txt (first worked out by hand from PassShare.swift:12-47).