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 (source review of main, 2026-07). Catalog identity: earthsat.cpp satLookup uses s.norad = atoi(t1+2) — digit-only; Alpha-5 becomes 0 (affects freq tables and SatNOGS/orbtrack links). Checksum helper scores digits and - only (not Space-Track Alpha-5 letter weights). Element path is classic 3LE only (user-esats.txt / server esats.txt); no OMM/GP import found. |
| Orbitron | Not ready | Unmaintained desktop tracker (PA0DLO on AMSAT-BB). No native support for modern GP formats. Community workaround only: map high catalog IDs into spare five-digit ranges 70000–79999 or 90000–99999 for legacy fields — operator-managed, not a real format upgrade. |
| OscarWatch Tracker | Partial | magicbug/OscarWatch-Tracker (open source, audited 2026-07-20). Default and AMSAT sources are GP JSON (full integer NORAD_CAT_ID): OscarWatch satellites.json and AMSAT daily-bulletin.json. Parser auto-detects JSON vs classic 3LE. Propagation uses OrbitTools on synthetic TLE lines from TleLineFormatter (ToString("D5") into the five-character catalog field, no Alpha-5). That path is fine for five-digit IDs; catalog IDs ≥ 100000 mis-size the TLE field so tracking new objects is not solid end-to-end. Classic TLE import keeps columns 3–7 as a string without Alpha-5 decode. |
| 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, v1.40 audited 2026-07-20). Satellite catalog comes from SatNOGS DB JSON with norad_cat_id as a full integer (fine for identity). Orbit elements are classic TLE lines only: download is SatNOGS tle JSON; file load is SatNOGS TLE JSON or 3LE text. Text import sets norad_cat_id = int.Parse(line1.Substring(2, 5)) — Alpha-5 letters fail. Propagation uses SGP.NET 1.4.0 new Tle(tle0, tle1, tle2), which reads the five-character catalog field as an integer (no Alpha-5 decoder). SGP.NET also has OMM CSV/JSON/KVN/XML parsers, but SkyRoof does not call them. No CelesTrak/Space-Track GP import path in the app. |
| Tool | Status | Finding |
|---|---|---|
| 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 | Unknown | Closed site/app for pass predictions (ISS, satellites, radio sats). Backend almost certainly uses full integer catalog IDs; client-side Alpha-5 TLE import and OMM are not documented publicly. Not source-audited here. |
| ISS Detector | Unknown | Closed Android/iOS app (ham/weather sats, Doppler). No public Alpha-5 or OMM migration claim found (audit 2026-07-10). Community reports include manual TLE questions. Needs vendor statement or device test with a high catalog ID. |
| Look4Sat | Not ready | rt-bishop/Look4Sat: DataParser.kt parses TLE catalog numbers with line1.substring(2, 7).trim().toInt(). Alpha-5 letters throw. Database stores catnum as Int (fine after a proper decode). Custom TLE URL import only; no OMM path found in this audit. |
| 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 | Not ready | Libre Space satnogs-client: observer.py extracts the catalog ID with int(self.tle['tle2'].split()[1]) from TLE line 2. Alpha-5 letters fail that conversion. Propagation library path is separate; this ID extract is the broken step for classic TLE text. |
| SatNOGS Network | Partial | Libre Space satnogs-network: 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). |
| 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.
For operators and anyone building or maintaining a tracker, script, or feed.
Primary GP publisher · Alpha-5 TLE policy · account required for API
Alpha-5 FAQ, GP / GP_History classes, rate limits
GP feeds · public stance: no Alpha-5 · prefer non-TLE formats after 69999 era
Why JSON / CSV / OMM exist
International Orbit Mean-Elements Message standard
v3.0.0 — CSV / KVN / JSON / XML Keplerian data + classic TLE; Linux/Termux builds (2026-07-15)
GP data, SGP4, satellite.js — migrate off classic TLE
Reference code releases for modern GP formats
Ham-facing modern element feeds (beta)
Audit snapshot: 2026-07-20. Status may change as maintainers ship fixes.
Closed-source rows are not accusations — they are invitations to test and report.