Orbital mechanics × Shannon × silicon

Why Starlink has a capacity ceiling per square kilometre

Not a wall of text with a picture. Every number below is produced by a formula you can move with a slider. By the end you should be able to re-derive the whole chain on a napkin — field of view, cell size, beam count, per-beam bitrate, and the spectrum wall the constellation is walking into.

Assumes algebra and a little trigonometry. No RF background required — the two facts you need are beamwidth is set by antenna aperture and bits/second is bandwidth × spectral efficiency. Everything else is geometry.

FOV area
Cells in FOV
Lit at once
Per beam
Ceiling / km²
Delivered / km²
Sats to hit wall
Sats in view

Orbit & geometry

Beams & cells

Spectrum & radio

The question

A satellite with a terabit of capacity is not a terabit over your house

SpaceX's V3 satellite carries 1 Tbps of downlink. The V2 it replaces carries about 100 Gbps. Ten times the satellite. The obvious inference — ten times the service — is wrong, and the reason it's wrong is the entire content of this page.

A satellite in low Earth orbit does not serve a point. It serves a disc — everything on the ground it can see above some minimum elevation angle. That disc is enormous, roughly the size of Western Europe. Whatever capacity is aboard gets divided across it. So the quantity that actually matters to a user is not gigabits per satellite, it's megabits per square kilometre, and there are exactly three things that set it:

the whole page in one line →
capacity per km² = B × η × 1 / Acell

B      usable spectrum per cell   =  {{Btot}} MHz
η      bits per hertz you can push through it  =  {{eta}}
Acell area you reuse that spectrum over  =  {{Acell}} km²

{{ceilPerKm2}} Mbps/km²  — the ceiling, no matter how many satellites you launch

The rest of this page derives each of those three terms from first principles, shows how far today's hardware sits from the ceiling, and then shows the three ways out. Open ▸ open the model above to see the sliders driving every number on the page; the V2 / V3 buttons snap them all to real hardware.

Step 1

How much ground does one satellite see?

Draw the triangle. Earth's centre O, the satellite S at altitude h, and a user U at the far edge of the coverage disc. Three facts pin it down: |OU| = R, |OS| = R + h, and at U the satellite sits at the minimum elevation angle ε above the local horizon — below that the dish can't close the link (too much atmosphere, too much ground clutter, regulatory interference limits). Starlink uses ε = 25°.

The angle at U between the local vertical UO and the line US is 90° + ε. Law of sines on triangle OUS:

law of sines   sin(η) / R  =  sin(90°+ε) / (R+h)      sin η = R·cos ε / (R+h)
sin η  =  6371 × cos {{elev}}° / (6371 + {{alt}})  =  {{sinNadir}}      η = {{nadir}}°
angles of a triangle   γ = 180° − (90°+ε) − η = 90° − ε − η  =  90 − {{elev}}{{nadir}}  =  {{central}}°

arc → ground radius   rg = R · γrad  =  6371 × {{centralRad}}  =  {{rg}} km
disc area              AFOV = π · rg²  =  π × {{rg}}²  =  {{fovM}} million km²
check — spherical cap   2πR²(1 − cos γ)  =  {{capM}} million km²  (agrees to {{capErr}}% — the cap is shallow, so flat is fine)

slant range             d = (R+h)·sin γ / cos ε  =  {{slant}} km  (vs {{alt}} km straight up)
Cross-section — true scale
Drawn to scale: Earth's curvature and the altitude are in true proportion, so the angles you see are η, γ and ε. Drag the altitude slider and watch the disc widen — and watch how little it widens, because η is already near its limit.
The cone on the sphere — drag to rotate
The same construction in 3D. The lit cap is the field of view; everything outside it sees the satellite below 25° elevation. Drag to orbit the camera. This is the one place 3D earns its keep — the cone's shallowness against the globe is hard to feel in 2D.
Sanity check

At 550 km and ε = 25° you get a disc of radius ≈ 940 km — about 2.78 million km², a bit larger than the EU. One satellite's entire downlink is spread over that. Drop ε to 10° and the disc more than doubles; that's why elevation masks are a capacity decision, not just a link-budget one.

Step 2

The unit of service is a cell, not a user

Starlink doesn't aim a beam at your dish. It aims at a fixed cell on the ground — a hexagon from a global grid (an H3-style hierarchical hex tiling), locked to the Earth, not to the satellite. Beams are steered from cell to cell; terminals inside a cell are served when their cell's turn comes. The published grid uses hexagons inscribed in a 15-mile (24.14 km) circle.

A regular hexagon whose vertices touch a circle of radius r (the circumradius) has area (3√3 / 2)·r² — it's six equilateral triangles of side r, each of area (√3/4)r².

Acell = (3√3 / 2) · r²  =  2.5981 × ({{cellD}}/2)²  =  2.5981 × {{cellR2}}  =  {{Acell}} km²

cells inside the field of view   Ncells = AFOV / Acell = {{fov}} / {{Acell}} = {{nCells}}

for reference — the −3 dB spot of a {{bw}}° beam at nadir
Ø−3dB = 2 · h · tan(θ/2) = 2 × {{alt}} × tan({{bwHalf}}°) = {{spot}} km  → {{spotA}} km²
Don't conflate these two

The cell (24.1 km across) is the scheduling unit. The −3 dB beam spot (≈ 14 km across for a 1.5° beam at 550 km) is the antenna's main lobe. The spot sits inside the cell; the beam's skirts and the pointing/steering margin fill the rest. They are different objects and the page keeps them separate — but they scale together, which is what matters for Step 3 and Step 6.

Hexagon geometry
Six equilateral triangles of side r. The inscribed-circle radius (apothem) is r·√3/2, which is why hex grids tile the plane with no gaps and near-circular cells — the reason every cellular system on Earth and above it uses them.
Step 3

How much of that disc is lit at any instant?

Now the punchline of the first half. A satellite has Nbeams downlink beams; each one lights exactly one cell at a time. So the fraction of its own field of view it is illuminating right now is just beams divided by cells.

coverage = Nbeams · Acell / AFOV  =  {{beams}} × {{Acell}} / {{fov}}  =  {{covPct}}%  → 1 cell in {{oneIn}}
equivalently   Nbeams / Ncells = {{beams}} / {{nCells}}

so each cell's duty cycle is   1 / {{oneIn}}  =  {{duty}} of the time
one full sweep of every cell takes   {{oneIn}} frames × 1.333 ms  =  {{sweep}} ms
Field of view, tiled into cells — lit vs dark
slow-motion
Every hexagon is one 24 km cell inside this satellite's field of view ( of them). Bright hexes are the currently illuminated. The real hop rate is one frame every 1.333 ms (750 frames/second) — far too fast to see, so this is slowed by the factor shown above. Hit cumulative sweep to accumulate served cells and watch the whole disc fill in over one duty cycle.
The comparison worth clicking

V2 lights 2.6% of what it can see. V3 lights 28%. Flip the preset buttons and look at the same disc twice.

Ten times the beams, ten times the instantaneous coverage. This is real and it is the main thing V3 buys. But note what it is not: it is not ten times the bits in any cell that was already being served — see Step 4.

Why this barely depends on altitude

The intuition "fly lower, cover less, so each satellite serves fewer people better" is only half right. Yes, the field of view shrinks. But the beam footprints shrink too, and — for a fixed antenna — they shrink as h², because a beam of fixed angular width θ paints a spot of diameter 2h·tan(θ/2). Both terms in the coverage fraction move together.

coverage  =  Nbeams · Acell(h) / AFOV(h)   where   Acell ∝ h²

550 km   2048 × 378.5 / 2.78M  =  27.9%
350 km   2048 × 153.3 / 1.30M  =  24.2%  (cells shrink 2.47×, the disc only 2.14×)

→ the ratio is set by Nbeams × θ² — beam count and beamwidth — not by orbit height

Try it: switch on “cell size scales with altitude” in the model, then sweep the altitude slider from 1200 km down to 200 km. The coverage readout wobbles by well under a factor of two across a 6× change in altitude. Altitude is a lever, but it's a lever on capacity density (Step 6), not on this ratio.

Step 4

Per-beam capacity is flat. This is the whole insight.

Divide each satellite's downlink by its beam count.

Total downlink per satellite
V3 carries roughly 10× the aggregate downlink of a V2.
Capacity per downlink beam
Same beam. Two separate charts on purpose — different quantities, different scales, no shared axis to mislead you.
V2   100 Gbps / 192 beams  =  521 Mbps per beam
V3   1000 Gbps / 2048 beams  =  488 Mbps per beam

and independently, from the radio
Cbeam = W · η  =  {{chBW}} MHz × {{eta}} bps/Hz  =  {{perBeamRadio}} Mbps

current model   {{dl}} Gbps / {{beams}} beams  =  {{perBeam}} Mbps per beam

Two completely different routes — a published system spec, and one 240 MHz channel at about 2 bits per hertz — land on the same half-gigabit. That's not a coincidence: one beam is one channel, and the channel plan didn't change between V2 and V3.

The most important sentence on this page

The V3 upgrade bought ten times more beams of the same width — not fatter beams, not narrower ones.

Beamwidth is aperture. θ ≈ λ/D: to halve the beamwidth you must double the antenna's linear size. That's physics, and it's bounded by what fits in a launch fairing. Beam count is silicon. It's how many independent phased-array chains your beamformer can run at once. SpaceX got 2048 beams out of new beamformer chips and roughly 64× the throughput per modem chip. Silicon scaled; aperture didn't.

So V3 is a parallelism upgrade, not a density upgrade. It serves ten times as many cells simultaneously, at the same bitrate each. Which is exactly why the ceiling in Step 5 is the thing it runs into.

Prove it to yourself with the sliders: move beams per satellite and satellite downlink total together and per-beam capacity stays pinned near W·η. Move beams alone and per-beam capacity falls — because you're now claiming to split a fixed pipe more ways, which the radio won't let you do for free.

Step 5

The spectrum wall

Here is the constraint that doesn't care how many satellites you launch.

Starlink's Ku-band user downlink is 8 channels of 240 MHz — 1.92 GHz of spectrum. Each channel can be used twice over, on two orthogonal polarisations. That gives 8 × 2 = 16 orthogonal channel/polarisation slots.

Sixteen slots means one ground cell can accept 16 simultaneous beams from 16 different satellites without them colliding — terminals inside the cell are pointing their dishes at different satellites, so the beams arrive on separable slots. Beyond 16 you're re-using a slot in the same cell from a different direction, and the dish's angular discrimination is all that saves you. That's the wall.

One cell, {{polSlotsTitle}} orthogonal slots
Each box is one channel × one polarisation. Filled boxes are slots claimed by an overlapping satellite at the current constellation size. When they're all full, the cell is at its Shannon-and-FCC limit and another satellite overhead adds nothing.
spectrum per cell   B = Cch × W × P  =  {{ch}} × {{chBW}} MHz × {{pol}}  =  {{Btot}} MHz
cell ceiling        Ccell = B × η  =  {{Btot}} MHz × {{eta}}  =  {{cellCeil}} Gbps  per {{Acell}} km²
→ areal ceiling    {{cellCeil}} Gbps / {{Acell}} km²  =  {{ceilPerKm2}} Mbps/km²

what one satellite actually delivers over its disc
D / AFOV  =  {{dl}} Gbps / {{fov}} km²  =  {{perSatKm2}} Mbps/km²

so satellites needed to reach the wall
Nsat = {{ceilPerKm2}} / {{perSatKm2}}  =  {{satsNeeded}}  overlapping the same spot

and how many are actually up there at once?
AFOV / AEarth  =  {{fov}} / 510,065,000  =  {{viewFrac}}% of the constellation is above 25° from any point
{{satCount}} satellites × {{viewFrac}}%  =  {{satsInView}} in view

Delivered capacity vs. overlapping satellites
V2 — 192 beams, 100 Gbps V3 — 2048 beams, 1 Tbps Ku spectrum wall
Each satellite in view contributes a fixed slab of areal capacity, so both lines rise linearly — until the cell runs out of orthogonal slots and the line goes flat. Hover for values. The vertical marker is how many satellites are actually in view at the current constellation size. Note the V2 line is nowhere near the wall even far off the right edge of this chart.
QuantityV2 (192 beams)V3 (2048 beams)Ku wall
Downlink per satellite100 Gbps1,000 Gbps
Capacity per beam521 Mbps488 Mbps≈ W·η
Instantaneous coverage of FOV2.6%27.9%
Delivered per km² (1 satellite)0.036 Mbps0.360 Mbps
Satellites needed to saturate a cell≈ 560≈ 5616 slots
Satellites actually in view (8,000 up)≈ 44≈ 44
Verdictbeam-limitedat the spectrum wall20.3 Mbps/km²
The regime change

V2 sat an order of magnitude below the spectrum wall. In that regime the engineering is easy and the economics are linear: launch more satellites, get more capacity, repeat. Roughly 560 overlapping V2s would have been needed to saturate Ku — nobody was ever going to get there.

A fleet of V3s arrives roughly at the wall. About 56 overlapping satellites saturate the slots, and about 44 are already in view with today's ~8,000-satellite constellation. Same order of magnitude. That is a qualitatively different regime: from here, more satellites of the same design stop buying capacity in the busiest cells, and the only moves left are the three in Step 6.

Be honest about the timeline

This is a ~2030 scenario, not today. As of 2026-07-24 there are zero operational V3s in orbit — the first 20 flew suborbitally on Starship Flight 13 and reentered as planned. SpaceX has FCC authorisation for 15,000 Gen2 satellites, with 50% required to be deployed by December 2028 and the remainder by December 2031. Everything above describes the constellation those milestones imply, not the one currently overhead.

Two more caveats worth holding: the "16 slots" figure is the clean orthogonal case — real systems get some extra reuse from dish directivity and some loss from guard bands and interference coordination. And demand is wildly non-uniform; the wall bites in dense cells long before it means anything over the Pacific.

Step 6

Three levers out

Back to the one-line model. If capacity/km² = B · η · (1/Acell), then there are exactly three levers, and they multiply.

1 / Acell

Spatial reuse

The only unbounded axis — shrink the cell and you get the whole spectrum again in the space you freed. Two ways: fly lower (footprint ∝ h², so 550 → 350 km is 2.5×) or build a bigger antenna (θ ≈ λ/D, so 2× linear aperture = ½ the beamwidth = ¼ the area = 4× reuse). Starship removes the fairing constraint that capped aperture on Falcon-launched satellites.

×
alt aperture
B

More spectrum

The FCC's 9 January 2026 Gen2 order authorises Ku, Ka, V and W and folds SpaceX's separate V-band constellation into Gen2. V-band downlink alone (37.5–42.5 GHz) is 5 GHz against Ku's 2 GHz. Add Ka migrating from gateway duty to user duty as E/V/W take over backhaul — precisely what V3's four quad-band 1.2 Tbps backhaul antennas are for.

×
user spectrum
η

Spectral efficiency

About 2 bps/Hz today. Shannon (log₂(1+SNR)) leaves real room, and it compounds with lever 1: narrower beams are higher-gain beams, higher gain is higher SNR, higher SNR unlocks higher-order MODCODs. The gain is bounded and logarithmic in power, so this is the smallest of the three — but it comes almost free with the aperture you already built.

×
η
–×
Multiply the three levers and today's ceiling of about 20 Mbps/km² becomes . The wall is a milestone in one band with one generation of hardware — not a ceiling on the idea.
the same equation, with the levers pulled
capacity/km²  =  B·  ×  η·  ×  (1/Acell
20.3 Mbps/km²  ×   =  Mbps/km²

Note which lever is cheap and which is expensive, because it isn't obvious. Lever 1 is a satellite-side change — new hardware on new launches, and the terminal on your roof doesn't care. Lever 2 is the awkward one: adding V-band user service means replacing the terminal fleet, because a Ku dish cannot receive at 40 GHz. The gating cost of the spectrum lever is on the ground, not in orbit. That asymmetry is why the satellite roadmap runs ahead of the spectrum roadmap.

Recap

The whole derivation, on one napkin

  1. Field of view. sin η = R·cos ε/(R+h)γ = 90° − ε − ηAFOV = π(Rγ)². At 550 km / 25°: ≈ 2.8 M km².
  2. Cell. Hexagon in a 15-mile circle: (3√3/2)r² = 378 km². So ≈ 7,300 cells per field of view.
  3. Instantaneous coverage. Nbeams/Ncells2.6% for V2, 28% for V3. Nearly altitude-invariant, because footprints and the disc scale together.
  4. Per-beam capacity is flat.500 Mbps for both, because it's one 240 MHz channel at ~2 bps/Hz. More beams, same beams.
  5. The wall. 8 channels × 240 MHz × 2 polarisations × 2 bps/Hz = 7.7 Gbps per cell = 20 Mbps/km². V3 needs ~56 overlapping satellites to get there; ~44 are in view. V2 would have needed ~560.
  6. Out. Reuse × spectrum × efficiency ≈ 30× of headroom, weighted toward reuse, gated on the ground by terminals.

If you can reproduce those six lines, you can evaluate almost any LEO broadband claim you'll read. The question to ask is never "how many gigabits is the satellite?" It's "over how many square kilometres, in how much spectrum, reused how many times?"