Syzygy + aeon: planetary alignments across 30,000 years.
Try it in your browser, nothing to install: https://carbaior.github.io/syzygeon/
Finds the dates of tightest grouping of the planets over the whole span of the JPL DE441 ephemeris (13,200 BC to AD 17,191), and lets you browse them in a web page with a diagram of the solar system, a timeline and traditional longitudes for each date.
| Point of view | Grouping | Amplitude |
|---|---|---|
| Seen from the Sun, along a line | bodies close to a line through the Sun, either side | width of the band holding them all |
| Seen from the Sun, one side | the Sun is one end | angle of the smallest sector, vertex at the Sun |
| Seen from the Earth, Sun included | the Sun and the bodies in one patch of sky (the Kali Yuga kind) | smallest arc of sky holding them |
| Seen from the Earth, Sun left out | planets bunched together in the night sky | smallest arc of sky holding them |
On the page these are two points of view, from the Sun or from the Earth, and an Include the Sun checkbox for the Earth view. Each can be combined with:
- the Moon (seen from the Sun it never strays more than 0.15° from the Earth, so there it hardly matters);
- naked-eye planets only (no Uranus, Neptune or Pluto);
- bodies allowed outside the group (any one or any two, whichever they are), offered while at least 5 planets stay in the group;
- true distance in the sky (seen from the Earth): the largest separation between any two bodies, latitude included, instead of longitude only;
- distance from the Sun (Sun left out): keep only groups far enough from the Sun to be seen at night;
- eclipses: every grouping records whether a solar or lunar eclipse happens within ±2 days.
Dates can be shown in TDB (the ephemeris time) or in civil time (UT) through ΔT, with its uncertainty, which reaches days at the ends of the range.
| Path | What it is |
|---|---|
alignments.py |
Computes the groupings from DE441 and keeps them in a resumable cache |
export_web.py |
Turns the cache into the compact dataset the web page reads |
docs/ |
The web viewer (static HTML/CSS/JS, served by GitHub Pages or locally) |
docs/data/ |
The exported dataset (generated, committed) |
docs/i18n/, docs/flags/ |
Translations of the page and the flags of the language menu |
tools/check_i18n.py |
Checks that the translations are complete and consistent |
LICENSE |
GNU General Public License v3 (code) |
pip install numpy jplephem
# download de441_part-1.bsp and de441_part-2.bsp from
# https://ssd.jpl.nasa.gov/ftp/eph/planets/bsp/ into this folder
python alignments.py # Ctrl+C to stop; run again to resume
python alignments.py --frame geo --moon --classical --time ut --top 50
python alignments.py --frame sky --moon --min-elongation 30
python alignments.py --frame helio --outliers 1
python alignments.py --help
The full range takes roughly 10–30 minutes, depending on the computer. The
cache (alignments_cache_*.npz, about 15 MB) holds every criterion at once,
so changing any option afterwards never recomputes anything. Only groupings
narrower than a cap per criterion are kept (90° for most, 60° for the line
through the Sun, tighter when bodies may be left out); wider ones are never
interesting.
pip install pyerfa
python export_web.py # needs the cache and the DE441 files
This writes docs/data/: one binary file per criterion plus manifest.json,
about 70 MB in all and up to ~5 MB per criterion. The page only downloads the
criterion being viewed. ERFA provides the long-term precession of Vondrák et
al. (2011), used for tropical and sidereal longitudes.
The page needs no server software beyond the one that comes with Python, so it can run on your own computer without internet and without GitHub.
-
Make sure
docs/data/holds the exported dataset (step 2 above). -
From the repository folder, start Python's built-in web server:
python -m http.server 8000 --directory docsOn Windows use
pyinstead ofpythonifpythonis not found; on some Linux and macOS systems it ispython3. -
Open http://localhost:8000 in a browser.
-
Stop the server with Ctrl+C in that terminal.
To use another port, change 8000 in the command and in the address. To open
the page from other devices on your network (a tablet, say), add
--bind 0.0.0.0 and browse to http://<your-computer's-IP>:8000.
Opening index.html by double-clicking it does not work: browsers do not let a
page read its data files from disk, so it must be served over http://.
Without internet everything works except two things that live online: the Alegreya fonts, which fall back to the system's fonts, and the links to Stellarium Web.
- Every option is a control; the address bar keeps the settings and the selected date, so a link reproduces the same view.
- The timeline plots every stored grouping over time (tighter is higher). Click a dot to see that date; drag across it to zoom into those years; double-click to zoom back out.
- Selecting a row or a dot draws the configuration, centred on the Sun or the Earth, and lists each body's longitude in the orbital plane, in the tropical zodiac or in the sidereal zodiac (Lahiri ayanamsha).
- Every date and Julian Day has a button that copies it, and is a link that opens that moment in Stellarium Web, seen from a place on Earth where the group is overhead. Stellarium Web has no URL option for the atmosphere: press A there to switch it off and see the planets in daylight. The link converts the time with Stellarium's own ΔT model so it shows the same instant; far from the present its simpler planetary theory may place the planets somewhat differently from DE441.
- Export list as CSV saves the current list in the same format as the command-line program.
- Dark theme by default; the choice is remembered.
Famous groupings that Syzygeon finds. Amplitudes are from an independent check with ERFA's planetary theory; DE441 agrees to within a few tenths of a degree. Dates before 1582 are in the Julian calendar; in the year fields of the page, 1953 BC is written −1952.
| Date | What happened | Grouping | How to see it |
|---|---|---|---|
| 26–27 Feb 1953 BC | The tightest massing of the five naked-eye planets in millennia, linked in Chinese tradition to the founding of the Xia dynasty (Pankenier, Early China) | 5 planets within 4.2°, 27° from the Sun, visible at dusk | From the Earth; Include the Sun off; naked-eye planets only |
| 28–29 May 1059 BC | The "Mandate of Heaven" conjunction, tied to the fall of the Shang and rise of the Zhou (Lehigh University) | 5 planets within 6.4°, visible | From the Earth; Include the Sun off; naked-eye planets only |
| 18 Feb 3102 BC | Traditional start of the Kali Yuga, said to begin with all planets together (Wikipedia) | Sun, Moon and planets within about 40°: real but loose, ten times wider than 1953 BC; late Pisces in the Lahiri sidereal zodiac | From the Earth; Sun and Moon on; naked-eye planets; Sidereal longitudes |
| 16 Sep 1186 | The "Letter of Toledo" announced the end of the world for this conjunction in Libra (The Museum of Hoaxes) | 5 planets within 8.5°; with Sun and Moon 11.5°, beside the Sun and invisible | From the Earth, with or without the Sun |
| 19 Feb 1524 | Johannes Stöffler's predicted universal flood, with panic across Germany (Les Enluminures) | 5 planets within 10.5° in Pisces | From the Earth; Include the Sun off; naked-eye planets only |
| 4–5 Feb 1962 | Seven bodies together and a total solar eclipse the same day (Earth Magazine) | Sun, Moon and 5 planets within 16°; the page flags the eclipse | From the Earth; Sun and Moon on; naked-eye planets |
| 10 Mar 1982 | "The Jupiter Effect" predicted earthquakes from a planetary alignment (Wikipedia) | All 8 planets on one side of the Sun within 95°: far from a line | From the Sun; all on one side of the Sun |
| 5 May 2000 | Another doomsday alignment (NASA NSSDC) | Sun, Moon and 5 planets within 26°, but hidden in the Sun's glare | From the Earth; Sun and Moon on; naked-eye planets |
| 8 Sep 2040 | The best visible grouping of this century (B.A.S.) | 5 planets within 9.2°, 20° from the Sun, in the evening sky | From the Earth; Include the Sun off; naked-eye planets only |
Each date and Julian Day on the page opens that moment in Stellarium Web; press A there to switch the atmosphere off and see the planets by day.
The page is available in English, Spanish, Catalan, French, Italian, German,
Portuguese, Latvian, Russian, Japanese, Chinese and Hindi. It picks the visitor's
browser language, can be changed from the menu in the header, and remembers
the choice. #lang=xx in the address forces a language.
- Copy
docs/i18n/en.jsontodocs/i18n/<code>.json(an ISO 639-1 code such asko,ar,nl) and translate the texts. Keep every{placeholder}exactly as it is; you may move it within the sentence. Texts written as{"one": ..., "other": ...}are plural forms: use the forms your language needs (zero,one,two,few,many,other);otheris required. A few entries shape dates and sentences rather than words:date.format({d}day,{m}month number,{mon}short month name,{y}year),year.bcandyear.ad, andsep, the space between sentences (empty for Chinese and Japanese). - Add a flag as
docs/flags/<flag>.svg(any 3:2 SVG) unless one is already there. - Add the language to
docs/i18n/languages.json: its code, its name in its own language, the flag file name, a locale for numbers and month names (for exampleko-KR) and the writing direction (ltr, orrtlfor Arabic or Hebrew, whose layout has not been checked yet). - Run
python tools/check_i18n.py. It reports missing or unknown keys and placeholders that do not match English. Missing texts are not fatal: the page shows them in English.
The translations were written in one pass and would benefit from a review by native speakers, especially Japanese, Chinese, Hindi and Russian. The command line program and the CSV files stay in English.
- Grouping is measured on longitudes projected onto the invariable plane of the
solar system (
--plane eclipticuses the J2000 ecliptic instead), except with true distance in the sky. - Positions are geometric (no light time or aberration).
- ΔT: Espenak & Meeus polynomials for Morrison & Stephenson (2004), with the long-term parabola outside 500 BC–AD 2150; uncertainty after Morrison & Stephenson and Huber (2000).
- Lahiri ayanamsha: 23°15′00.658″ on 1956‑03‑21 (true; the mean value is used), with the sidereal origin kept fixed among the stars and projected onto each ecliptic of date. It gives 23.857° at J2000.
- Eclipses: a solar eclipse is flagged when the Moon's disc reaches the Sun's as seen from somewhere on Earth; a lunar one when the Moon reaches the Earth's umbra (or only the penumbra).
- Years are astronomical: year 0 is 1 BC, year −3101 is 3102 BC. Dates use the
Julian calendar before 15 October 1582 and the Gregorian one from then on,
unless
--calendarsays otherwise.
- Code (
alignments.py,export_web.py,tools/, and the web page indocs/): GNU General Public License, version 3 or (at your option) any later version. SeeLICENSE. You may use, study, change and share it; if you distribute a modified version, it must also be under the GPL with its source code available. - Exported data (
docs/data/): Creative Commons Attribution 4.0 (CC BY 4.0). Use it freely, crediting Syzygeon. Seedocs/data/LICENSE.md. - Translations (
docs/i18n/) and flags (docs/flags/) are part of the page and follow the code licence.
Third-party material: the JPL DE441 ephemeris (Park et al. 2021) is freely distributed by JPL and is not included here; the Alegreya and Alegreya Sans fonts (SIL Open Font License) are loaded from Google Fonts; the ΔT coefficients used for Stellarium links come from Stephenson, Morrison & Hohenkerk (2016, Proc. R. Soc. A 472:20160404).
Built by Carlos Baiget Orts in conversation with Claude (Anthropic).
Copyright (C) 2026 Carlos Baiget Orts asinfreedom@gmail.com.
