Taylor Occlusion Index: the total amount of sky occlusion by manmade objects in orbit, expressed in units of moons.

0.046 moons

Every tracked object in orbit, directly overhead and facing the ground the way it flies, would cover 4.6% of the full Moon.

35,441 tracked objects · catalog of 18 October 2026 · recomputed monthly

How it’s measured

00 Method

How much of the sky have we covered?

In October 2024, there was a lot of discussion about how many satellites SpaceX was going to put into orbit for the new Starlink constellation, and I started thinking about what this looks like long-term. This led me to mint a new term, which I tweeted about here:

I built this site (with HEAVY help from Claude) to provide an up to date compution of that number from public satellite catalogs every month. Take every tracked object in Earth orbit, place it directly overhead at its own altitude, and add up the patches of sky the objects cover. Divide by the patch the full Moon covers. The result is the TOI, in moons.

There are a couple ways that you could count the occlusion of a given satelite. I present three expressions of it here. The default and probably most accurate is Facing: the area the hardware presents to the ground as it flies. On 18 October 2026 the catalogs held 35,441 objects.

  • Absolute

    0.0825 moons

    Each object laid flat and face‑on, showing its largest silhouette. Basically, a worst-case occlusion assuming satellites were always facing the viewer with its largest face.

  • Facing

    0.0457 moons

    Each object as it faces the ground in flight. Solar arrays that track the Sun count at half their area.

  • Apparent

    0.199 moons

    Trying to account for blurring. Each facing silhouette gets blurred by 2″ of atmospheric seeing.

One Moon1

Apparent0.199

Absolute0.0825

Facing0.0457

Fig. 1 Each occlusion drawn to scale (the white outline is the moon).

01 The unit

One Moon

The unit is the full Moon seen from Earth at its mean distance. Its radius R☾ is 1,737.4 km and its mean distance d☾ is 384,400 km, so its edge sits a small angle α from its center.

α = arcsin(R☾ / d☾) = arcsin(1737.4 km / 384,400 km) = 0.0045198 rad = 0.25896°

The patch of sky inside a cone of half-angle α is a solid angle, measured in steradians. The Moon covers

Ω☾ = 2π (1 − cos α) = 6.4178 × 10⁻⁵ sr

That is one Moon. The whole sky could hold about 195,800 Moons. The Moon’s angular diameter is 0.518°, or 31.1 arcminutes.

The Moon’s cone: an observer, the Moon of radius R at distance d, and the half-angle alpha between the axis and the tangent line α R☾ d☾ Ω☾ You
Fig. 2 The cone from an observer to the Moon’s edge. R☾ meets the line of sight at a right angle, so sin α = R☾/d☾. Not to scale. The real cone is 0.52° across, about 35 times narrower than drawn.

An object much smaller than its distance covers a solid angle equal to its area divided by its distance squared. A flat plate of area A seen face‑on from a distance h covers

Ω ≈ A / h²

We use this to calculate the apparent angle of each satellite.

02 The expressions

Three ways to count area

We use the same viewing sum method for all three expressions, ie., each object i sits directly overhead at its own mean altitude hi, ie, the average of its perigee and apogee, and we total up the solid angle.

TOI = (1/Ω☾) · Σ Aᵢ / hᵢ²

We run the sum over all N = 35,441 objects for all three methods. The expressions differ in how we calculate area Ai.

ExpressionArea per objectQuestion it answers
AbsoluteThe largest silhouette the object can present. For flat satellites, the body plus every solar array, face‑on.How much sky would the hardware cover if every piece were laid flat and faced us?
FacingThe orbit-averaged area the object presents to the ground, given how it is pointed.How much sky does the hardware cover as it faces Earth in flight?
ApparentThe facing area grown by the atmosphere’s blur at the object’s distance.How much sky does each satellite appear to touch once the air smears its silhouette?

Absolute

The absolute TOI gives each object its largest silhouette. For a flat satellite that means the body and every solar array, all face‑on to the observer. It answers the question from my earlier post about how large the hardware would look packed flat into one disc.

h

Starlink V2 Mini

116 m² at 480 km

7.85 × 10⁻⁶ moons

h

International Space Station

4,300 m² at 420 km

380 × 10⁻⁶ moons

h

SL-16 upper stage

45 m² at 830 km

1.02 × 10⁻⁶ moons

Fig. 3 Heights are to scale and plates are enlarged by the same factor to show relative sizes.

A Starlink V2 Mini has a 2.7 × 4.1 m body and two 4.1 × 12.8 m solar arrays, 116.03 m² in all. At 480 km it covers

