Ephemera

ephemera.space
built 2026-09-17 20:20 UTC

Every eight hours, SpaceX publishes where each of about eleven thousand Starlink satellites will be for the next three days, and how sure it is. Eight hours later that set is gone, replaced by the next one. Ephemera keeps them, and measures what the public catalogue can see.

The files carry a full position and velocity uncertainty every sixty seconds, read from the feed on 30 August 2026. Starlink is the only operator with public covariance; other operators enter via CelesTrak SupGP without covariance.

What the public catalogue can see

Headline figures from cycle 764fb17cd429, first seen 2026-09-17 12:41 UTC, scored 2026-09-17 14:02 UTC against the public catalogue snapshot fetched 2026-09-17 12:10 UTC (12,865 element sets).

At the first instant of each operator file, the public catalogue puts 81% of the scored Starlink satellites within 10 km of where the operator says they are. The middle satellite is 2.6 km away, with the public information a median of 8 hours old. Where the public information is two to three days old, the two predictions are about 37 km apart. Both sides are predictions, and most of that spread is planned trajectory changes the public catalogue cannot know about.

Everyone outside SpaceX sees Starlink through the public catalogue of orbital elements. Ephemera takes that public element set for each satellite, propagates it with SGP4, and compares it against the operator's own published trajectory for the same satellite at the same instants. The distance between the two is what this measures. It is not an error of the satellite, and it is not a statement about which side is right.

56 satellites (0.5%) are more than 1,000 km from the public prediction at publication, which is a large part of an orbit. For those the public element set is not on the operator's trajectory at all. Ephemera does not label any separation as a manoeuvre; that needs a detector this project has not built.

1 km3 km10 km30 km1.50-6 h3,3592.86-12 h7,5676.512-24 h18,39416.124-48 h42,76137.048-72 h43,71150.0over 72 h27,880
Median separation between the two predictions, by how old the public catalogue's information was. Log scale; the second line under each point is how many comparisons it holds. Cycle 764fb17cd429, scored 2026-09-17 14:02 UTC.

Feed health for this cycle. 11,123 of 11,123 operator files scored. 0 have no entry in the public catalogue; 0 marked decayed; 0 failed to propagate; 0 unreadable; 0 no longer matching the record. Public element sets were a mean of 14.2 h old when the snapshot was taken (median 10.0 h, 90th percentile 28.5 h, 41 over 72 h). Averaged over every comparison, which run out to three days into the operator file, element age is 48.4 h: the difference is the file's own prediction horizon, not catalogue staleness. Space-Track: 161 snapshots held, last fetched 2026-09-17 20:10 UTC with 12,865 element sets. Poller heartbeat coverage over the last 24 h: 99.2%.

The archive behind it

As of 2026-09-17 20:20 UTC. Poller: home (Cape Town, residential; single poller until poller A exists).

The operator side of every comparison comes from files this project caught before they were replaced. Each cycle is hashed file by file into one Merkle root, the root is stamped into the Bitcoin blockchain through OpenTimestamps, and the manifest plus ten files chosen by the root itself are pushed into the Wayback Machine so an independent copy exists that this project does not control.

As of 2026-09-17 20:20 UTC: 57 cycles, 57 complete with roots, 57 anchored in Bitcoin, 22 with a defect in the independent copy. Source bytes archived: 1,310 GB across 645,325 files as served. Stored gzipped as 539 GB, of which 94 GB is on the poller's disk and 445 GB exists only in cold object storage. Cadence holds, meaning a set served longer than nine hours: 7. Poller heartbeat coverage over the last 24 hours: 99.2%. This project exists because SpaceX publishes the feed openly.

