Satellite Hunter · Reference

TLE / Catalog ID Readiness

Which ham radio tools survive the end of pure 5-digit TLE catalog numbers?
Status from public source review.

What is changing

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.

Status key
Ready Handles post–five-digit IDs via Alpha-5 and/or OMM/GP (source or vendor statement)
Partial Some path works for new IDs; classic TLE path still weak or incomplete
Not ready No solid path for Alpha-5 or full-integer / OMM IDs beyond standard TLE
Unknown Closed source or not audited yet

Project owners or anyone with documentation that would change a status: email tle-readiness@fenet.io to request an update.

Commonly used TLE related libraries
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.
Desktop & SDR tools
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.
Mobile & radio apps
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.
Networks & firmware
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.
Test samples

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.

1. Control — classic 5-digit TLE (ISS, NORAD 25544)

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

2. Alpha-5 TLE (synthetic A0000 = catalog 100000)

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

3. Alpha-5 TLE (synthetic A0001 = catalog 100001)

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

4. OMM / GP JSON (AMSAT-style flat object, FO-29)

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
}

5. OMM / GP JSON with six-digit catalog ID (synthetic)

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
}

6. OMM KVN (AMSAT-style, FO-29)

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.

Authoritative sources

For operators and anyone building or maintaining a tracker, script, or feed.

Data publishers

Builders & maintainers

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.