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
Your iPhone tells you 1 to 30 minutes before a pass rises, or before every pass of a starred satellite.A-31A-32
In detail →Live Activity
Countdowns to the rise, the highest point and the set, on the Lock Screen and in the Dynamic Island.A-34
In detail →Widget
The next pass of your starred satellites, on your Home Screen. It works its passes out itself.A-37A-38
In detail →Doppler and radio
Type the frequency, choose downlink or uplink, and read what to tune to through the pass.A-40A-41
In detail →Horizon mask
Set how high your hills, buildings and trees reach in eight directions, and each pass is cut to them.A-44
In detail →Your own files
Import OMM (CSV, JSON, XML, KVN) or TLE from the Files app, numbers above 99,999 included.A-46A-47A-48
In detail →Sharing a pass
Send a pass as plain text through the share sheet. The text holds no place.A-62A-24
In detail →
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
- Reminders are local notifications: "A notification from this device at the time chosen. Nothing is sent anywhere." A-30
- The app sets alerts while it's open, and sets them again after a download or a change of settings. It can't while it's closed, so alerts reach as far as they were last set.A-32
- iOS keeps 64 notifications waiting for one app. The app counts its own and stays at or under that, so iOS never drops one quietly.A-32
- A reminder is set as a count of seconds to the rise, so a clock change (daylight saving, or travelling to another time zone) doesn't move it off its pass.A-33
- Change your minimum height or horizon, and reminders already set move with their passes, or go if the pass no longer qualifies.A-44b
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
- Lock Screen: the satellite, countdowns to the rise, the highest point and the set, a bar from rise to set, and the highest point's height and direction.A-34
- Dynamic Island: countdowns to the rise and the set. Expanded, it shows the highest point and the three moments. A-34
- For radio: choose a saved frequency, and it shows what to tune to at the rise and the set.A-35b
- Live readings: while GP Passes is open, it adds the elevation, direction and frequency to tune to, refreshed every couple of seconds.A-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

Every pass in Detailed has a Doppler card.A-57
- Type the satellite's published frequency in megahertz (1 to 100000).
- Choose Downlink (to listen) or Uplink (to transmit).
- 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:
- Downlink, what to tune a receiver to: frx = f × (1 − ṙ / c)
- Uplink, what to tune a transmitter to: ftx = f / (1 − ṙ / c)
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
- Heights are 0°, 5°, 10°, 15°, 20°, 30°, 45° or 60° for N, NE, E, SE, S, SW, W and NW. Between two directions the height runs in a straight line.A-44
- Passes are clipped to the mask by checking every 5 seconds.A-44
- The widget, Live Activities and reminders use the same clipped passes.A-44b
- You can also set a minimum height for every pass, or for one satellite: 0° (the horizon), 5°, 10°, 15°, 20° or 30°. A-18
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:
- OMM in CSV, JSON, XML or KVN
- TLE, with or without a name line
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
- Files are read by GPKit. A record that can't be read is refused with a reason, and the rest of the file is still read. A file that has been cut short is refused whole.K-25K-26
- An imported file is copied into the app's own folder.A-12b
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
A-01Passes 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.A-30Reminders 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.A-36There is no push server for Live Activities. Source: Passes:LiveActivityCenter.swift:12-17.A-38The 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.A-31Reminder lead times are 1, 5, 10, 15 or 30 min, default 10. Source: Passes:Reminder.swift:22;ObserverLocation.swift:437-443.A-31bThe 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.A-32Alerts 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.A-33Reminders 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.A-44bThe 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.A-34Live 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.A-35The 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.A-35bWith 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.A-37The "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.A-57What 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.A-40Doppler: 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.A-41The Doppler table gives about 10 rows at round clock times, plus rise, highest point and set. Source: Passes:Doppler.swift:105-130.A-42Frequencies can be saved per satellite. No frequency database ships in the release build. Source: Passes:PassDetailView.swift:740;DataSource.swift:130-134.A-43Maidenhead grid square entry, with 4, 6 or 8 characters. Source: Passes:LocationView.swift:162-176.K-60Doppler: received = f(1 − ṙ/c), transmit = f/(1 − ṙ/c), c = 299,792.458 km/s. Source: GPKit:Observer.swift:75-88.K-61437 MHz at 7 km/s approaching comes to about 10.2 kHz. Source: GPKit: testPassTests.swift:125-138.A-42bNo 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.A-44Horizon 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.A-45Passes that never clear the mask are counted. Source: Passes:Passes.swift:67-68.A-18Minimum 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.A-10The app downloadshttps://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"); callersSatelliteListView.swift:185-187.A-12You can import element-set files from the Files app. Source: Passes:SatelliteListView.swift:161-169.A-47Import 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.A-46Import reads OMM in CSV, JSON, XML or KVN, and TLE (including .2le and .3le), detected by content. Source: Passes:FormatDetector.swift:4-44.A-48Catalog 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.K-24Catalog 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.K-25Refusals 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.K-26A file cut short is refused whole. Source: GPKit:README.md:85-87; testOMMTests.swift:120.A-12bAn 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.A-24Shared pass text holds no place. Source: Passes:PassDetailView.swift:61-62.A-62Share 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.E-03Over 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 bytools/skyfield_passes_reference.py.E-05The 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.ofand itssummary,skyLine,sunlightLine: scratch packagedocs/checks/site-figures/(GPKit v1.0.0, PassesCore at Passes cd6b3fd, E-01's lines), run 2026-11-07; outputdocs/checks/site-figures/output-2026-11-07.txt.E-06Local 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'szoneinfo, run 2026-10-31.E-07The 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 packagedocs/checks/site-figures/(GPKit v1.0.0, PassesCore at Passes cd6b3fd, E-01's lines), run 2026-11-07; outputdocs/checks/site-figures/output-2026-11-07.txt(first worked out by hand fromPassShare.swift:12-47).