moonrime
A tool for reporting lunar occurences according to the Anglo Saxon conception of the Moon, as reported by Bede.
Introduces the idea of the sidereal month as the Mona alongside the Monaþ (synodic month), and Moon hue (lunar phase). The Mona is a personal invention of mine and is based out of an interpretation of the Nebra Sky Disc through the lens of a norse sidereal calendar proposed by Vaster Guðmundsson.
The positions come from PyMeeus, a Python port of the algorithms in Jean Meeus, Astronomical Algorithms, 2nd ed.
Output Example
Moonrime: Moon Reckoning
Now: 2026-10-22 21:54 UTC (Thu 22 Oct 17:54 EDT)
Hue
Waxing Gibbous — waxing
Elongation 138.30° Illuminated 87.4%
Mona
Mona 357 since J2000
Zero longitude: the Pleiades at Alcyone
59.9924° (J2000 ecliptic longitude)
Night 23 of 27.32 d [#############################_______] 287.447° / 360° (79.85%)
Opened (Moon crossed the zero) 2026-09-30 18:03 UTC (Wed 30 Sep 14:03 EDT)
Closes (next crossing) 2026-10-28 01:37 UTC (Tue 27 Oct 21:37 EDT)
Moon at the opening: Waning Gibbous, 19.6 d after conjunction, 80.2% lit
Moon now: 347.440° (J2000 ecliptic longitude)
Monaþ
Monaþ 331 since J2000
Night 12 of 29.68 d [##############______________________] 38.5%
☽ Níwe Móna (first sliver, opened) 2026-10-11 11:57 UTC (Sun 11 Oct 07:57 EDT)
○ Fylleð (full moon, the middle) 2026-10-26 04:11 UTC (Mon 26 Oct 00:11 EDT)
☾ Eald Móna (last sliver) 2026-11-08 10:07 UTC (Sun 08 Nov 05:07 EST)
● Déaðlíc Móna (dark, until it closes) 2026-11-10 04:14 UTC (Mon 09 Nov 23:14 EST)
Definitions
- Mona
- The Moon's run across the stars as seen from a celestial sphere such as that of Earth. Its position is measured as J2000 ecliptic longitude from a fixed zero point: By default Alcyone, the brightest star of the Pleiades. A Mona runs from one crossing of the zero point to the next, about 27.3 days.
- Monaþ
- The synodic month, reckoned (and in some ways computed) as Bede describes the Anglo-Saxon month. The Month opens with the first sliver of the waxing Moon, Níwe Móna (new moon), then waxes up to the full moon, Fylleð, that being the middle of the month, wanes into the last sliver of the moon, Eald Móna (old moon), and ends in the dark moon we call the new moon today, Déaðlíc Móna (deathly moon), which is until the next first sliver; it may take up to two nights to see the first sliver of the moon. The moon cycle takes about 29.5 days.
- Sliver
- The thinnest crescent that can be seen. The program takes it to come at an
elongation of 10° from the Sun (
SLIVER_ELONGATIONinmoonrime/hue.py), leaving a computed sliver within a day or so of an eye sighting. - Hue
- The Moon's appearance. Hue is the Old English word for appearance, used here for what Greek calls phasis, the source of "phase". It is the Moon's elongation from the Sun in ecliptic longitude, and the illuminated fraction of its disk.
- Mon Rim
- Each Mona and Monaþ is rimed (numbered) from J2000.0 (2000 January 1, 12h TT): month 0 is the first of its kind to open after it, and earlier months are negative. Monaþ 0 opens on 2000 January 7, so the Monaþ rim is the lunation number k of Meeus, counted from the conjunction of 2000 January 6.
Install
For now use a virtual environment:
python3 -m venv venv
venv/bin/pip install -e '.[dev]'
Leave out [dev] to install only what the program needs at runtime.
Use
venv/bin/python -m moonrime --tz America/New_York
venv/bin/python -m moonrime --at 2026-10-18T00:00Z --json
Simply running 'moonrime' will also work for the present moment.
Options:
--at: an ISO 8601 instant. Naive values and a trailingZmean UTC.--tz: the IANA time zone for local times.
Development
venv/bin/python -m pytest # tests, including cross-checks against PyEphem
venv/bin/ruff check . # lint
venv/bin/ruff format --check . # check formatting
venv/bin/mypy # type check (strict)
Only moonrime/ephemeris.py imports PyMeeus, and
moonrime/cli.py details system output and input.