Satellite Hunter · Reference
Which ham radio tools survive the end of pure 5-digit TLE catalog numbers?
Status from public source review.
For decades, NORAD catalog numbers fit in five decimal digits (00001–99999). That space is effectively exhausted. New objects need identifiers beyond 99999. Classic TLE line 1 only has five characters for the catalog number (columns 3–7). Software that treats that field as a plain five-digit integer will fail or mis-identify objects once IDs leave that range.
What these grades mean. Status is about readiness for the end of standard five-digit TLE catalog numbers (Alpha-5 TLE and/or OMM/GP with full integer IDs). Most tools will keep working on older satellites that still have classic five-digit IDs. That is expected and is not enough to be marked Ready.
Alpha-5 is the encoding used to keep catalog numbers in those five TLE characters after 99999. The first character can be a letter (or other non-digit) so values above 99999 still fit the old fixed-width field. Tools must decode Alpha-5; parsing the field with a simple integer conversion is not enough.
OMM (Orbit Mean-Elements Message), also called GP (general perturbations) data in CelesTrak and Space-Track distributions, is a modern element format (JSON, XML, KVN, CSV, and related forms). Catalog IDs are full numbers, not forced into a five-character TLE field. Preferring OMM/GP avoids Alpha-5 TLE parsing for new objects, if the application supports those formats.
How “not ready” was determined. For open-source projects, the public source tree was searched for the code that reads a TLE catalog number. Typical pattern: take the five characters of that field, then convert them to an integer with a library call that only accepts digits. Common examples:
atoi (C/C++): “ASCII to integer.”
Stops at the first non-digit. A letter in an Alpha-5 ID yields 0 or a wrong value, not a decoded catalog number.
toInt() / int(...) / std::stoi
(Kotlin, Python, C++, and similar): same idea—parse a decimal integer. Non-digit characters cause failure or a truncated result.
sscanf with a format such as %5ld:
read five characters as a long integer. Again, letters are not valid input for that conversion.
If the only path found for classic TLE IDs uses one of those conversions and there is no Alpha-5 decoder (and no working OMM/GP import that supplies full integer IDs), the project is marked Not ready. Closed-source tools without a public paper trail are marked Unknown until someone tests them or the vendor documents support.
Project owners or anyone with documentation that would change a status: email tle-readiness@fenet.io to request an update.
| Tool | Status | Alpha-5 | OMM / GP | Evidence |
|---|---|---|---|---|
| Orekit | Ready | Yes | Yes | Java orbit library. Alpha-5 TLE satellite numbers added in Orekit 11.0 (GitLab issue #758, milestone 11.0; ParseUtils / TLE parsing). OMM and other CCSDS element formats are supported. Use 11.0 or newer for Alpha-5; 13.1.7 (2026-07-03) also includes Alpha-5 parsing fixes. |
| pyephem | Partial | Partial | No | Legacy stack. Catalog ID matching uses string compare (strncmp), not atoi, so Alpha-5 lines may still load for propagation. Identity handling is weak, and there is no OMM/GP import path. |
| python-sgp4 | Ready | Yes | Yes | brandon-rhodes/python-sgp4: dedicated alpha5.py decode/encode, omm.py for OMM, and tests. README documents both. Use package version 2.14 or newer. |
| satellite-js | Partial | Partial | Yes | shashwatak/satellite-js (npm 7.x): OMM JSON via json2satrec is supported and recommended in the README. Classic TLE path keeps the five-character catalog field as a string and does not decode Alpha-5 to an integer ID. Prefer OMM/GP feeds for new objects. |
| Skyfield | Ready | Yes | Yes | skyfielders/python-skyfield does not reimplement TLE ID parsing; it uses python-sgp4 Satrec. Alpha-5 and OMM follow the installed sgp4 version — keep that dependency current (2.14+). |
| Stellarium Satellites plugin | Not ready | No | No | Bundled SGP4 IO (sgp4io.cpp) reads the catalog field with sscanf %5ld into a long integer. Letters in Alpha-5 IDs are not accepted. No OMM/GP path in this plugin. |
| Tool | Status | Finding |
|---|---|---|
| CSN Technologies S.A.T. | Partial | Keith at CSN Technologies (via KD4IZ on AMSAT-BB): GP / new-format support is a work in progress; the device will support General Perturbation formats. No public ship date or firmware version announced at audit time. |
| Gpredict | Not ready | csete/gpredict: in sgp_in.c, Convert_Satellite_Data copies the five-character catalog field and converts it with atoi. No Alpha-5 decoder found in the tree. No OMM/GP import path for full integer IDs. |
| HRD Satellite Tracker | Unknown | Closed source (Ham Radio Deluxe). Product pages describe downloading keps from “trusted sources” but no public Alpha-5, OMM, or nine-digit catalog language found (audit 2026-07-10). Needs vendor statement or runtime test. |
| MacDoppler | Ready | Dog Park Software MacDoppler v2.48 release notes: CelesTrak and AMSAT JSON OMM GP data with import, export, download, and automatic update. Manual also references CelesTrak OMM download. Strongest closed-source paper trail; Alpha-5 TLE text not separately claimed — OMM path is the intended route. Not independently runtime-tested here. |
| Open HamClock | Not ready | Public C++ client (rechecked 2026-08-08). Catalog identity: earthsat.cpp still uses s.norad = atoi(t1+2) — Alpha-5 becomes 0. Element path remains classic 3LE only; no OMM/GP import. Active repo, no catalog-format fix in recent commits. |
| Orbitron | Not ready | Unmaintained desktop tracker. PA0DLO (AMSAT-BB): no native modern GP support; community workaround maps high IDs into spare five-digit ranges. PE0SAT on X (2026-07-22): Alpha-5 IDs break Orbitron. No vendor update found. |
| OscarWatch Tracker | Ready | magicbug/OscarWatch-Tracker v0.9.9 (open source). GP JSON sources use full integer NORAD_CAT_ID (OscarWatch / AMSAT daily-bulletin style); parser accepts JSON or classic 3LE. Space-Track Alpha-5 encode/decode (Alpha5CatalogId, unit tests) for catalog IDs 100000–339999 on fixed-width TLE lines used with OrbitTools. Classic TLE import keeps columns 3–7 as a string with Alpha-5 decode for identity. Satellite selection uses normalised catalogue ID as well as name. |
| PREDICT | Ready | v3.0.0 (Linux / Termux, released 2026-07-15 per author site): accepts Keplerian data as CSV, KVN, JSON (compact or pretty), XML, and classic TLE while it remains available. Author notes the 5-digit catalog exhaustion and frames modern formats as the path for new objects. Auto-update of orbital data on start. Grade rests on the official PREDICT page statement; runtime not re-verified in this audit. DOS build remains older (v2.3.1) — treat Linux/Termux v3 as the ready path. |
| PreviSat | Ready | PA0DLO on AMSAT-BB: has used the new GP data formats for years. Runtime not re-verified in this audit; grade rests on that maintainer statement. |
| PSTRotator | Partial | Community notes for version 17.59 and later: updated CelesTrak query URL for element downloads. That is a feed-endpoint change, not proof of Alpha-5 letter decoding or full OMM support. Confirm current version behavior with a high catalog ID or GP file. |
| SatDump | Partial | SatDump/SatDump: TLE stream parser in tle.cpp (parseTLEStream) uses std::stoi on the catalog field — Alpha-5 letters cause the line to be skipped. Space-Track JSON path accepts integer NORAD_CAT_ID values of six or more digits. Prefer JSON/GP feeds over classic TLE text. |
| Satellite Tracking (Space Station 22) | Ready | KarhuKoti / Space Station 22 (closed source Windows UWP, audited 2026-07-20). Official docs and Microsoft Store list automatic daily TLE and OMM updates. Author @SpaceStation22 (2026-07-18) states the app has supported OMM for several months and that objects after five-digit catalog exhaustion need the new format. Alpha-5 classic TLE not separately claimed — OMM is the intended path for new objects. Grade rests on vendor paper trail; not independently runtime-tested here. |
| SatObserver-MX | Ready | exoplanet5/SatObserver-MX (open source, audited 2026-07-20). Built for the Alpha-5 / six-digit era. CelesTrak, Space-Track, and SupGP fetches use JSON OMM (FORMAT=json) with full integer NORAD_CAT_ID as identity. Propagation uses satellite.js on TLE lines from the record or a server-side OMM→TLE writer with Alpha-5 encode (catnum5) for IDs 100000–339999. Classic TLE paste/McCants path decodes Alpha-5 via catnum. IDs above 339999 cannot fit the five-character field (placeholder 00000); mean elements still propagate and full norad is kept. Not runtime-tested here with a live post–100000 object. |
| SatPC32 | Ready | Erich Eichmann (author, via G6SGA) and Paul Stoetzer N8HM on AMSAT-BB: current SatPC32 supports new GP formats (CSV/KVN/XML via Download Keps). No further 12.10-line updates planned. Pure classic TLE path remains limited once IDs leave five decimal digits — use GP downloads. |
| SkyRoof | Not ready | VE3NEA/SkyRoof (open source; rechecked v1.48, 2026-08-08). SatNOGS DB JSON supplies integer norad_cat_id for identity, but orbit elements stay classic TLE. Text 3LE import still uses int.Parse(line1.Substring(2, 5)) — Alpha-5 fails. Propagation is SGP.NET 1.4.0 TLE constructor (no Alpha-5). SGP.NET OMM parsers exist but are unused. No CelesTrak/Space-Track GP path. Post-1.40 releases are SSTV/decoder work, not catalog formats. |
| Tool | Status | Finding |
|---|---|---|
| AllMySat | Ready | Closed iOS/Android app (F4MDX / allmysat.com). Developer confirmed Alpha-5 in the app. Independently confirmed (2026-08-08): open allmysat-kit has parseAlpha5NoradId; live catalog pages show Alpha-5 TLE (e.g. A0059 = 100059). |
| BTech UV-Pro software | Unknown | Closed companion software for BTECH UV-Pro / VGC sat tracking and Doppler. Community notes limited sat lists; no public TLE-format migration docs (Alpha-5 or OMM) found. Untested for Alpha-5 or post–five-digit catalog IDs. |
| Ham Satting | Unknown | Closed app (unixeer.com / A41UX). FAQ/manual describe internet TLE fetch and NORAD/TLE usage. No OMM, Alpha-5, or nine-digit catalog language found on the support site. Needs source access or device test. |
| Heavens-Above | Ready | Closed site/app for pass predictions. Rechecked 2026-08-08: SatInfo.aspx?satid=100000 serves SARAMAGO with Spacetrack catalog number 100000 and pass/orbit links. Product uses full integer catalog IDs; not a classic Alpha-5 TLE importer. |
| ISS Detector | Ready | Closed Android/iOS app (RunaR / issdetector.com). Developer (Derk) confirmed post–five-digit catalog support (2026-07): use Famous objects and look for Saramago or catalog number 100000. Independently confirmed on-device (Saramago present in Famous objects). |
| Look4Sat | Ready | rt-bishop/Look4Sat (rechecked v4.4.5, 2026-08-08). Default CelesTrak source is gp.php?…&FORMAT=csv; parseCSVStream reads full integer NORAD_CAT_ID. v4.4.4 fixed OMM/CSV import routing. Classic TLE path still uses toInt() on columns 3–7 (Alpha-5 fails) — prefer CelesTrak CSV over AMSAT/SatNOGS 3LE feeds for new objects. |
| Tool | Status | Finding |
|---|---|---|
| cardputer-satellite-tracker | Partial | adammelancon/cardputer-satellite-tracker. Selects objects by integer catalog number (satCatNumber / manual entry via toInt()) and downloads CelesTrak gp.php?CATNR=…&FORMAT=TLE. Integer CATNR can express IDs beyond five digits, but the app still ingests classic TLE text for SGP4 (Hopperpop library) and does not parse Alpha-5 or OMM/JSON. Weak when feeds drop TLE for new objects. |
| CardSat | Ready | prstoetzer/CardSat (Cardputer ADV satellite tracker). Orbital data is AMSAT GP/OMM JSON (daily-bulletin.json), not classic TLE text. Catalog identity is NORAD_CAT_ID as a full integer (uint32_t) from JSON. Source comments document the five-digit TLE retirement. Prefer this path for Cardputer-class tracking. |
| SatNOGS Client | Ready | Libre Space satnogs-client (rechecked 2026-08-08). 2026-06-18: observer takes norad_cat_id from the job instead of parsing TLE line 2. Propagation via satnogs-predict → Skyfield/python-sgp4 (Alpha-5-capable). Satellite.from_tle / from_omm present in satnogs-predict. Grade is for the station client identity + prop path; redistributed classic TLE text can still break older third-party parsers. |
| SatNOGS Network | Partial | Libre Space satnogs-network (station network + DB). Database field norad_cat_id is a PositiveIntegerField, so integer IDs of six to nine digits fit. End-to-end readiness still depends on how TLE text is stored and how clients parse it (see SatNOGS Client). Element redistrib graded under Sources → Secondary feeds. |
| tinyGS | Unknown | G4lile0/tinyGS: project is LoRa / TinyGS network focused. No clear classic TLE catalog parser found in the paths skimmed for this audit. Confirm separately if any ground tool in the stack loads NORAD TLE files. |
Use these to check your own software. Paste or import into the application, then confirm the catalog ID and that the object loads without an error. The Alpha-5 lines are synthetic (same orbital elements as the ISS control, only the catalog field changed). They are for parser testing only — not for operational pointing.
Expected: loads; catalog ID 25544.
ISS (ZARYA) 1 25544U 98067A 24035.34041750 .00009876 00000+0 19091-3 0 9990 2 25544 51.6311 237.2151 0011114 63.0955 297.1168 15.48385070551169
Expected if ready: loads; catalog ID 100000 (decoded from A0000).
Expected if not ready: crash, skip, empty ID, or ID 0.
TEST ALPHA5 SYNTHETIC (NOT A REAL OBJECT — A0000=100000) 1 A0000U 98067A 24035.34041750 .00009876 00000+0 19091-3 0 9990 2 A0000 51.6311 237.2151 0011114 63.0955 297.1168 15.48385070551169
Same check as above; ready systems should report 100001.
TEST ALPHA5 SYNTHETIC (NOT A REAL OBJECT — A0001=100001) 1 A0001U 98067A 24035.34041750 .00009876 00000+0 19091-3 0 9991 2 A0001 51.6311 237.2151 0011114 63.0955 297.1168 15.48385070551160
Expected: loads with NORAD_CAT_ID 24278 as a full integer (not a five-character TLE field).
Shape matches AMSAT GP beta JSON objects.
{
"AMSAT_NAME": "FO-29",
"OBJECT_NAME": "JAS 2",
"OBJECT_ID": "1996-046B",
"INCLINATION": 98.5224,
"ECCENTRICITY": 0.0350601,
"RA_OF_ASC_NODE": 35.9232,
"ARG_OF_PERICENTER": 39.8653,
"MEAN_ANOMALY": 322.7685,
"MEAN_MOTION": 13.53275148,
"EPOCH": "2026-07-09T01:08:21.204960",
"NORAD_CAT_ID": 24278,
"REV_AT_EPOCH": 47612,
"BSTAR": 3.5079079e-05,
"EPHEMERIS_TYPE": 0,
"CLASSIFICATION_TYPE": "U",
"ELEMENT_SET_NO": 999,
"MEAN_MOTION_DDOT": 0.0,
"MEAN_MOTION_DOT": 1e-08
}
Same FO-29-style fields with NORAD_CAT_ID set to 100000.
Expected if OMM/GP path is ready: loads with catalog ID 100000 without Alpha-5 TLE decoding.
{
"OBJECT_NAME": "TEST SIX DIGIT ID",
"OBJECT_ID": "1996-046B",
"INCLINATION": 98.5224,
"ECCENTRICITY": 0.0350601,
"RA_OF_ASC_NODE": 35.9232,
"ARG_OF_PERICENTER": 39.8653,
"MEAN_ANOMALY": 322.7685,
"MEAN_MOTION": 13.53275148,
"EPOCH": "2026-07-09T01:08:21.204960",
"NORAD_CAT_ID": 100000,
"REV_AT_EPOCH": 47612,
"BSTAR": 3.5079079e-05,
"EPHEMERIS_TYPE": 0,
"CLASSIFICATION_TYPE": "U",
"ELEMENT_SET_NO": 999,
"MEAN_MOTION_DDOT": 0.0,
"MEAN_MOTION_DOT": 1e-08
}
For tools that import CCSDS OMM key-value notation rather than JSON.
CCSDS_OMM_VERS = 2.0 CREATION_DATE = ORIGINATOR = AMSAT_NAME = FO-29 OBJECT_NAME = JAS 2 OBJECT_ID = 1996-046B EPOCH = 2026-07-09T01:08:21.204960 MEAN_MOTION = 13.53275148 ECCENTRICITY = 0.0350601 INCLINATION = 98.5224 RA_OF_ASC_NODE = 35.9232 ARG_OF_PERICENTER = 39.8653 MEAN_ANOMALY = 322.7685 NORAD_CAT_ID = 24278 REV_AT_EPOCH = 47612 BSTAR = 3.5079079e-05 EPHEMERIS_TYPE = 0 CLASSIFICATION_TYPE = U ELEMENT_SET_NO = 999 MEAN_MOTION_DDOT = 0.0 MEAN_MOTION_DOT = 1e-08
Live GP feeds for practice: AMSAT GP/OMM beta · CelesTrak GP elements. If a test changes a row on this page, email tle-readiness@fenet.io.
Where element data comes from. Primary publishers are the catalog of record; secondary feeds redistribute or wrap that data for apps. Implementation standards and sample tools are under Builders.
GP feeds · public stance: no Alpha-5 · prefer non-TLE formats after 69999 era
Primary GP publisher · Alpha-5 TLE policy · account required for API
Downstream services many ham apps call for TLEs, passes, or redistributed elements. They are not primary GP publishers. A Ready grade here means the feed can deliver usable high catalog IDs (and/or modern packaging) to clients — client apps are graded separately.
| Feed / API | Status | Finding |
|---|---|---|
| AMSAT GP/OMM distributions | Ready | Ham-facing GP / OMM element distributions (JSON, XML, KVN and related forms at newark192.amsat.org/gpdata/current/). Catalog identity is full integer NORAD_CAT_ID (and AMSAT naming fields), not a five-character classic TLE catalog field. AMSAT public messaging ties the feed to the end of pure five-digit TLE packaging for new objects. |
| N2YO REST API | Ready | Tracking API (TLE, positions, passes). Docs (2026-07-20): catalog IDs greater than 100000 supported. Checked 2026-07-25: /tle/100000 returns name SARAMAGO, JSON satid 100000, and classic TLE with Alpha-5 catalog field A0000 on both lines. No OMM/JSON GP packaging on the documented endpoints — still TLE text plus pass products. |
| SatNOGS Network (element feed) | Partial | Redistributes satellite identity and TLE-oriented data to stations and tools. DB field norad_cat_id is a full integer (six–nine digit IDs fit). Classic TLE text redistrib remains common; clients that int()-parse the five-character catalog field still break on Alpha-5 (see SatNOGS Client under Networks & firmware). |
Standards, format docs, tutorials, and reference tools for implementing or migrating trackers. Not element data publishers.
International Orbit Mean-Elements Message standard
Why JSON / CSV / OMM exist
GP data, SGP4, satellite.js — migrate off classic TLE
Reference code releases for modern GP formats
v3.0.0 — CSV / KVN / JSON / XML Keplerian data + classic TLE; Linux/Termux builds (2026-07-15)
Alpha-5 FAQ, GP / GP_History classes, rate limits
Audit snapshot: 2026-08-08. Status may change as maintainers ship fixes.
Closed-source rows are not accusations — they are invitations to test and report.