Ω = 116.03 m² / (480,000 m)² = 5.04 × 10⁻¹⁰ sr = 7.85 × 10⁻⁶ moons

About 127,000 of them would cover the Moon. Altitude matters a lot here; viewing angle varies with altitude enters squared, so the same satellite at 350 km counts 1.9 times as much as at 480 km. Summed over every object, the actual altitude comes to

TOI_abs = (1/Ω☾) Σ A_abs/h² = 5.293 × 10⁻⁶ sr / 6.418 × 10⁻⁵ sr = 0.08247 moons

Facing

The facing TOI uses the area each object actually presents to the ground (as best as Claude and I could guess from publicly avaialable data on how satellites are pointed), averaged over its orbit.

  • Flat-panel satellites such as Starlink and most megaconstellations point their broad face at Earth, where the user antennas are. The whole body face counts.
  • Sun-tracking solar arrays turn toward the Sun. Seen from directly below, an array of area A presents A·|cos ψ|, where ψ is the angle between the Sun and the local vertical. Averaged over every Sun direction this comes to one half, so these arrays count at half their area.
  • Earth-facing arrays count in full. AST SpaceMobile’s BlueWalker and BlueBird satellites carry their solar cells on the back of an antenna that faces Earth.
  • Objects of unknown attitude, such as generic boxes, tumbling rocket bodies and debris, use Cauchy’s theorem. A convex body seen from every direction shows on average one quarter of its surface area, S/4.
Side view of a flat satellite over the Earth. The body faces down. A solar array tilts to face the Sun at angle psi from the vertical, and its shadow on the ground is shorter by the factor cos psi. Earth Sun ψ Sun-tracking array, area A Body faces the ground full face A·|cos ψ|
Fig. 4 The body’s face counts in full. The array turns to face the Sun, so from the ground it looks foreshortened by |cos ψ|. Averaged over every direction the Sun can take, the factor is one half.

The one half comes from averaging |cos ψ| over all directions on the sphere:

⟨|cos ψ|⟩ = (1/4π) ∫∫ |cos ψ| sin ψ dψ dφ = ½

For a flat-panel design with a body face a × b and n arrays of L × w, each seen at a factor f (½ for Sun-tracking, 1 for Earth-facing),

A_abs = ab + nLw A_fac = ab + f·nLw

For the V2 Mini that gives

A_fac = 2.7×4.1 + ½×2×12.8×4.1 = 11.07 + 52.48 = 63.55 m²

a little over half its absolute area. Summed over every object,

TOI_fac = (1/Ω☾) Σ A_fac/h² = 2.934 × 10⁻⁶ sr / 6.418 × 10⁻⁵ sr = 0.04571 moons

Apparent

Light from space crosses turbulent air before it reaches the ground, and the turbulence smears every point into a small disc. Astronomers call its width the "seeing" and calculate it as a full width at half maximum, θ. At a good mountain site θ is under 1″. At a typical site it is about 2″.

Blurring a shape of a satellite’s area A and perimeter P by a disc of radius ρ adds a strip of width ρ along every edge and a rounded piece at every corner. For a convex shape, we use Steiner’s formula.

A_app = A + Pρ + πρ², ρ = h·θ/2
Steiner's formula: a rectangle of area A, rim strips of width rho along each edge totalling P times rho, and four quarter discs at the corners totalling pi rho squared A ρ Rim strips P·ρ Corners πρ² in all The blur disc rolls around the edge
Fig. 5 Steiner’s formula. The strips along the edges add P·ρ. The four corner pieces fit together into one disc of radius ρ, which adds πρ².
Sixteen identical silhouettes packed into one block with a single blurred rim, compared with the same sixteen scattered, each with its own blurred rim Packed into one disc Scattered across the sky
Fig. 6 Scattered objects have much more cumulative blur than tesselated.

If every satellite were pushed edge to edge into one disc, only the disc’s outer edge would blur. Spread across the sky, every satellite carries its own blurred rim. The total light blocked stays the same, and that is the facing TOI. Apparent TOI attempts to account for blurring.

Substituting ρ = hθ/2 and dividing by h² splits each object’s apparent solid angle into three terms:

A_app/h² = A_fac/h² + (θ/2)·P_fac/h + π(θ/2)²

Summed over all objects, with Pfac the perimeter of the facing outline,

TOI_app(θ) = (1/Ω☾) · [ Σ A_fac/h² + (θ/2) · Σ P_fac/h + N·π(θ/2)² ]

The first term is the facing TOI. The second adds the blurred rims which falls off only as 1/h, so distant objects weigh more in it than in the area term. The third adds one seeing disc per object, whatever its size or distance. At 2″ each disc is worth 1.15 millionths of a Moon. The data file publishes all three sums, so anyone can recompute the apparent TOI for any seeing.

Apparent TOI at any seeing

Move the slider or pick a site. Every value updates from the three published sums.

2″

Logarithmic scale from 0.25 to 60 arcseconds.

At 2″, a satellite 480 km up is blurred by ρ = 2.33 m on every edge.

Apparent TOI

0.199 moons

4.36 times the facing TOI

Area Σ A/h²
0.0457
Rims (θ/2) Σ P/h
0.113
Discs Nπ(θ/2)²
0.0408

The seeing changes how much sky the satellites touch. The light they block stays the same, and that is the facing TOI. As θ shrinks toward zero the apparent TOI falls to the facing TOI.

03 The data

The data

This page is sourced from two public catalogs and one hand-built table. On the first of each month the pipeline downloads the catalogs and recomputes everything from scratch with a Github Action. This run used the catalogs of 18 October 2026.

  1. Population and orbits

    CelesTrak SATCAT

    The satellite catalog kept by the US Space Force (USSPACECOM) and published through Space-Track.org. CelesTrak redistributes it as one file. It lists every cataloged object with its status, perigee, apogee and, for many older objects, a radar cross-section.

    34,699 orbits

  2. Physical size

    GCAT

    Jonathan McDowell’s General Catalog of Artificial Space Objects. It records each object’s length, diameter, span across appendages and shape, its satellite bus, and objects the public catalog has not released yet. Licensed CC BY 4.0.

    10,972 areas from GCAT dimensions

  3. Dominant designs

    Curated designs

    A table of the satellite designs that dominate the index, with dimensions from operators, FCC filings and published papers. Every entry carries citations and a confidence level.

    11,887 objects, 98.1% of the absolute TOI

Who counts

  1. Every object in CelesTrak’s catalog that has not decayed and orbits Earth. Docked modules and visiting vehicles carry their host’s catalog number, so the ISS and Tiangong count once each, as whole stations. GCAT’s records of dockings catch the few joined objects CelesTrak has not marked yet, so a stack always counts once.
  2. Objects GCAT lists in Earth orbit that CelesTrak does not carry, such as batches GCAT cataloged before public orbits appeared. Aliases, placeholders and duplicate entries are left out. When the two catalogs disagree about whether an object has come down, CelesTrak decides.
  3. If CelesTrak cannot be reached, the pipeline falls back to GCAT alone and marks the month as degraded.

This month that gives 35,441 objects: 20,112 payloads, 2,266 rocket bodies, 13,008 pieces of debris and 55 of unknown type.

Altitude

Each object’s altitude is the mean of its perigee and apogee, h = (perigee + apogee)/2, from CelesTrak. When CelesTrak has no orbit the pipeline uses GCAT’s current orbit, and failing that the median perigee and apogee of objects from the same launch. Objects with no orbit from any source are left out and listed below. Altitudes below 100 km are raised to 100 km.

Where the orbits come from
SourceObjectsShare

Area

Each object takes its area from the first of four sources that has one: a curated design, GCAT’s dimensions run through a generic model, CelesTrak’s radar cross-section, or a default by object type.

Where the areas come from
SourceObjectsShare of absoluteShare of facing

Curation roughly doubles the index. With GCAT’s dimensions and the generic model alone, the absolute TOI would be 0.0427 and the facing TOI 0.0249. GCAT flags many of its dimensions as guesses. Before curation 98% of the absolute TOI would rest on those guesses; after curation 0.9% still does.

The generic model for GCAT dimensionsFormulas

GCAT gives a length L (the longest body dimension), a diameter D (the second longest), a span across appendages and a free-text shape. Flat-panel satellites are recorded with their thickness as the length, so L < D. The shape picks the body row; rocket bodies always use the cylinder row because they tumble.

BodyAabs, largest silhouetteAfacPfac
Sphere, r = max(L,D)/2πr²πr²2πr
Cylinder or cone√((LD)² + (πD²/4)²)(πDL + πD²/2)/4π(L + πD/2)/2
Box L × D × D√(2(LD)² + D⁴)(2LD + D²)/2π(L + 2D)/2
Flat panel, face D × D/2D²/2D²/23D

The facing area of a box or cylinder of unknown attitude is a quarter of its surface area (Cauchy’s theorem), and its perimeter is π times its mean width (Barbier’s theorem). When the span exceeds the body by more than 5% and the shape mentions a panel, wing or array, the extra length e becomes solar arrays of area e × w, with w the body width; they count in full in Aabs, at one half in Afac, and add 2e to Pfac. Other appendages such as booms and antennas add 0.1 × e × min(L,D), at one half in Afac. When the shape names a tether, the span is the tether’s length and adds nothing.

Objects with no dimensions, which covers almost all debris, use CelesTrak’s radar cross-section as both areas, with the perimeter of a circle of that area. Without that, a default applies: 0.1 m² for debris and unknown objects, 1 m² for payloads and 10 m² for rocket bodies.

Curated designs

The designs below carry 98.1% of the absolute TOI. A flat-panel design with a body face a × b and n arrays of L × w attached along the b sides has

P_fac = 2(a + b) + 2n(L + f·w) − 2n·min(f·w, b)

as the perimeter of its facing outline, with the shared edges between body and arrays removed. The space stations are given directly, from their documented parts. Open a row to read the notes and sources.

Design Dimensions Aabs m² Afac m² Pfac m In orbit Share of facing
Loading the design table…
  • published stated by the operator or a peer-reviewed source
  • estimated derived from published figures
  • assumed taken equal to a sister design
  • proxy stands in until figures appear

Notes on this month’s run

  • Loading…

04 Breakdown

Data insights

Starlink satellites, including the Starshield satellites built on the same bus, carry 95.9% of the facing TOI. Large flat panels in low orbits dominate. A satellite with 60 m² facing the ground at 470 km counts as much as about 2,000 pieces of 0.1 m² debris at 850 km.

TOI by group

Moons. Groups ordered by facing TOI; the share is of the facing total.

  • Absolute
  • Facing

Loading…

The largest single objects

The two space stations lead, followed by Starlink V3 satellites, 276 m² each, at 316 to 346 km. Select a name to open its worked calculation in the explorer.

Top 25 objects by absolute contribution. 1 µmoon is one millionth of a Moon.
#ObjectGroupAltitude kmAabs m²Afac m²Absolute µmoonFacing µmoon

By object type

TypeObjectsAbsoluteFacingApparent

Debris is 37% of the objects and almost none of the area. In the apparent TOI each piece still adds a full seeing disc, so debris matters more there.

By orbit

OrbitObjectsAbsoluteFacingApparent

A geostationary satellite 35,786 km up counts for about 1/5,800 of what the same satellite counts at 470 km. LEO orbits have apogee below 2,000 km. GEO orbits sit within 1,000 km of geostationary altitude and are nearly circular. MEO covers the other near-circular orbits below that band, and HEO the eccentric and more distant ones.

05 History

Historical context/h2>

The pipeline rebuilds the index for the first of every month back to November 1957, from each object’s launch and decay dates and today’s area model. Objects that have since come down use their early orbits from GCAT. Starlink satellites sit at their original shells until the 2026 lowering. This is a reconstruction, and the chart labels it as one. Each monthly run also records one measured value; those points start in October 2026 and will build up month by month.

TOI since 1957

Moons, logarithmic scale. The lines are reconstructed month by month; rings mark measured runs.

  • Reconstructed
  • Absolute
  • Facing
  • Apparent at 2″
  • Measured
  • Monthly run
  • October 2024
  • My estimate
The steps come from the Echo balloon satellites in the early 1960s, the ISS in November 1998 (counted at full size from its first module) and the Starlink build-up since 2019. Full monthly data in history.csv.

When I posted in October 2024, I put the index at about 0.03 moons. The reconstruction gives 0.026 for the absolute TOI and 0.014 for the facing TOI on 1 October 2024. The absolute TOI is now 3.2 times its October 2024 value, mostly from V2 Mini satellites and the move to lower shells.

06 Explorer

Object index

All 35,441 objects, with the inputs behind each one. Search by name, NORAD catalog number or COSPAR designation, then select an object to see its contribution worked out from its dimensions and orbit.

The catalog file is 35,441 rows, 5.9 MB. It loads when you reach this section.

The catalog loads when this section comes into view.

Use the up and down arrow keys to move through the list. The worked calculation updates as you move.

Worked calculation

Select an object to see how its contribution is computed.

07 Verify

Check it yourself

Every number on this page comes from four files, published with the site and archived with each monthly release. Download them, rerun the arithmetic, or rerun the whole pipeline from the same inputs.

