The story: when the licence plates ran out
Every object in orbit has a catalog number. Think of it as a licence plate. The plate had room for five digits. In July 2026 the numbers got too big for the plate.
What happened
Catalog numbers are handed out in order. Sputnik 1 was number 1. The International Space Station is 25544. The numbers kept climbing as launches got cheaper.
The oldest data format still in daily use, the TLE (two-line element set), was designed on punch cards. It gives the plate exactly five characters. So the biggest plate was 99999. In practice the format stopped even earlier, at 69999, because the numbers 70000 to 99999 were set aside for temporary and provisional use.
On 11 July 2026 a small Portuguese CubeSat named SARAMAGO was catalogued as number 100000. It did not fit on the plate. Every satellite catalogued since has a six-digit number.
Two ways out
- Letters on the plate. Space-Track, the US Space Force’s public catalog, replaces the first digit with a letter. A means 10, B means 11, and so on up to Z for 33. So 100000 is written
A0000and the plate stretches to 339999. The letters I and O are skipped so nobody mistakes them for 1 and 0. This is called Alpha-5. It is a stopgap. - A new form with room to spare. Since 2020 both catalogs also publish the same information in a modern form called the OMM, where each value has a name and a full number, up to nine digits. No plate, no squeezing.
What CelesTrak does
CelesTrak is the free, widely used mirror of the catalog that most hobby and open-source software reads. It chose not to use letters. If you ask CelesTrak for the old format, it simply leaves out every object with a six-digit number. If none are left to show, it answers “not found” (an HTTP 404). Old software often reads that as “nothing new happened” and carries on, missing every recent launch.
Why it matters
Software written for five digits does one of three things with a six-digit number: it crashes, it mangles the number, or it never sees the satellite at all because the old format cannot carry it. The third is the dangerous one, because nothing looks wrong. Tracking apps, ground-station schedulers, collision screeners and hobby dashboards are all affected if they were never updated.
What to do
- If you use satellite software: ask whether it reads the new OMM formats and six-digit numbers. Check that satellites launched after July 2026 show up.
- If you build it: run the free test kit. It shows exactly which of sixteen real-world situations your code survives. The findings page shows what broke for three example programs.
Old and new, side by side
The same satellite written the old way and the new way. The example is the one printed in the international standard for the new format (a weather satellite called GOES 9), so no live data is involved.
Old: the TLE
GOES 9 1 23581U 95025A 20064.44075725 -.00000113 00000+0 10000-3 0 9254 2 23581 3.0539 81.7939 0005013 249.2363 150.1602 1.00273272 43169
Three fixed-width lines. Position decides meaning. The catalog number is characters 3 to 7 of lines 1 and 2.
New: the OMM
OBJECT_NAME = GOES 9 OBJECT_ID = 1995-025A EPOCH = 2020-064T10:34:41.4264 MEAN_MOTION = 1.00273272 ECCENTRICITY = 0.0005013 INCLINATION = 3.0539 NORAD_CAT_ID = 23581 …
Named values, no fixed widths. The catalog number can have up to nine digits.
Here is what the lettered plate looks like on a real six-digit object. These lines are the corpus’s own rendering of catalog number 100000, SARAMAGO, and are published in the test kit; CelesTrak never emits lettered lines itself.
SARAMAGO 1 A0000U 26067CY 26195.90649229 .00004770 00000+0 22159-3 0 9994 2 A0000 97.4593 154.0970 0005590 270.5113 89.5482 15.20467281 15911
Take either example apart field by field in the tools.
Glossary
- Catalog number (NORAD id)
- The unique number every tracked object gets, in order of cataloguing. The licence plate.
- TLE
- Two-line element set. The 1960s-era text format for an orbit: two lines of 69 characters (often with a name line above). Five characters for the catalog number.
- OMM
- Orbit Mean-Elements Message. The modern standard (CCSDS 502.0) for the same information, with named fields. Comes as CSV, JSON, XML or a key = value text called KVN.
- Alpha-5
- Space-Track’s trick of writing the first digit of a six-digit number as a letter so it still fits in five characters. Works up to 339999.
- CelesTrak
- A non-profit site run by Dr. T.S. Kelso that republishes catalog data for free. Most open-source software reads it.
- Space-Track
- The US Space Force’s official public catalog site. Requires an account; its terms forbid passing its data on, which is why nothing from it appears here.
- Parser
- The part of a program that reads a data format. The test kit tests parsers.
- 404
- The web’s “not found” answer. CelesTrak gives it when a TLE request has nothing it can show.
- SupGP
- Supplemental data CelesTrak publishes from satellite operators, such as SpaceX for Starlink. It is where nine-digit numbers appear, for a few days after each launch.
- Analyst object
- An object tracked but not yet identified. Analyst objects have numbers in special ranges and often no name or launch designation.
The migration: Alpha-5, OMM and what CelesTrak serves
What changed on 2026-07-11, the two coexisting answers, what each provider actually emits, and a field-by-field comparison of the TLE and the OMM on the CCSDS example. Sources are cited as in the corpus’s research notes.
What changed
On 2026-07-11 the US Space Force catalog assigned number 100000 to the Portuguese CubeSat SARAMAGO (international designator 2026-067CY, launched 2026-03-30) after exhausting the five-digit range. CelesTrak’s notice: “All newly cataloged objects will have 6-digit catalog numbers of 100000+ and GP data will not be available for them using the TLE format.” The legacy fixed-width SATCAT continues to update but contains only objects below 70000.
The usable five-digit range ends at 69999, not 99999. Of the 70000–99999 block, primary sources describe only 80000–89999, the analyst range (Space-Track); the 72000-series ids seen in supplemental launch data and the 90000 block are described by secondary sources only. The corpus records this as a stated gap rather than guessing.
Alpha-5 (Space-Track only)
Space-Track’s definition: replace the first digit of the five-character field with a letter, A=10 … Z=33, skipping I and O, capitals only. 100000 becomes A0000, 339999 becomes Z9999, and nothing above 339999 has a TLE form. Only the TLE and 3LE formats show Alpha-5; the other formats carry integers up to 999,999,999. Its legacy API classes stay five-digit. In the checksum a letter counts 0, like a blank.
| letter | A | B | C | D | E | F | G | H | J | K | L | M | N | P | Q | R | S | T | U | V | W | X | Y | Z |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| value | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
Real catalog numbers so far exist only for letters A (100000–100789 at the corpus snapshot) and T (270000–270449, Space Fence analyst objects); every other letter is covered by vectors only. The corpus’s derived Alpha-5 lines are rendered from CelesTrak OMM records, because CelesTrak emits no Alpha-5; their encoding was corroborated by the maintainer against Space-Track output (44 records, letters A and T, zero defects; corpus decision D-070) without redistributing any of it.
OMM (CCSDS 502.0-B-3)
The Orbit Mean-Elements Message carries NORAD_CAT_ID as “an integer of up to nine digits”, four-digit years, and no fixed widths. CelesTrak has served it since May 2020 in CSV, JSON, XML and KVN; Space-Track’s GP class serves the same keywords. CelesTrak’s renderings have documented quirks a parser must accept:
- CSV and JSON omit the constant mandatory keywords (
CENTER_NAME,REF_FRAME,TIME_SYSTEM,MEAN_ELEMENT_THEORY) and the whole header; defaults are EARTH, TEME, UTC, SGP4. - XML is an
<ndm>aggregate of<omm version="2.0">elements with emptyCREATION_DATEandORIGINATOR; it validates against the SANA 2.0.0 schema set and fails the current 4.0.0 set only on the version attribute. - KVN writes
MEAN_ELEMENT_THEORY = SGP/SGP4where the XML saysSGP4; decimals may start with a dot (.0005013); lines end CRLF. - Analyst objects have an empty
OBJECT_IDin every format (an empty XML element, which Python’s ElementTree returns asNone) and the literal nameUNKNOWN. - Supplemental (SupGP) records add non-OMM columns (
RMS,DATA_SOURCE), use classificationC, element set 0, and are where nine-digit ids (7995016xx launch nominals) appear for roughly a week after a launch.
What CelesTrak does
It emits no Alpha-5. A TLE, 3LE or 2LE request returns only the objects below 100000; if none qualify the response is HTTP 404 with the body No GP data found. The OMM formats return everything. The default FORMAT has been CSV since 2026-05-09. The tracker checks the 404 and the count relations daily.
TLE versus OMM, field by field
The CCSDS 502.0-B-3 annex G example (GOES 9), with the OMM values as printed in the standard and the TLE rendered from them by the corpus renderer (validated against 304 of 304 CelesTrak lines). No live data is involved.
GOES 9 1 23581U 95025A 20064.44075725 -.00000113 00000+0 10000-3 0 9254 2 23581 3.0539 81.7939 0005013 249.2363 150.1602 1.00273272 43169
OBJECT_NAME = GOES 9 OBJECT_ID = 1995-025A CENTER_NAME = EARTH REF_FRAME = TEME TIME_SYSTEM = UTC MEAN_ELEMENT_THEORY = SGP/SGP4 EPOCH = 2020-064T10:34:41.4264 MEAN_MOTION = 1.00273272 ECCENTRICITY = 0.0005013 INCLINATION = 3.0539 RA_OF_ASC_NODE = 81.7939 ARG_OF_PERICENTER = 249.2363 MEAN_ANOMALY = 150.1602 EPHEMERIS_TYPE = 0 CLASSIFICATION_TYPE = U NORAD_CAT_ID = 23581 ELEMENT_SET_NO = 0925 REV_AT_EPOCH = 4316 BSTAR = 0.0001 MEAN_MOTION_DOT = -0.00000113 MEAN_MOTION_DDOT = 0.0
| TLE columns | OMM keyword | example | notes |
|---|---|---|---|
| line 0 | OBJECT_NAME | GOES 9 | TLE name line is padded or cut to 24 characters |
| 1: 3–7, 2: 3–7 | NORAD_CAT_ID | 23581 | five characters or Alpha-5 in the TLE; integer up to nine digits in the OMM |
| 1: 8 | CLASSIFICATION_TYPE | U | C in CelesTrak supplemental data |
| 1: 10–17 | OBJECT_ID | 95025A ↔ 1995-025A | two-digit launch year in the TLE; may be empty (analyst objects) |
| 1: 19–32 | EPOCH | 20064.44075725 ↔ 2020-064T10:34:41.4264 | two-digit year (57 pivot) and day of year; OMM allows calendar or day-of-year, optional fraction and Z; TLE resolution 864 µs |
| 1: 34–43 | MEAN_MOTION_DOT | -.00000113 | the OMM carries the TLE field as printed (ndot/2), 304/304 records |
| 1: 45–52 | MEAN_MOTION_DDOT | 00000+0 ↔ 0.0 | implied decimal and exponent; mantissa rounded half up to 5 digits by CelesTrak |
| 1: 54–61 | BSTAR | 10000-3 ↔ 0.0001 | implied decimal and exponent; same rounding rule |
| 1: 63 | EPHEMERIS_TYPE | 0 | |
| 1: 65–68 | ELEMENT_SET_NO | 925 ↔ 0925 | leading zero legal in KVN; may be 0 in supplemental data |
| 2: 9–16 | INCLINATION | 3.0539 | degrees |
| 2: 18–25 | RA_OF_ASC_NODE | 81.7939 | degrees |
| 2: 27–33 | ECCENTRICITY | 0005013 ↔ 0.0005013 | implied leading decimal; CelesTrak truncates to 7 digits, Space-Track rounds |
| 2: 35–42 | ARG_OF_PERICENTER | 249.2363 | degrees |
| 2: 44–51 | MEAN_ANOMALY | 150.1602 | degrees |
| 2: 53–63 | MEAN_MOTION | 1.00273272 | rev/day |
| 2: 64–68 | REV_AT_EPOCH | 4316 | may be 0 or 1 in supplemental data |
| 1: 69, 2: 69 | — | 4, 9 | modulo-10 checksum: digits count their value, minus signs 1, everything else 0 |
Because the TLE is the lossy side, OMM → TLE → OMM does not round-trip: eccentricity is truncated, the two exponent-form mantissas are rounded, and supplemental epochs are quantised to the TLE’s resolution (86 µs differences observed). The corpus compares TLE against OMM under those rules and reports a check that needed a tolerance separately from an exact pass.
The nine-digit case
Nine-digit NORAD_CAT_IDs exist today only in CelesTrak’s supplemental launch nominals (7995016xx) for roughly five to eight days after a launch. They cannot be rendered as TLE at all, and a library that stores the catalog number internally as an Alpha-5 string cannot load them from any format: python-sgp4 2.27 and Skyfield 1.55 raise ValueError on every such record (see library status).
What to change
- Parse the catalog number as an integer from any source; decode Alpha-5 strictly (reject I, O, lowercase) if you read Space-Track TLEs.
- Treat an empty
OBJECT_IDorOBJECT_NAMEas legitimate; default the constant metadata; accept all CCSDS epoch forms. - Tolerate unknown keys and non-
Uclassifications; compare TLE and OMM under the precision rules; readMEAN_MOTION_DOTas the printed TLE field. - Treat a TLE 404 as “unrepresentable in this format”, not as an outage, and prefer the OMM formats, which both providers say are the future.
Then run the corpus against your parser: quick start.