764fb17cd429 first seen 2026-09-17 12:41 UTC, 11,123 files, the manifest was never captured432c8e818307 first seen 2026-09-17 04:32 UTC, 11,123 files, the manifest was never captured9bd8b8dd631f first seen 2026-09-16 20:40 UTC, 11,081 files, the manifest was never captureda020ad8e7512 first seen 2026-09-16 12:17 UTC, 11,124 files, the manifest was never captured480217a325b4 first seen 2026-09-16 04:35 UTC, 11,125 files, the manifest was never capturedf855253d23d5 first seen 2026-09-15 21:55 UTC, 15,686 files, the manifest was never captured5b65cceebd5d first seen 2026-09-15 12:58 UTC, 11,128 files, the manifest was never captureda567b5989bb3 first seen 2026-09-15 08:50 UTC, 11,128 files, the manifest was never captured6e4a932f6ce2 first seen 2026-09-14 22:53 UTC, 18,812 files, the manifest was never capturedb8e5f660a322 first seen 2026-09-14 12:28 UTC, 11,129 files, the manifest was never captured573ebbbc32b0 first seen 2026-09-14 04:26 UTC, 11,130 files, the manifest was never captured9b0d7e015e63 first seen 2026-09-13 20:14 UTC, 11,130 files, the manifest was never capturedbf78e9220854 first seen 2026-09-13 12:37 UTC, 11,130 files, the manifest was never capturedcb82167ca7de first seen 2026-09-13 04:33 UTC, 11,132 files, the manifest was never captured4315951240b7 first seen 2026-09-12 20:22 UTC, 11,132 files34e224670e92 first seen 2026-09-12 12:18 UTC, 11,132 filese733991c6cf7 first seen 2026-09-12 04:21 UTC, 11,132 filesff4c381634b2 first seen 2026-09-11 20:30 UTC, 11,132 filesfb35070bc8cc first seen 2026-09-11 12:26 UTC, 11,132 files037b70d571b4 first seen 2026-09-11 05:17 UTC, 11,132 files70952566cb20 first seen 2026-09-10 22:22 UTC, 11,133 files07dc41f19d80 first seen 2026-09-10 12:39 UTC, 11,134 files66a2835fd201 first seen 2026-09-10 04:41 UTC, 11,134 files11dcd35c2c44 first seen 2026-09-09 20:34 UTC, 11,134 files89a232495ad5 first seen 2026-09-09 12:23 UTC, 11,134 files0e700520864b first seen 2026-09-09 07:47 UTC, 11,134 files23a1332e6e3c first seen 2026-09-08 21:43 UTC, 11,135 files1e127b6ea098 first seen 2026-09-08 12:12 UTC, 11,135 files1b3b36972d57 first seen 2026-09-08 04:16 UTC, 11,135 filesf5bbbcd6b2a8 first seen 2026-09-07 20:43 UTC, 11,135 files2935545a26e2 first seen 2026-09-07 12:33 UTC, 11,136 files4803b98c2e2c first seen 2026-09-07 04:40 UTC, 11,134 files, 1 of 10 sample captures were loste6c17386d359 first seen 2026-09-06 20:29 UTC, 11,136 filesd475086e7ca5 first seen 2026-09-06 12:27 UTC, 11,112 files035065e7ec46 first seen 2026-09-06 04:22 UTC, 11,113 files8c1b1c3f5d69 first seen 2026-09-05 20:29 UTC, 11,113 filesa68f33d2d2f7 first seen 2026-09-05 12:29 UTC, 11,114 files729590130225 first seen 2026-09-05 04:46 UTC, 11,114 files5ccb4ed5d13a first seen 2026-09-04 21:54 UTC, 11,115 files03329cf37459 first seen 2026-09-04 13:04 UTC, 11,116 files500ae4c3a713 first seen 2026-09-04 06:08 UTC, 11,114 filesf842b22c4167 first seen 2026-09-04 02:10 UTC, 11,116 filesa39dfdfee0fd first seen 2026-09-03 12:09 UTC, 11,117 files1e726fe006d9 first seen 2026-09-03 04:13 UTC, 11,118 filesb37c74c03907 first seen 2026-09-02 22:54 UTC, 10,682 files3572d8775913 first seen 2026-09-02 20:15 UTC, 11,118 filesf5112bb77a2a first seen 2026-09-02 12:08 UTC, 11,092 files0a85a65d5dbe first seen 2026-09-02 04:12 UTC, 11,093 files, the archived manifest copy is another cycle's file51d5c047650a first seen 2026-09-01 23:24 UTC, 10,902 files7414ea02eac1 first seen 2026-09-01 20:09 UTC, 11,093 files, the archived manifest copy is another cycle's file7be3c2c6fc2c first seen 2026-09-01 12:26 UTC, 11,094 filesd03dc522da18 first seen 2026-09-01 02:22 UTC, 11,093 files, 6 of 10 sample captures were lost513b92c4683e first seen 2026-08-31 20:22 UTC, 10,481 files, the manifest was never captured1d424255c9ae first seen 2026-08-31 11:44 UTC, 8,568 files5e4faf0f4e4e first seen 2026-08-31 04:09 UTC, 9,353 files, no independent copy was made92e6892c0f3e first seen 2026-08-30 20:02 UTC, 9,111 files, no independent copy was made72bcd7796b49 first seen 2026-08-30 13:32 UTC, 17,861 files, no independent copy was made01 Sep03 Sep05 Sep07 Sep09 Sep11 Sep13 Sep15 Sep17 Sep
The last 30 days, one block per cycle on a time axis. Green is complete and independently copied, grey is complete with the copy still pending, amber is complete but the independent copy failed, red is an incomplete pull, and a hollow block is a pull still running. Gaps in the spacing are the feed's own cadence. Each block links to its row. As of 2026-09-17 20:20 UTC.

Check it yourself

None of this is worth anything if you have to take my word for it. Three things you can run right now, for cycle 4315951240b7:

  1. Fetch the independent copy of the file list and hash it. SHA-256 4315951240b7eef30a5a4ed23330ad22882981a26721b0db6baccdab8302d0d2.
  2. Recompute which ten files were copied: int(sha256(root + ":" + k), 16) mod n for k from 0 to 9.
  3. Run ots verify root.txt.ots against a Bitcoin node: this root is in block 966725.

The full procedure, and what still needs the data release.

Data, licence and citation

ledger.json carries every cycle, its root, its attestation, its witness state and every scored summary, as the JSON the pages are built from. The globe's per-cycle pack is at the newest cycle's pack (5.2 MB). The full per-comparison rows, about 140,000 per cycle, are available on request.

Code is MIT and the repository is public, including the propagation and the scoring behind every figure here. Figures derived by this project are intended for CC BY 4.0. The raw SpaceX files carry no stated licence; a written request went to SpaceX on 31 August 2026 and is unanswered as of this build. Licence and citation in full.

Not here yet

18 days of archive is not a long record, and this page should not pretend otherwise. What is not running: