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

  1. 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 A0000 and 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.
  2. 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.

The Alpha-5 letter table
letterABCDEFGHJKLMNPQRSTUVWXYZ
value101112131415161718192021222324252627282930313233

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 empty CREATION_DATE and ORIGINATOR; 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/SGP4 where the XML says SGP4; decimals may start with a dot (.0005013); lines end CRLF.
  • Analyst objects have an empty OBJECT_ID in every format (an empty XML element, which Python’s ElementTree returns as None) and the literal name UNKNOWN.
  • Supplemental (SupGP) records add non-OMM columns (RMS, DATA_SOURCE), use classification C, 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
Field map (header keywords omitted)
TLE columnsOMM keywordexamplenotes
line 0OBJECT_NAMEGOES 9TLE name line is padded or cut to 24 characters
1: 3–7, 2: 3–7NORAD_CAT_ID23581five characters or Alpha-5 in the TLE; integer up to nine digits in the OMM
1: 8CLASSIFICATION_TYPEUC in CelesTrak supplemental data
1: 10–17OBJECT_ID95025A ↔ 1995-025Atwo-digit launch year in the TLE; may be empty (analyst objects)
1: 19–32EPOCH20064.44075725 ↔ 2020-064T10:34:41.4264two-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–43MEAN_MOTION_DOT-.00000113the OMM carries the TLE field as printed (ndot/2), 304/304 records
1: 45–52MEAN_MOTION_DDOT00000+0 ↔ 0.0implied decimal and exponent; mantissa rounded half up to 5 digits by CelesTrak
1: 54–61BSTAR10000-3 ↔ 0.0001implied decimal and exponent; same rounding rule
1: 63EPHEMERIS_TYPE0
1: 65–68ELEMENT_SET_NO925 ↔ 0925leading zero legal in KVN; may be 0 in supplemental data
2: 9–16INCLINATION3.0539degrees
2: 18–25RA_OF_ASC_NODE81.7939degrees
2: 27–33ECCENTRICITY0005013 ↔ 0.0005013implied leading decimal; CelesTrak truncates to 7 digits, Space-Track rounds
2: 35–42ARG_OF_PERICENTER249.2363degrees
2: 44–51MEAN_ANOMALY150.1602degrees
2: 53–63MEAN_MOTION1.00273272rev/day
2: 64–68REV_AT_EPOCH4316may be 0 or 1 in supplemental data
1: 69, 2: 694, 9modulo-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_ID or OBJECT_NAME as legitimate; default the constant metadata; accept all CCSDS epoch forms.
  • Tolerate unknown keys and non-U classifications; compare TLE and OMM under the precision rules; read MEAN_MOTION_DOT as 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.