- On your iPhone: every pass worked out thereA-01
- Data Not CollectedA-20
- one download, only when you tapA-10
- iPhone, iOS 26 or laterA-05
See when satellites cross your sky, and where to look.
It works out when satellites pass over you, where to look, and for how long.A-50 It does the sums on your iPhone, and your location stays there.A-01A-22A-23
Coming soon to the App Store.A-100


The app
In your pocket
How it works
From data to your sky
One real pass, followed all the way: SARAMAGO's, over 40° N, 75° W.E-03
1 A0000U 26067CY 26195.90649229 .00004770 00000+0 22159-3 0 9994 2 A0000 97.4593 154.0970 0005590 270.5113 89.5482 15.2046728115911
An element set
The orbit as numbers, measured at one moment: the catalog number, the epoch, how fast it goes round.E-01E-02
-
SGP4
Runs the set forward in time: where the satellite is, at any moment. On your phone, with GPKit.A-01K-30
- Rise3:45 AM0°, NNE
- Highest3:50 AM48°, E
- Set3:56 AM0°, S
The pass
When it clears your horizon, its highest point, and when it goes back below.E-03E-06
-
Your sky
Where to look: face north-north-east at 3:45 AM, and look low.E-03A-19
Who it's for
To see one, to hear one, or to start
If you want to see one
A satellite looks like a star that moves.A-51 The app marks the passes you can see: the satellite in sunlight while your sky is dark.A-14
When you can see one →If you listen with a radio
Every pass has a Doppler card: what to tune to through the pass, as a table you can follow.A-40A-41 Radio doesn't need sunlight, so every pass counts.A-51
Doppler and radio →If you're new to all this
Plain mode puts the next pass first, in everyday words. Six short lessons and a guided watch take you to your first sighting.A-50A-51A-53
Learn →
One download, when you tap
To work out passes, the app needs each satellite's orbit, called an element set. It gets them from CelesTrak, a free service, in one request, and only when you tap Download.A-10 It won't ask again for two hours.A-25 That request carries nothing about you: no location, no account, and no device ID.A-27
How a pass prediction works → · Privacy →
Coming next
Tonight's passes, a clear-sky check and smart alerts are planned for 1.1. Point me there, which turns your phone towards a pass, is planned for 1.2, and more satellite groups, event cards and an observation log for 1.3. None of them is in 1.0.A-70A-71A-72A-73A-79A-83A-84A-85
Built on GPKit
The orbit sums come from GPKit, an open-source Swift library for satellite data, tested with gpconf.A-03A-04K-07K-82 GPKit →
Go deeper: what runs where
- On your phone: reading the element sets, SGP4, finding each pass, the sun and the Earth's shadow, the sky view, Doppler, reminders, the widget and the Live Activity.A-01A-15A-30A-36A-38
- The one request the app makes: a GET for CelesTrak's amateur group as CSV, when you tap Download, at most once every two hours.A-10A-25A-27
- Apple's map: the Map tab is Apple's map, which Apple supplies for whatever area is on screen.A-28
- Nothing else: no analytics, no tracking, no other services.A-29A-20
Requirements: iPhone, iOS 26 or later.A-05
Sources
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-25At most one request every two hours. The attempt is counted before it is sent, and there are no retries. Source: Passes:Download.swift:146-161;DataSource.swift:98.A-27The request is a GET with User-AgentGPPasses/<version> (+https://github.com/hneogy/GPKit; honorius@neogy.dev; one group, on the user's tap, at most once in two hours),Accept: */*,Accept-Language: enand no cookies. It sends no location, account or device ID. A test checks the request on the wire. Source: Passes:Download.swift:50-64;NetworkTransport.swift:11-47(ephemeral session, no redirects);Tests/PassesUITests/RequestOnTheWireTests.swift.A-701.1, 1.2 ("Point me there") and 1.3 ("More sky") are built after 1.0 and merged into the app's main branch, not released; none of their features is in 1.0 (on 2026-11-10, 1.0 was in Apple's review). Source: Passes: PR #42 "GP Passes 1.1", #43 "GP Passes 1.2: Point me there", #44 "1.3, More sky" (merged 2026-11-09 and 2026-11-10; each body: "Nothing ships from this: 1.0 is in Apple's review");Passes.xcodeproj/project.pbxprojat ca62db3:MARKETING_VERSION = 1.0in all six configurations.A-711.1, Tonight: a card at the head of the next passes with tonight's passes that can be seen, the soonest first; the night runs from the sun going more than 6° below the horizon to its coming back above that. Source: Passes main ca62db3 (2026-11-10):Modules/Sources/PassesCore/Tonight.swift:3-7; commit 23c544a.A-721.1, the clear-sky check: for a pass that can be seen, the forecast cloud cover in a word (Likely clear, Partly cloudy, Cloudy), from Apple Weather; off until turned on in Settings; while on, the location rounded to about 10 km is sent to Apple Weather; off, nothing is sent. Source: Passes main ca62db3 (2026-11-10):PassesCore/Clouds.swift:31-38,:57-58(the switch and its note, app text);PassesCore/ObserverLocation.swift:391-392(off unless set);Modules/Tests/PassesCoreTests/CloudsTests.swift:81; commit 6f8d0d7.A-731.1, smart alerts: "Only passes I can see", a switch beside the alerts for every pass; alerts come only for passes that can be seen and, with the clear-sky check on and where the forecast reaches, only those likely clear. Source: Passes main ca62db3 (2026-11-10):PassesCore/PassAlerts.swift:152-157(app text); commit ad12927.A-791.2, Point me there: which way to turn and tilt the phone to where a pass rises or the satellite is, as an arrow and taps that quicken as it comes near; worked out on the phone from the element set and the phone's motion sensors; nothing is sent. Source: Passes main ca62db3 (2026-11-10):PassesCore/Pointing.swift:4-8; commit 1f7e416.A-831.3, more groups: Space stations, Brightest, Amateur radio, Weather, CubeSats and Starlink, chosen when Download is tapped; each asked for only on that tap, at most once in two hours, each group counted apart. Source: Passes main ca62db3 (2026-11-10):PassesCore/Download.swift:10-12,:30-36,:56-63; commit a52947c; PR #44.A-841.3, event cards on the Sky tab: a Starlink train (ten or more satellites of one launch still flying close together) and craft at the ISS or Tiangong; worked out on the phone from the files it holds, never fetched; every card says which file its facts come from. Source: Passes main ca62db3 (2026-11-10):PassesCore/EventCards.swift:4-13,:18-32; commit 2795c7d.A-851.3, the observation log: a pass marked as seen, with a note, kept on the iPhone and sent nowhere, listed by night from the Sky tab with how many passes were seen and the nights in a row; one sighting or the whole log can be deleted. Source: Passes main ca62db3 (2026-11-10):PassesCore/ObservationLog.swift:3,:114-119(app text),:164-170,:174,:210-213; commit e6521d5.A-03The app is built on GPKit 1.0.0, pinned to revision 01545c6. Source: Passes:Modules/Package.swift:20;Modules/Package.resolved.A-04Settings → About shows "Orbits: GPKit 1.0.0 (SGP4)". Source: Passes:Modules/Sources/PassesUI/SettingsScreen.swift:127.K-07Licence MIT, © 2026 NEOGY LLC. Source: GPKit:LICENSE:1-3.K-82CI runs gpconf's 5 offline cases; 13 need provider files that gpconf fetches and does not ship. Source: GPKit:README.md:153-155;ci.yml:33-56;tools/check_gpconf.py.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-15Sky categories: daylight (sun above 0°), twilight (0 to −6°), dark. Earth's shadow is a cylinder of radius 6378.137 km. The sun's position follows NOAA/Meeus. Passes are sampled every 10 s (at most 240 samples) and changes refined to the second. Source: Passes:Sun.swift:7-18,101-136,215-249.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-28The Map tab is Apple's map, which Apple supplies for whatever area is on screen. Source: Passes:SettingsScreen.swift:142.A-29No analytics, no crash or tracking SDKs. GPKit is the only package dependency. Source: Passes:Modules/Package.resolved;docs/audit-2026-10/VALIDATION.md:3-4.A-20The privacy manifest declares no tracking, no tracking domains and no collected data types, plus UserDefaults access (reason CA92.1). The same applies to the app and the widget. Source: Passes:Passes/PrivacyInfo.xcprivacy:5-21;PassesWidgets/PrivacyInfo.xcprivacy:5-21; testPrivacyManifestTests.swift:16-34.A-05iPhone only, iOS 26 or later. Source: Passes:project.pbxproj:374,470;TESTFLIGHT.md:19.A-100GP Passes 1.0 is in Apple's review: submitted, not yet approved, so not yet on the App Store (the site says "Coming soon to the App Store", with no link). Source: the owner's statement (R-20, 2026-11-10); App Store Connect not seen by a session; the Passes repository records the TestFlight uploads (TESTFLIGHT.md:127-129) and no submission.A-50Plain vs Detailed: the labels, the two notes, default Detailed, and the first-run question "Have you watched satellites before?". Source: Passes:DisplayMode.swift:9-21,47-55;ObserverLocation.swift:340-342.A-22The location permission text reads: "Your location is used on this device to work out when satellites pass over you. This app does not send it anywhere.". Source: Passes:project.pbxproj:454.A-23Location is stored on the device (UserDefaults and the app group, so the widget can use it). Source: Passes:ObserverLocation.swift:4,205-217;Shared.swift:78.G-10On 11 July 2026 the catalog assigned number 100000, to SARAMAGO. Source: gpconf:README.md:98-99;docs/BRAND.md:59.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-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-08The example pass's track for the sky view: azimuth and elevation every 10 s from rise to set, 70 points; its events reproduce E-03 (rise 07:45:08.5 UTC at 17.49°, highest 07:50:54.7 at 48.21°, 99.4°, 667.9 km; set 07:56:36.7 at 181.08°). Source:tools/sky_track.py, Skyfield 1.55 (the corpus's .venv), E-01's lines, offline; outputsites/passes/data/saramago-track.json.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-31Reminder lead times are 1, 5, 10, 15 or 30 min, default 10. Source: Passes:Reminder.swift:22;ObserverLocation.swift:437-443.E-01SARAMAGO's first published element set, as a TLE rendered by gpconf from CelesTrak's OMM (gp-first.php?CATNR=100000&FORMAT=CSV, retrieved 2026-09-21T00:43:55Z), because CelesTrak serves no TLE above 99999. Source: gpconf:derived/alpha5-tle/alpha5-A-100000-saramago-first.tleand.provenance.json; the same lines in GPKitTests/GPKitTests/Resources/pass-check-sets.tle(NOTICE:56-61, from gpconf at bec466b).E-02The field reading of that TLE: designator 26067CY; epoch day 195.90649229 of 2026 = 14 July 2026 21:45 UTC; B* 0.22159e-3; inclination 97.4593°; eccentricity 0.0005590; mean motion 15.20467281 rev/day, so a period of about 94.7 min (1440 / 15.20467281 = 94.707). Source: the line itself; the field layout as GPKit reads it (TLE.swift); the arithmetic shown.K-30SGP4 is a port of Vallado's SGP4.cpp (CelesTrak/fundamentals-of-astrodynamics 49df0479c950), with names and order of operations kept. Source: GPKit:NOTICE:9-17;SGP4Core.swift:1-15.A-19Directions use a 16-point compass. The sky view has the zenith at the centre and north up. Source: Passes:Display.swift:21-23;Passes.swift:186-196.A-51The six lessons and their titles, in order. Source: Passes:PassesCore/Lessons.swift:13,84-135.A-14"Can be seen" means the satellite is in sunlight while your sky is dark (sun more than 6° below the horizon). Source: Passes:PassesCore/Sun.swift:14-15,145-147,268.A-53The guided watch moves from Before to During to After; VoiceOver announces at most every 30 s. Source: Passes:GuidedWatch.swift:3-166.