Worked calculation
Select an object to see how its contribution is computed.
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.
00 Method
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’m minting a new term: the Taylor Occlusion Index (TOI). TOI is the present cumulative amount of occlusion caused by manmade satellites in earth orbit. The unit is moons. Right now we’re at .~03 moons.
I feel like we can easily go up to a TOI of like 10.
Isaiah Taylor (@isaiah_p_taylor) October 9, 2024
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
01 The unit
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.
The patch of sky inside a cone of half-angle α is a solid angle, measured in steradians. The Moon covers
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.
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
We use this to calculate the apparent angle of each satellite.
02 The expressions
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.
We run the sum over all N = 35,441 objects for all three methods. The expressions differ in how we calculate area Ai.
| Expression | Area per object | Question it answers |
|---|---|---|
| Absolute | The 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? |
| Facing | The 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? |
| Apparent | The 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? |
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.
Starlink V2 Mini
116 m² at 480 km
7.85 × 10⁻⁶ moons
International Space Station
4,300 m² at 420 km
380 × 10⁻⁶ moons
SL-16 upper stage
45 m² at 830 km
1.02 × 10⁻⁶ moons
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
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
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.
The one half comes from averaging |cos ψ| over all directions on the sphere:
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),
For the V2 Mini that gives
a little over half its absolute area. Summed over every object,
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.
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:
Summed over all objects, with Pfac the perimeter of the facing outline,
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.
Move the slider or pick a site. Every value updates from the three published sums.
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
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
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.
Population and orbits
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
Physical size
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
Dominant 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
This month that gives 35,441 objects: 20,112 payloads, 2,266 rocket bodies, 13,008 pieces of debris and 55 of unknown type.
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.
| Source | Objects | Share |
|---|
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.
| Source | Objects | Share of absolute | Share 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.
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.
| Body | Aabs, largest silhouette | Afac | Pfac |
|---|---|---|---|
| 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/2 | D²/2 | D²/2 | 3D |
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.
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
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… | ||||||
04 Breakdown
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.
Moons. Groups ordered by facing TOI; the share is of the facing total.
Loading…
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.
| # | Object | Group | Altitude km | Aabs m² | Afac m² | Absolute µmoon | Facing µmoon |
|---|
| Type | Objects | Absolute | Facing | Apparent |
|---|
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.
| Orbit | Objects | Absolute | Facing | Apparent |
|---|
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
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.
Moons, logarithmic scale. The lines are reconstructed month by month; rings mark measured runs.
Loading…
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
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.
Select an object to see how its contribution is computed.
07 Verify
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.
| File | Contents | Size |
|---|---|---|
| latest.json | Headline values, the sums behind them, groups, coverage and input checksums | 22 KB |
| objects.csv | One row per counted object: orbit, dimensions, area source, areas and contributions | 5.9 MB |
| buses.json | The curated designs with dimensions, sources, notes, counts and contributions | 24 KB |
| history.csv | Reconstructed monthly values since 1957 and every measured run | 54 KB |
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: 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}")
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.
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.
| Input | Fetched (UTC) | Size | SHA-256 | License |
|---|
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.
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
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.