Published files for the catalog of 18 October 2026
FileContentsSize
latest.jsonHeadline values, the sums behind them, groups, coverage and input checksums22 KB
objects.csvOne row per counted object: orbit, dimensions, area source, areas and contributions5.9 MB
buses.jsonThe curated designs with dimensions, sources, notes, counts and contributions24 KB
history.csvReconstructed monthly values since 1957 and every measured run54 KB

Recompute the TOI

Put latest.json and objects.csv in one folder, save this script next to them and run python3 toi_check.py. It needs only the Python standard library. It recomputes the Moon’s solid angle, sums A/h² and P/h over every object, and compares the result with the published values.

toi_check.py
# toi_check.py: recompute the TOI from objects.csv (Python 3, stdlib only)
import csv, json, math

R, D = 1737.4, 384400.0                  # Moon radius, mean distance (km)
moon = 2 * math.pi * (1 - math.cos(math.asin(R / D)))   # one Moon (sr)
half = math.radians(2 / 3600) / 2        # half the 2 arcsec seeing (rad)
n = sa = sf = sp = 0
with open("objects.csv", newline="", encoding="utf-8") as f:
    for row in csv.DictReader(f):
        h = float(row["alt_km"]) * 1000  # altitude (m)
        n += 1
        sa += float(row["A_abs_m2"]) / h**2
        sf += float(row["A_fac_m2"]) / h**2
        sp += float(row["P_fac_m"]) / h
toi = json.load(open("latest.json", encoding="utf-8"))["toi"]
mine = {"absolute": sa / moon, "facing": sf / moon,
        "apparent": (sf + half * sp + n * math.pi * half**2) / moon}
print(f"{'objects':<9} {n}")
for k, v in mine.items():
    print(f"{k:<9} {v:.6f}   published {toi[k]:.6f}")
Expected output
objects   35441
absolute  0.082472   published 0.082472
facing    0.045711   published 0.045711
apparent  0.199380   published 0.199380

The file rounds areas to six significant figures. The recomputed values still match the published ones to within one part in ten million.

Upstream inputs

The pipeline records the exact files it read. The SHA-256 checksums let you confirm that a copy of an input is byte for byte the one used here.

InputFetched (UTC)SizeSHA-256License

Rerun the pipeline

The pipeline is plain Python 3.11 or newer with no dependencies. It downloads the catalogs, rebuilds every file in data/, and runs in under ten seconds once the inputs are on disk.

Shell
git clone https://github.com/isaiahtaylor/toi
cd toi
python3 -m pipeline.run       # download the catalogs, write data/
python3 -m unittest discover -s pipeline/tests

To reproduce a month exactly, download that month’s data release, which holds the input files, and run python3 -m pipeline.run --offline --cache <folder> --out /tmp/check --date 2026-10-18. The output matches the published files apart from the generation time.

08 Limits

Caveats

The TOI is an aggregate area index with a lot of assumptions about geometetry and orientation. My guess is it's 80% accurate mathematically. However, nothing in orbit shows to the naked eye as a dark silhouette. The eye resolves about 60″, and a 30 m Starlink at 480 km spans 13″. At any moment only the objects above your horizon count, and they are farther away than straight up. At any moment the sky covered above one observer is about 1/250 of the absolute TOI.

Assumptions and approximations

  • Assumed array sizes. SpaceX has not published dimensions for the V2 Mini Optimized or the direct-to-cell satellites, which together carry more than half the index. Both are taken equal to the V2 Mini. If the Optimized arrays were 25% smaller, the facing TOI would fall by about 10%.
  • Proxies. Starlink V3 uses the full-size Gen2 satellite from SpaceX’s 2022 FCC filing. Starshield uses the V2 Mini envelope.
  • Classified objects have orbits from amateur observers, carried by GCAT where CelesTrak lists none.
  • GCAT dimensions are guesses for many objects. After curation they carry 0.9% of the absolute TOI.
  • Inverse-square weighting. Each object counts as if straight overhead. That ranks low objects above high ones by 1/h², which is the point of the index, and is also why it overstates what any one observer sees.
  • No overlaps. Objects never hide one another in the sum. With objects this small and this sparse, that changes nothing at the precision shown.
  • Seeing is one number. The apparent TOI uses a single seeing width for every object. Real seeing varies by site, night and elevation angle.
  • The history is approximate. It applies today’s areas to the past, uses early orbits for objects that have come down, and counts the ISS at full size from its first module in 1998.