Skeptical, provenance-driven feasibility MDAO for orbital data centers vs Earth baselines.
Project description
spacedc-mdao
A skeptical, provenance-driven feasibility engine for orbital data centers, with terrestrial baselines for comparison. It optimizes delivered useful compute, not nominal watts or nominal GPUs: it takes installed capacity, degrades it through power, thermal, network, reliability, and utilization limits, then reports which assumptions decide the outcome. The job is to make the feasibility boundary visible, not to argue that space wins.
What would have to be true
Against a hyperscale Earth baseline (PUE 1.10) at $66/PFLOP-day, the result depends entirely on what the workload ships to Earth, which sets the communication intensity (bits moved per FLOP):
- Text inference (compact token output, derived ~1e-8 bits/FLOP): the network un-binds. Space is $1,237/PFLOP-day, ~19x Earth, delivering 29% of installed compute. The binding limit is the 0.75 optical-downlink weather availability (single-site, mitigable by site diversity) plus launch and radiator capex, not downlink bandwidth.
- Rich-output inference (embeddings, multimodal, artifact return, ~2e-6 bits/FLOP): the downlink bandwidth binds. Space is $5,389, ~82x Earth, delivering 6.6%.
Communication intensity is the single most decisive assumption (see the tornado below). Stacking every other improvement on the text-inference design, each at its aggressive-to-speculative bound:
| Lever (current -> target) | Cumulative LCOC | x Earth |
|---|---|---|
| baseline (text inference) | $1,237 | 19x |
| optical availability 0.75 -> 0.95 (site diversity) | $977 | 15x |
| launch cost $1,500 -> $200/kg | $604 | 9x |
| production learning (unit cost) | $404 | 6x |
| solar 100 -> 200 W/kg | $400 | 6x |
| radiator 7 -> 2 kg/m^2 | $396 | 6x |
| utilization 0.85 -> 0.98 | $344 | 5x |
| failure rate 0.05 -> 0.01 /yr | $311 | 5x |
Even with every lever maxed, text inference lands at ~5x Earth and wins 0%
of 500 Monte-Carlo draws. The residual is the launch, radiator, and bus mass Earth
never carries. These numbers are produced by the model, not typed in; regenerate
with python scripts/generate_readme_assets.py.
On the downlink claim
The 200 Gbps optical downlink in the scenario is a demonstrated LEO burst rate
(NASA/MIT Lincoln Laboratory TBIRD, 2023). The model treats downlink_gbps as a
scalar service rate times an availability factor, not an end-to-end time-averaged
rate derived from terminal count, contact windows, ground-station diversity,
weather, buffering, and ground-network egress. The 0.75 optical availability is a
single-site weather/contact estimate, not a universal cap. RF can add a
cloud-robust fallback and continuity, but it is not a drop-in replacement for a
bulk optical pipe (its own spectrum, antenna, power, and ground tradeoffs). See
the limitations note below.
What the model shows
| Communication intensity dominates LCOC sensitivity by far — the dominant uncertainty, now an explicit driver. | |
| Installed peak compute degraded to delivered for the text-inference design. | |
| LCOC distribution under input uncertainty; space beats Earth in 0% of draws. |
Install
spacedc-mdao uses uv. The base install is light;
capabilities live behind extras.
pip install spacedc-mdao # base
pip install "spacedc-mdao[mdao,viz]" # optimization + figures
| Extra | Pulls in | Enables |
|---|---|---|
mdao |
openmdao, pymoo, SALib | optimization, Pareto fronts, DOE, Sobol |
viz |
plotly, panel, networkx, kaleido | interactive + exported figures |
orbit |
skyfield | ground-station access (needs ephemeris) |
rf |
opensatcom | Tier-1 RF link-budget backend |
The distribution is spacedc-mdao; the import package is orbitdc.
Quick start
import orbitdc as odc
space = odc.load_scenario("examples/scenarios/orbital_1mw_inference.yaml")
earth = odc.load_scenario("examples/scenarios/earth_hyperscale_baseline.yaml")
result = odc.compare(space, earth)
print(result.summary())
print(result.explain_binding_constraints())
orbitdc compare examples/scenarios/orbital_1mw_inference.yaml examples/scenarios/earth_hyperscale_baseline.yaml --tornado
orbitdc robust examples/scenarios/orbital_1mw_inference.yaml examples/scenarios/earth_*.yaml
orbitdc optimize examples/scenarios/orbital_1mw_inference.yaml --pareto lcoc,kg_per_kw # needs [mdao]
The quick start and user tiers pages go from a one-line compare to custom catalogs and the dashboard.
What's inside
Delivered compute is the product of the waterfall factors:
C_delivered = C_peak * f_software * f_power * f_thermal * f_network * f_availability * f_utilization
Each factor is a discipline model that multiplies installed capacity down: a
radiator co-design ladder (chip -> junction -> coolant -> radiator -> area ->
mass, closed at end of life), an optical/RF link budget, orbit and formation
dynamics, radiation-driven reliability, and a levelized-cost spine with a
Wright's-law learning curve. Every default number carries provenance (source,
date, confidence, kind). The model architecture
and governing equations
pages have the details; v0.4.0 completes Phases 1-4 (see CHANGELOG.md).
Limitations
First-order by design; the results are only as good as the assumptions, which is why every default is provenance-tagged and exposed as a sensitivity driver. Two to keep in mind:
- Workload I/O dominates. Communication intensity (bits/FLOP) is the most decisive input and is low confidence. The catalog separates text inference (~1e-8, derived from token size / model FLOPs) from rich-output inference (~2e-6); pick the one that matches what you actually ship to Earth.
- Downlink is a scalar service rate, not an end-to-end model.
downlink_gbpstimes an availability factor is not the same as a time-averaged operational rate from terminal count, contact windows, ground-station diversity, weather, buffering, and ground-network egress. Treat the network result as a bound, and the 0.75 optical availability as a single-site weather estimate.
Compared to the McCalip calculator
The Economist (Mar 2026) cites Andrew McCalip's calculator showing a 1 GW orbital
data center at near-parity with Earth under optimistic assumptions. That is not in
conflict with this package's 19x: McCalip compares capex per nominal capacity
(GPUs excluded), while the headline here is cost per delivered compute after the
waterfall. The package exposes $12/W, capex_per_w_ex_gpu for an apples-to-apples
comparison — its Earth figure ($12bn/GW) matches McCalip's terrestrial
estimate, it agrees that Starship closes the launch gap, and it shows the
remaining difference is a satellite cost ($200/W here vs Starcloud's claimed
$5/W) plus the delivered-compute metric. See
vs the McCalip calculator.
Documentation
Full docs: https://jman4162.github.io/spacedc-mdao/ — quick start, user tiers,
model architecture, the governing equations, an API reference, and a generated
assumptions/provenance table. See SPEC.md for the design contract and
background_information/EQUATIONS.md for the equation map. The thermal modeling
background is in background_information/THEMRAL_RADIATOR_DEEPDIVE.md.
Development
uv run ruff check . && uv run ruff format --check .
uv run mypy src
uv run pytest
All code passes ruff, ruff format, and mypy --strict before commit; CI
enforces it. Regenerate the README figures with
uv run --extra viz python scripts/generate_readme_assets.py.
License
MIT. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file spacedc_mdao-0.4.1.tar.gz.
File metadata
- Download URL: spacedc_mdao-0.4.1.tar.gz
- Upload date:
- Size: 662.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
caa4f674a935a174c0f164f28ba78d0248e5ece8556cf9a98b257628d550daf2
|
|
| MD5 |
66636aa61af3bcd73c45ba839fa83d94
|
|
| BLAKE2b-256 |
97fd9eafec2be3afcbad7d1634fcc824cc5a2ee9d98f8a4323aa23af4c89282a
|
Provenance
The following attestation bundles were made for spacedc_mdao-0.4.1.tar.gz:
Publisher:
release.yml on jman4162/spacedc-mdao
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
spacedc_mdao-0.4.1.tar.gz -
Subject digest:
caa4f674a935a174c0f164f28ba78d0248e5ece8556cf9a98b257628d550daf2 - Sigstore transparency entry: 1821202335
- Sigstore integration time:
-
Permalink:
jman4162/spacedc-mdao@cd27907de7babc5f26afe2088957cd9154c347aa -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/jman4162
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cd27907de7babc5f26afe2088957cd9154c347aa -
Trigger Event:
push
-
Statement type:
File details
Details for the file spacedc_mdao-0.4.1-py3-none-any.whl.
File metadata
- Download URL: spacedc_mdao-0.4.1-py3-none-any.whl
- Upload date:
- Size: 98.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8337d4d5ec13bb541a0c0024a8e86cae135140e61b2beaff2d7c3df8f7c10a54
|
|
| MD5 |
a88b60ec2e05d8ab43759b9cd7068583
|
|
| BLAKE2b-256 |
73068632e13efb98b65b141c17429c554746bd0311a879c4a5922ea068f23de6
|
Provenance
The following attestation bundles were made for spacedc_mdao-0.4.1-py3-none-any.whl:
Publisher:
release.yml on jman4162/spacedc-mdao
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
spacedc_mdao-0.4.1-py3-none-any.whl -
Subject digest:
8337d4d5ec13bb541a0c0024a8e86cae135140e61b2beaff2d7c3df8f7c10a54 - Sigstore transparency entry: 1821202401
- Sigstore integration time:
-
Permalink:
jman4162/spacedc-mdao@cd27907de7babc5f26afe2088957cd9154c347aa -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/jman4162
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cd27907de7babc5f26afe2088957cd9154c347aa -
Trigger Event:
push
-
Statement type: