Hilal Visibility

Methodology

Every number on this site, and where it comes from. Nothing here is a ruling; it is a description of what the sky does and of how three published criteria read it.

What this page is

A crescent visibility prediction is two separate things bolted together: a calculation of where the sun and moon are, which is settled science to far better precision than anyone needs, and a judgement about whether a human eye can detect a thin crescent against a bright twilight sky, which is not settled at all. This page keeps them apart. The first part is stated exactly. For the second, the site does not pick a winner: it shows what each published criterion concludes and lets the disagreement be visible.

Where this site does something the source papers do not, it is flagged in a box like the ones below rather than folded quietly into a result.

Where the positions come from

Maps and archives are computed ahead of time in Python with Skyfield reading the JPL DE440s ephemeris. The per-location answers on My location are computed in your browser with astronomy‑engine. Both are far more accurate than crescent prediction can exploit — the two agree with each other to 0.2 seconds on sunset and 0.5 seconds on moonset across a spread of test sites. The uncertainty in a visibility forecast lives in the eye and the atmosphere, not in the orbit.

Rise and set are taken as the moment the body's centre passes a geometric altitude of −0.8333°, which folds in 34′ of standard refraction and 16′ of semidiameter. The same convention is used for both bodies and in both implementations.

Best time

A young crescent is never observed at sunset — the sky is far too bright — nor at moonset, when it is buried in horizon haze. There is an optimum in between, and following Bruin (1977) as adopted by Yallop, every criterion on this site is evaluated at that moment:

Tb=Ts+49(TmTs)T_b = T_s + \tfrac{4}{9}\,(T_m - T_s)

where Ts is sunset and Tm is moonset. The interval between them — the lag — is itself the oldest visibility indicator there is.

The four quantities

The view west at best time, drawn to scale — one degree is the same length in both directions, so the altitude axis calibrates all three separations. ARCL is the sun–moon separation, ARCV the difference in altitude, measured to the sun rather than to the horizon, and DAZ the difference in azimuth. They form a right triangle, so only two are independent. The inset is the same moon magnified, at the same orientation — the cusps always point away from the sun. Its width is exaggerated: a marginal crescent is under 1′ across a 31′ disc, which at this scale would be a hairline.

The view west at best time, drawn to scale — one degree is the same length in both directions, so the altitude axis calibrates all three separations. ARCL is the sun–moon separation, ARCV the difference in altitude, measured to the sun rather than to the horizon, and DAZ the difference in azimuth. They form a right triangle, so only two are independent.

  • ARCL — arc of light, the sun–moon elongation. It sets how much of the disc is lit, so it governs the crescent's intrinsic brightness.
  • ARCV — arc of vision, the altitude difference. It governs how dark the background sky is when the crescent is at a given height.
  • DAZ — relative azimuth. The three are related by cosARCL=cosARCVcosDAZ\cos \mathrm{ARCL} = \cos \mathrm{ARCV}\,\cos \mathrm{DAZ}, so only two are independent.
  • W — the crescent's width at its thickest point, in arcminutes, from the semidiameter SD: W=SD(1cosARCL)W = SD\,(1 - \cos \mathrm{ARCL}).

Age — the time since conjunction — is deliberately not a criterion input here. As Odeh puts it, a 10-hour moon on the ecliptic is about as bright as a 0-hour moon 5° off it; age on its own has little predictive value.

Conventions are per-criterion

This is the single most important detail on the page, and the easiest to get wrong. A criterion is not just a formula — it is a formula, a set of fitted constants, and the convention under which its calibration data were reduced. Feed a fitted decision rule inputs measured a different way and you have miscalibrated it, however correct the arithmetic looks.

The difference is not academic. Lunar parallax is about 57′, so near the horizon the topocentric moon sits roughly 0.9° lower than the geocentric one. Dividing by ten, that shifts Yallop's q by 0.09 — about 40% of the width of an entire zone. So each criterion here is fed exactly what its own source specifies:

CriterionTakesEvaluated atSource
Yallop Geocentric ARCV and DAZ, with TN 69's topocentric width W′ best time TN 69 §2, eqs 3.8–3.10
Odeh Topocentric airless ARCV and topocentric W best time Odeh (2004) §5
SAAO Apparent altitude of the moon's lower limb, and DAZ sunset, not best time Caldwell & Laney (2001)

Yallop's width is not the same object as Odeh's. TN 69 builds it from the geocentric elongation and a semidiameter corrected for the observer's displacement:

SD=0.27245π,SD=SD(1+sinhsinπ),W=SD(1cosARCL)SD = 0.27245\,\pi, \qquad SD' = SD\,(1 + \sin h \sin \pi), \qquad W' = SD'\,(1 - \cos \mathrm{ARCL})

with π the lunar horizontal parallax and h the geocentric altitude of the moon. Everything the site displays to a reader — the hover readout, the numbers on the location page — is topocentric, because that is what an observer standing somewhere actually experiences.

The criteria

Yallop (1997) — the q test

Yallop fitted the Indian/Maunder relation as a cubic in width and calibrated the result against 295 observations spanning 1859–1996.

q=ARCV(11.83716.3226W+0.7319W20.1018W3)10q = \frac{\mathrm{ARCV} - \left(11.8371 - 6.3226\,W' + 0.7319\,W'^2 - 0.1018\,W'^3\right)}{10}
ZoneRangeMeaning
Aq > +0.216easily visible to the naked eye
B+0.216 ≥ q > −0.014visible under perfect conditions
C−0.014 ≥ q > −0.160may need optical aid to find, then visible to the eye
D−0.160 ≥ q > −0.232visible only with binoculars or a telescope
E−0.232 ≥ q > −0.293not visible; below the telescope limit
Fq ≤ −0.293not visible; below the Danjon limit

Odeh (2004) — the V test

Same cubic, refitted against a much larger and more modern set: 737 observations, roughly half of them from ICOP.

V=ARCV(7.16516.3226W+0.7319W20.1018W3)V = \mathrm{ARCV} - \left(7.1651 - 6.3226\,W + 0.7319\,W^2 - 0.1018\,W^3\right)
ZoneRangeMeaning
AV ≥ 5.65visible to the naked eye
B5.65 > V ≥ 2.00visible with optical aid; could be seen by the naked eye
C2.00 > V ≥ −0.96visible with optical aid only
DV < −0.96not visible

The letters are not interchangeable. Yallop's D means “binoculars or telescope only” — a sighting. Odeh's D means “not visible at all”. The two scales reuse letters for different things, so this site never shares one legend between criteria: switch the criterion and the legend, the hover readout and the narrative all change wording with it.

SAAO — Caldwell & Laney (2001)

A different shape of rule: instead of scoring a formula, it compares the apparent altitude of the moon's lower limb at sunset — DALT — against two limit curves tabulated in relative azimuth. Above DALT2, naked-eye visibility is likely; between the curves, optical aid may work and becomes steadily less likely; below DALT1, nothing will be seen even with aid. It defines three levels, not four, and has no B tier.

|DAZ|10°15°20°
DALT16.3°5.9°4.9°3.8°2.6°
DALT28.2°7.8°6.8°5.7°4.5°

Our interpolation, not theirs. The rule is published as five rows. Interpolating linearly between them puts a kink in the limit curve at every tabulated value, and another at DAZ = 0 because the curve is read at |DAZ| — and those kinks show up as visible dents in the zone boundary. We interpolate with a monotone cubic instead: it passes through all five published values exactly, is smooth in between, and cannot overshoot. A fitted quadratic was tried first, as Yallop did for Maunder's table, and rejected — unlike Maunder's, this table is not polynomial (a quadratic misses by 0.13°), and exactness at the published values matters more than a functional form we would have invented.

Shaukat — withdrawn pending calibration

The criterion behind moonsighting.com's maps was never published with a derivation. A reconstruction is implemented in the code but is not offered on the site: it is uncalibrated, and it is not monotone — its reference line lets zone A border zone C with no B between, so conditions would worsen discontinuously. It will return once it can be refitted against the digitised map archive. Until then, showing it would put an invented rule beside three published ones with no way for a reader to tell the difference.

Domain of validity

This gate is ours, not the source papers'. Every criterion here is an empirical fit to observations in which the crescent was above the horizon and higher than the sun — every record in Yallop's 295 and Odeh's 737 has ARCV > 0. Outside that domain the polynomials extrapolate into nonsense: a wide crescent with ARCV ≈ 0.7° scores Odeh V = 3.2, “visible with optical aid”, while the moon's centre sits below the horizon in the sun's afterglow. So where the moon is below the horizon at best time, or below the sun, the site reports the criterion's not-visible zone instead of its extrapolated score. The gate only ever demotes a verdict; it can never promote one.

Because it is ours, the maps now colour it separately. Three different rules can put a point in a not-visible zone — the criterion's own score, the Danjon elongation floor, and this gate — and drawn identically they are indistinguishable, which would credit Yallop or Odeh with our engineering. Each gets its own shade of the same red, deepening as the reason gets more fundamental, and the legend names it.

The Danjon limit

Below a certain elongation no crescent is seen at all, whatever the sky conditions: the illuminated limb is foreshortened towards the cusps until nothing detectable remains. Danjon put it near 7°; Odeh's database, the largest modern one, contains no sighting below 6.4°, and that is the value used here.

On the maps this appears as a dashed line, and where a zone boundary follows it the region beyond is hatched. That is worth explaining, because it produces a feature that looks like a drawing error and is not. Part of the not-visible boundary is set by the criterion's own threshold and part by the elongation floor. They are different curves with different slopes, so where they cross, the boundary has a genuine corner. On the evening of 13 August 2026, for instance, Odeh's V governs the edge north of about 8°N, the Danjon limit governs it through the tropics, and V takes over again south of about 42°S.

Yallop needs no such line: he folded the same physics into his scale as zone F. SAAO's rule is altitude-based and states no elongation floor, so none is drawn for it.

Impossibility

Two situations are not verdicts at all, because no criterion is consulted: the moon sets before the sun, so it is gone before the sky darkens; or the conjunction has not yet happened by sunset, so there is no new crescent in the sky to see. These are drawn in slate, deliberately outside the green-to-red ramp, since colouring them like a visibility result would imply a judgement that was never made. On an evening that is impossible everywhere the map says so in a note, because a map of one flat colour otherwise leaves the reader to infer why.

How the maps are drawn

Zones are computed on a 0.5° global grid, but the boundaries you see are not the outlines of those cells. A zone boundary is a level set of the criterion's own score — Yallop's edges are the curves q = 0.216, −0.014 and so on; Odeh's are V = 5.65, 2, −0.96; SAAO's are the DALT curves. Contouring the continuous score gives the true curve. Contouring a rasterised zone mask instead would interpolate every crossing to a cell midpoint and turn every oblique boundary into a staircase.

The regions are then composed with exact polygon arithmetic, highest precedence first, so the published polygons are disjoint — translucent fills would otherwise double-blend along every shared edge — and wound to the GeoJSON specification, which the map renderer relies on.

Maps are cut at ±66° latitude and at the date line. The date line cut is real, not a rendering seam: +180° and −180° are the same meridian but opposite sides of the boundary, so for a given local evening their circumstances differ by about a day of moon age.

The browser kernel

The My location page runs a second, independent implementation of everything above, in JavaScript, in a Web Worker. Your coordinates are never transmitted: the city list and postal codes are bundled with the site, and there is no geocoding request, because a reader's keystrokes imply their location.

Two implementations of the same physics drift unless something holds them together. The Python kernel emits golden fixtures at twelve sites across eight evenings — 96 cases covering every zone, plus impossibility and polar day — and the browser build fails if it does not reproduce them.

Validation

Three independent checks, all of which run in the test suite:

  • Against a published observation. Odeh's Table VI record No. 514 — Sarajevo, 12 February 2002, crescent not seen — is one of the 737 the criterion was fitted to. This kernel reproduces his published values: ARCV 0.66 against 0.70, ARCL 5.77 against 5.80, DAZ 5.73 against 5.70, lag 4.02 against 4 minutes, V −6.04 against −5.96, and classifies it zone D. The residuals track his use of different software and a 630 m site elevation this kernel does not model.
  • Against the published formulae. Yallop's q is pinned to two worked examples from TN 69 Table 4; Odeh's zone boundaries to all nine rows of his Table V; the SAAO limits to all five columns of Table IV.
  • Against the maps this community already uses. For Rabi al-Awwal 1448, moonsighting.com states: nothing visible on 12 August, “most of Africa and Americas” on the 13th, the whole world on the 14th. Our maps say the same for each of those evenings, using a different criterion and an independent calculation.

A systematic validation — every criterion scored against a full observation database, with confusion matrices and reliability by zone — is the next milestone, and its results will be published here whether or not they are flattering.

What this does not model

  • Weather. Nothing here knows about cloud, dust or haze. A green zone is a statement about geometry and brightness, not a promise.
  • Elevation. All calculations assume sea level. An observer on a mountain sees a slightly depressed horizon and does marginally better than the map says.
  • Atmospheric extinction is not modelled explicitly; it is baked into the empirical constants of criteria fitted mostly at low-altitude sites.
  • The observer. Acuity, dark adaptation, and knowing exactly where to look vary enormously between people, and the difference between an expert and a novice can exceed the difference between two criteria.
  • Optical aid is treated as the source papers treat it — a category, not a specification of aperture.

Reproducing this

The compute kernel is open and the maps are deterministic: same inputs, same output, byte for byte. The criteria live in one file of a few hundred lines, with the scalar implementations as the single source of truth and the vectorised versions property-tested against them on a thousand random parameter sets. If you think a constant or a convention is wrong, that file is where to look, and a failing test is the most useful bug report.

References

  • Yallop, B. D. (1997). A Method for Predicting the First Sighting of the New Crescent Moon. NAO Technical Note No. 69, HM Nautical Almanac Office. The q-test, its zone boundaries, the best-time rule, and the definition of ARCV as a geocentric quantity. Table 4 lists 295 observations with worked q values; two of them pin our implementation.
  • Odeh, M. Sh. (2004). New Criterion for Lunar Crescent Visibility. Experimental Astronomy 18, 39–64. The V-test, fitted to 737 observations, about half of them from ICOP. Source of the empirical Danjon limit of 6.4° and of the SAAO table reproduced as its Table IV. Record No. 514 is our end-to-end check.
  • Caldwell, J. A. R. & Laney, C. D. (2001). First Visibility of the Lunar Crescent. African Skies 5, 15. The SAAO DALT criterion: the moon's apparent lower-limb altitude at sunset against two limit curves in relative azimuth.
  • Alrefay, T., Alsaab, S., Alshehri, F., Alghamdi, A., Hadadi, A., Alotaibi, M., Almutari, K. & Mubarki, Y. (2018). Analysis of observations of earliest visibility of the lunar crescent. The Observatory 138, 267–291. The out-of-sample test set: 27 years of observations by professional and trained astronomers at the National Center for Astronomy, KACST, made under clear skies. Clear skies are what make its non-sightings usable — an ordinary negative report cannot distinguish an invisible crescent from a cloud.
  • Cross, E., Power, N. & Alexander, E. (2024). mphys-moon: machine-readable transcriptions of crescent sighting datasets. University of Manchester, MIT licence, commit 84f75ca. Where our two observation files come from, verbatim: Yallop's Table 4 and Alrefay's campaign, transcribed to CSV. We use only the transcriptions of published papers, not the repository's direct scrape of the ICOP website.
  • Bruin, F. (1977). The First Visibility of the Lunar Crescent. Vistas in Astronomy 21, 331–358. The origin of the best-time rule: the optimum moment to look is four-ninths of the way from sunset to moonset.
  • Danjon, A. (1932, 1936). Le croissant lunaire / Jeunes et vieilles lunes. L'Astronomie 46, 57–66; 50, 57–65. The elongation below which no crescent is seen at all, because the illuminated limb is foreshortened away near the cusps.
  • Park, R. S. et al. (2021). The JPL Planetary and Lunar Ephemerides DE440 and DE441. The Astronomical Journal 161, 105. The ephemeris behind every position on this site. Its accuracy exceeds what crescent prediction can use by orders of magnitude — the uncertainty here is in the eye, not the orbit.
  • Rhodes, B.. Skyfield: high precision research-grade positions. Python package.
  • Cross, D.. Astronomy Engine. MIT-licensed ephemeris library, used in the browser.
  • GeoNames. cities5000 and postal code datasets. CC BY 4.0.
  • Natural Earth. 1:110m land, country boundaries. Public domain.
  • Shaukat, K. — Moonsighting Committee Worldwide. moonsighting.com. Monthly visibility maps and crowd-sourced sighting reports since the 1990s. The archive this project measures itself against, and the source of the colour language used on our maps.
  • Islamic Crescents' Observation Project (ICOP). astronomycenter.net. Observation database behind Odeh (2004).
  • al-Bukhārī, Ṣaḥīḥ. Ḥadīth 1909 (and Muslim 1081). “Fast when you see it and break your fast when you see it; if it is obscured from you, complete thirty.”.
  • Muslim, Ṣaḥīḥ. Ḥadīth 1087 — the report of Kurayb. Ramadan began a day apart in Syria and Medina; Ibn ʿAbbās held each place to its own sighting.
  • van Gent, R. H.. The Umm al-Qura Calendar of Saudi Arabia. Utrecht University — documented rules and their revisions. Traces the calendar's astronomical rule through each revision, including the change that took effect with 1423 AH.
  • Fiqh Council of North America. Decision on astronomical calculation (2006) and current announcements. fiqhcouncil.org.
  • European Council for Fatwa and Research. Statements on determining the beginning of the months. e-cfr.org.