Tracker225 objects among recent launchesrecords, last-30-days group225 with six-digit numbers0 with nine-digit numberschecked 2026-10-23 11:47 UTC
The satellite catalog passed 99,999. Does your software know?
On 11 July 2026 the catalog assigned number 100000, and every object catalogued since has a six-digit number. The usable five-digit range had already run out at 69,999 (CelesTrak).
101,142. In a TLE’s five-character field, Space-Track’s Alpha-5 writes it A1142.
A TLE gives the number five characters, the third to the seventh of each line. Space-Track writes the first two digits, 10, as the letter A, so it fits.
TLE columns 3–7 in Space-Track’s Alpha-5, computed here: 10 becomes A, the last four digits stay. CelesTrak’s TLE format carries nothing above 69999 except the analyst objects in 80000–89999.
The recorded values
| first recorded | highest number | from |
|---|---|---|
| 11 Jul 2026 | 100,000 | the corpus’s record |
| 21 Sep 2026 | 100,789 | the tracker |
| 11 Oct 2026 | 100,982 | the tracker |
| 14 Oct 2026 | 101,031 | the tracker |
| 16 Oct 2026 | 101,074 | the tracker |
| 20 Oct 2026 | 101,106 | the tracker |
| 21 Oct 2026 | 101,108 | the tracker |
| 23 Oct 2026 | 101,142 | the tracker |
checked 2026-10-23 11:47 UTC · the tracker
gpconf™ is a free test kit that tells you whether your satellite software handles catalog numbers above 99,999 — built from real CelesTrak data, with every expected answer traced to its source.
Much older software can quietly lose every satellite catalogued since. gpconf has eighteen cases; below is what it found in eight libraries, each finding reported to the library’s makers.
Eighteen cases cover Alpha-5 TLEs, six- and nine-digit NORAD_CAT_ID, and OMM in CSV, JSON, XML and KVN. Every expected value traces to a recorded URL, retrieval time and SHA-256.
pip install gpconf
gpconf fetch
gpconf run --preset reference
The fetch runs once per corpus version: 46 requests to CelesTrak, about 3.2 MB, cached. Then name your library’s preset (sgp4, pyephem, satellite.js, tle.js) or point the runner at your own parser.
- Archived on Zenodo: 10.5281/zenodo.22867654, always the latest; v0.7.0 is 10.5281/zenodo.23382463.
- Audited independently at v0.1.0: no wrong expected value in 65,887 field-level comparisons (the audit).
- Upstream record: 23 findings, 14 fixed, 6 open.
- Apache-2.0 licence from v0.7.0 (MIT up to 0.6.2); version 0.7.0 on PyPI.
Eight pieces of satellite software, in one-off runsOne-off runs
Each was run at one pinned version on the date shown, and every finding was reproduced on that software’s own code before it was reported.
Eight third-party parsers, each run once at a pinned version through a harness of the corpus’s own over the unmodified parser; every finding reproduced on the library’s own code before it was reported.
| library | its cases, by outcome | most serious finding |
|---|---|---|
| PyEphem | 7 of 18 failed |
Alpha-5 fields decode to catalog number 0, silently, the elements unaffected (#296); a letter in a numeric field is read up to the letter, with no error (#297). |
| satellite.js | 8 of 18 failed |
OMM JSON epochs are truncated to milliseconds, and the TLE catalog field is returned as a string and never decoded (#185); a letter in a numeric TLE field is read up to the letter, with no error (#190). |
| Gpredict | 7 of 18 failed |
Alpha-5 fields become catalog number 0; the mean motion loses its last digit on every record (#426); a letter in the epoch field passes the set's checks and is read up to the letter (#427). |
| gods-eye-view | 7 of 18 failed |
Every Alpha-5 satellite collapses onto one catalog entry keyed NaN and the rest are dropped as duplicates (#751); one set with a missing line drops every set after it in its group, with nothing said (#906). |
| SatDump | 3 of 17 failed 1.2.2 5 of 17 failed master |
The TLE registry silently drops every Alpha-5 set; master's CSV reader rejects CelesTrak SupGP files whole. |
| libsgp4 | 9 of 18 failed |
Alpha-5 decoding correct in v3.0; CelesTrak's SupGP CSV is still refused whole, and some TLE epochs still come back 8 µs off (#45). |
| tle.js | 3 of 18 failed |
Alpha-5 fields give NaN with no error, and two-digit epoch years pivot at 50 instead of 57 (#62); a letter in the epoch field is read up to the letter, and isValidTLE() calls the set valid (#63). |
| astroz | 10 of 18 failed |
Alpha-5 decoding and the epoch field fixed (#97, #98); the parser keeps no object name, so every values item from a named source fails on it. |
- pass
- within tolerance
- fail
- skip
- not exercised
A count is a result for the version named, on the date named, not a verdict on the project, and the counts do not rank the libraries: one that reads fewer formats has fewer cases it can fail. The reports, the corpus version of each run and whether each can load this month’s launches are on the library page.
Run it on every changeIn CI
In a GitHub Actions workflow, three lines run the test kit against a library on every change, offline and report-only.
Three lines run a preset against your library in a GitHub Actions job, offline and report-only; gpconf presets lists the presets, and the adapter guide covers writing your own.
- uses: hneogy/gp-omm-conformance@v0.7.0
with:
preset: sgp4