How this page was built
One static page, no framework, no tracking, no cookies. It loads two small data files and asks one NASA service a question when you open it. Every figure on the page links to where it came from.
The live distance
Source: the JPL Horizons API, heliocentric vectors for New Horizons (-98), Voyager 1 (-31) and Voyager 2 (-32), one row per day for about 400 days.
Why a shipped table: Horizons does not send the header browsers need to call it from a web page, so tools/fetch-ephemeris.mjs pulls the table at build time into assets/ephemeris.json. The page interpolates between daily rows and recomputes the distance four times a second. Past the end of the table it extrapolates with the last radial speed, which for a coasting spacecraft drifts by well under a thousandth of an AU per month.
Cross-check: when the page opens it asks NASA CDAWeb (which does allow browser calls) for its New Horizons position for the current hour. The two NASA sources differ by about 0.02 AU, about 3 million km, most likely because they use different trajectory solutions (an inference; neither service documents the gap). The page shows both instead of hiding the gap.
The chart
Source: McComas, Elliott & Mukherjee, New Horizons Primary and Extended Missions: Solar Wind Parameters, NASA Planetary Data System, Small Bodies Node. It holds 239,252 SWAP solar wind readings from October 10, 2008 to January 27, 2020 (11.3 to 46.4 AU), and a separate pickup-ion product from November 2008 to March 2017.
Reduction: tools/reduce_swap.py takes the median of each UTC day for speed, density and temperature, which leaves 2,683 days. The bold line is a running median over 27 days, one rotation of the Sun, using calendar dates so gaps in coverage are not bridged. No values were removed as outliers; the physical-range guard removed zero rows. The daily CSV is exactly what is plotted.
The dashed temperature line is textbook adiabatic cooling for a wind expanding at constant speed, temperature falling as distance to the power of minus four thirds. It is anchored to the median SWAP temperature between 20 and 25 AU. A straight power-law fit to the daily values gives an exponent of about minus 0.3, far shallower than minus 1.33, which is the heating signal the chart points at.
Why no density line: a fit to the daily density gives an exponent near minus 1.3 instead of the minus 2 that simple spreading predicts. Distance and time moved together during these eleven years, so the solar cycle is mixed into the trend. Drawing a theory line over that would imply more than the data can say.
What is not here: SWAP data after January 2020 exists but has not been published as speed, density and temperature. Calibrated counts from after the Arrokoth flyby reached the archive in 2026. Turning those into physical values takes the instrument team’s calibration work, so this page does not attempt it. PEPSSI’s public product reports energetic-particle fluxes on a different axis, so it is linked rather than plotted.
The numbers in the text
Budget figures come from NASA’s FY2026 spending plan. The comparisons are plain division: $2 million over $7,290.7 million for science, over $874.8 million divided by 365 for a day of heliophysics, over $24,399.8 million divided by 525,600 for minutes of NASA. The shock forecast is from Gasser et al. (2026). Voyager dates come from JPL and NASA mission updates.
Design
The colours come from the subject: indigo for space, amber for the region the Sun’s wind fills, pale cyan for interstellar space past the heliopause. Type is Instrument Serif and Instrument Sans, chosen partly because the page is about two instruments. The hero ruler is drawn to scale so the reader can see how close the spacecraft is to the shock. All text meets WCAG 2.1 AA contrast, the chart can be read with the arrow keys, and animation stops when your system asks for reduced motion.
Keeping it honest
tests/check.py checks colour contrast, that every link resolves, that every figure in the text matches the data and budget arithmetic, and that the data files are consistent with the page. The status line near the bottom of the main page is updated by hand, with its date, whenever NASA says something new.