Skip to content

Hilal Vision — Scientific Methodology

Technical documentation for astronomers, researchers, and advanced users

Document version: 2.1 · Last updated: March 2026
Astronomy engine: astronomy-engine v2 (VSOP87 / ELP2000) by Don Cross


Table of Contents

  1. The Crescent Visibility Problem
  2. Yallop (1997) Criterion — q-value
  3. Odeh (2004) Criterion — V-value
  4. The Danjon Limit — Physical Visibility Boundary
  5. Atmospheric Refraction & Altitude Correction
  6. Three-Engine Hijri Calendar System
  7. Best-Time-to-Observe Algorithm
  8. Global Visibility Grid Computation
  9. ICOP Historical Archive
  10. Crowdsourced Sighting Reports — Validation Pipeline
  11. Data Export & Public API
  12. Accuracy & Known Limitations
  13. References

1. The Crescent Visibility Problem

The Islamic lunar calendar begins each month with the first visual sighting of the new crescent moon (hilāl) after astronomical conjunction (new moon). This is not merely a calendar question — it is a precision astronomy problem. Whether the crescent is visible from a specific location on a specific night depends on a conjunction of geometric, atmospheric, and physiological factors:

  • Geometry: The Moon must be sufficiently separated from the Sun (elongation > 7°, the Danjon limit) and high enough above the horizon at sunset (Arc of Vision, ARCV) to be theoretically visible.
  • Crescent width (W): The illuminated sliver must be wide enough to be resolved by the naked eye (typically W > 0.5 arcminutes).
  • Atmospheric conditions: Refraction, extinction, cloud cover, and sky brightness all affect practical observability.
  • Observer physiology: Naked-eye, binocular, and telescopic observations have different visibility thresholds.

Modern crescent visibility models — chiefly Yallop (1997) and Odeh (2004) — encode these factors into standardised visibility scores validated against hundreds of historical observations.

Coordinate System

All computations are performed in topocentric coordinates — positions as seen by an observer at a specific geographic location on Earth's surface — rather than geocentric coordinates (as seen from Earth's centre). This distinction is critical for the Moon, whose topocentric parallax can be up to ~1°, significantly affecting apparent altitude and elongation.

Input parameters at the moment of local sunset, for observer at latitude φ, longitude λ, elevation h:

ParameterSymbolUnitsDescription
Moon topocentric altitudeh_moondegreesApparent altitude corrected for refraction
Sun topocentric altitudeh_sundegreesApparent altitude corrected for refraction
Arc of VisionARCVdegreesh_moon − h_sun
Moon-Sun azimuth differenceDAZdegreesMoon azimuth − Sun azimuth
Lunar elongationεdegreesMoon-Sun angular separation
Moon's angular semi-diameterSDarcminutesarcsin(1737.4 / moonDist_km) × 60
Topocentric crescent widthWarcminutesSD × (1 − cos ε)

2. Yallop (1997) Criterion — q-value

Reference: Yallop, B.D. (1997). A Method for Predicting the First Sighting of the New Crescent Moon. HM Nautical Almanac Office Technical Note No. 69.

Background

B.D. Yallop at the Royal Greenwich Observatory developed a polynomial model trained on 295 historical crescent sighting records. The model captures the relationship between the Arc of Vision (ARCV) — the altitude difference between Moon and Sun at local sunset — and the topocentric crescent width (W), deriving a single visibility score, the q-value.

Crescent Width Calculation

The topocentric crescent width W is derived as follows:

SD = arcsin(1737.4 / moonDist_km) × 60          [arcminutes]
W  = SD × (1 − cos(elongation_degrees × π/180))  [arcminutes]

Where:

  • moonDist_km: geocentric distance to the Moon in kilometres
  • elongation_degrees: topocentric Moon-Sun angular separation

The crescent width W is highly sensitive to lunar distance: at perigee (~356,500 km), the Moon appears ~14% larger than at apogee (~406,700 km).

q-value Formula

The q-value is computed by comparing the observed ARCV against the theoretical minimum ARCV required for visibility at a given crescent width W:

q = (ARCV − ARCV_min(W)) / 10

Where:

ARCV_min(W) = 11.8371 − 6.3226·W + 0.7319·W² − 0.1018·W³

This is a polynomial fit to Yallop's original observation data.

Zone Classification

Zoneq-value RangeInterpretation
Aq ≥ +0.216Easily visible with the naked eye
B−0.014 ≤ q < +0.216Visible under perfect conditions
C−0.160 ≤ q < −0.014May need optical aid to locate crescent
D−0.232 ≤ q < −0.160Will need optical aid; naked-eye impossible
Eq < −0.232Not visible even with optical aid
FMoon below horizon at sunset (conjunction not yet passed, or Moon sets before Sun)

Zone F is determined geometrically: if h_moon ≤ 0° at local sunset, the crescent cannot be observed regardless of q-value.

Interpretation Note

The Yallop criterion was designed primarily for naked-eye observation. It was calibrated on a mixture of historical Babylonian, Islamic, and modern records. It performs well for Zones A and E (clear positives and negatives) but has higher uncertainty in the intermediate zones B–D, which is where regional variation and atmospheric conditions dominate.


3. Odeh (2004) Criterion — V-value

Reference: Odeh, M.S. (2004). New Criterion for Lunar Crescent Visibility. Experimental Astronomy, 18, 39–64.

Background

Mohammad Sh. Odeh at the International Astronomical Center refined the Yallop model using a substantially larger dataset: 737 crescent sighting observations gathered by the Islamic Crescents' Observation Project (ICOP), including modern CCD and telescopic sightings that Yallop's 1997 dataset did not include. This makes the Odeh criterion better calibrated for optical-aid sightings.

V-value Formula

V = ARCV − ARCV_min_odeh(W)

Where:

ARCV_min_odeh(W) = −0.1018·W³ + 0.7319·W² − 6.3226·W + 7.1651

Note: The polynomial coefficients are the same as Yallop's ARCV_min but with a different constant term (7.1651 vs. 11.8371), and the normalisation factor is removed — V is measured in degrees directly.

Zone Classification

ZoneV-value RangeObservation MethodInterpretation
AV ≥ +5.65Naked eyeEasily visible
B+2.00 ≤ V < +5.65Naked eyeVisible under perfect atmospheric conditions
C−0.96 ≤ V < +2.00Binoculars/telescopeOptical aid needed
DV < −0.96Not visible even with optical aid

Odeh vs. Yallop: Key Differences

AspectYallopOdeh
Training dataset295 historical records737 ICOP records (visual + CCD)
Telescope/CCD validityNot calibratedExplicitly calibrated
Outputq-value (dimensionless)V (degrees)
Zone scheme6 zones (A–F)4 zones (A–D, excluding moon-below-horizon)
Preferred useNaked-eye predictionOptical-aid prediction

Hilal Vision implements both criteria simultaneously, allowing users to compare outputs and select the criterion appropriate to their community's practice.


4. The Danjon Limit — Physical Visibility Boundary

Reference: Danjon, A. (1932). Jeunes et vieilles lunes. L'Astronomie, 46, 57–66.

French astronomer André Danjon observed that crescent visibility is physically impossible when the Moon-Sun elongation is less than approximately 7 degrees. At this elongation, the shadowed mountains on the lunar limb completely obscure the illuminated valleys, making the crescent discontinuous and invisible from Earth.

This is a hard physical limit, not a statistical one. Hilal Vision enforces the Danjon limit geometrically: if elongation < 7°, the crescent is classified as Zone E/F regardless of ARCV or q-value.

The exact Danjon limit has been debated in the literature, with values ranging from 5° to 9°. The consensus from modern CCD observations places it at 7.0°, which is the value implemented here.


5. Atmospheric Refraction & Altitude Correction

Standard Refraction Model

The apparent altitude of celestial objects near the horizon is increased by atmospheric refraction. Hilal Vision uses the Meeus/Bennett correction (Astronomical Algorithms, 2nd ed., Chapter 16):

R₀ = 1.02 / tan(h + 10.3 / (h + 5.11))   [arcminutes]

Where h is the apparent (refracted) altitude in degrees. This formula has an accuracy of ±0.07 arcminutes for h > 5°, degrading near the horizon.

Pressure & Temperature Correction

Standard conditions are P₀ = 1010 hPa, T₀ = 10°C. The correction for non-standard conditions is:

R = R₀ × (P / 1010) × (283 / (273 + T))

Where P is surface pressure in hPa and T is temperature in °C.

Users with Pro access can override P and T manually (useful for high-altitude observatories or unusually hot/cold conditions). The default web computation uses P = 1010 hPa, T = 10°C.

Observer Elevation & Horizon Dip

When an observer is at elevation h (metres above sea level), the geometric horizon is depressed by:

dip = 1.7615 × √h   [arcminutes]

This dip increases the effective ARCV, improving crescent visibility. The default web computation sets observer elevation to 0m (sea level). The Best-Time-to-Observe engine accounts for elevation when provided.

Atmospheric Extinction

At low altitudes, the Moon's brightness is reduced by atmospheric extinction. While the Yallop/Odeh models implicitly account for this in their polynomial fits, Hilal Vision does not apply an explicit extinction model beyond the Meeus refraction correction. Users in high-humidity or aerosol-rich environments may find predictions optimistic.


6. Three-Engine Hijri Calendar System

Hilal Vision implements three independent Hijri calendar algorithms simultaneously, allowing side-by-side comparison:

Engine 1 — Astronomical (Computed Crescent)

The astronomical calendar computes the expected crescent first-visibility date for each month using the Yallop criterion evaluated at a globally representative location (Mecca: 21.4225°N, 39.8262°E). A new Hijri month begins on the evening when q ≥ −0.014 (Zone A or B) at this location.

This engine represents the idealized astronomical calendar — what would happen if all Islamic communities accepted the computed crescent visibility for a fixed reference location. It closely approximates the OIC-supported global calendar proposal.

Engine 2 — Umm al-Qura (KACST)

The Umm al-Qura calendar is the official civil calendar of Saudi Arabia, maintained by the King Abdulaziz City for Science and Technology (KACST). It is a pre-computed tabular calendar based on:

  • Astronomical conjunction (new moon) occurring before sunset at Mecca
  • Moon setting after the sun at Mecca on the same evening

Crucially, it does not require the crescent to be physically visible. This is a calculated civil calendar, not an observation-based one.

Hilal Vision uses the @umalqura/core library, which provides pre-computed look-up tables accurate to ±0 days against the official Saudi published calendar.

Engine 3 — Tabular (Kuwaiti Algorithm)

The tabular calendar uses a 30-year intercalation cycle (7 leap years per cycle) based on the mean synodic month of 29 days, 12 hours, 44 minutes, and 3 seconds. This is the oldest and simplest Hijri calendar computation, used in historical Islamic astronomy manuscripts.

Hilal Vision implements the Kuwaiti variant of the tabular algorithm, which places leap days in years 2, 5, 7, 10, 13, 15, 18, 21, 24, 26, and 29 of each 30-year cycle.

Calendar Accuracy Comparison

CalendarBasisAccuracyAuthority
AstronomicalComputed crescent at Mecca±0 days (theoretical)OIC-proposed
Umm al-QuraConjunction + moonset at Mecca±0 days vs. Saudi officialSaudi Arabia
TabularMean synodic period intercalation±2 days (long-term drift)Historic/Academic

7. Best-Time-to-Observe Algorithm

The Best-Time-to-Observe (BTTO) engine computes the optimal observation window for crescent sighting on any given evening, considering:

  1. Moon altitude: h_moon must be positive (above horizon) and ideally > 5° (above atmospheric extinction)
  2. Sky darkness: The sky must be sufficiently dark — computed from solar altitude (sun must be below −12° for nautical twilight, the recommended threshold for naked-eye crescent observation)
  3. Observation window: The crescent must still be above the horizon during nautical twilight

Scoring Function

score(t) = moonAlt(t) × darknessFactor(t) × cloudFactor(t)

Where:

  • moonAlt(t): Moon altitude in degrees at time t (0° to ~20° for hilal)
  • darknessFactor(t): Sigmoid function of solar altitude, peaking at −12° (nautical twilight)
  • cloudFactor(t): 1 − (cloudCoverFraction), from Open-Meteo data

The optimal time t* maximises this score across the post-sunset window. The algorithm samples at 5-minute intervals between local sunset and moonset.

Horizon Dip Correction

When observer elevation is provided (Pro feature), the effective moonset time is adjusted by the horizon dip correction, extending the observation window.


8. Global Visibility Grid Computation

The global visibility maps compute Yallop/Odeh visibility zones at a regular grid of geographic points. Three resolution levels are available:

ResolutionPointsComputation TimeUse Case
8° × 8°~900~0.05sFast preview / mobile
4° × 4°~3,600~0.2sStandard display
2° × 2°~14,400~0.8sHigh-detail export

Computation Architecture

  • Grid computation is offloaded to a Web Worker thread to avoid blocking the UI
  • Results are cached per (date, hour-offset) tuple in browser IndexedDB
  • Each grid point evaluates: topocentric Moon/Sun positions → ARCV, W → q/V → zone classification
  • The sunset time at each grid point is computed independently, so the map represents a composite of local sunsets across the globe — not a simultaneous snapshot

Composite Sunset Interpretation

A critical point often misunderstood: the global visibility map does not show what the sky looks like at a single moment in time. It shows what the crescent visibility situation is at each location's own local sunset. Since the Earth rotates, local sunsets span a 24-hour period. The map is therefore a mosaic of visibility forecasts at each point's local sunset on the selected date.


9. ICOP Historical Archive

The Islamic Crescents' Observation Project (ICOP) was established in 1998 by the International Astronomical Center (IAC), Abu Dhabi. It is the largest continuously maintained database of physical crescent observation records in the world.

Hilal Vision's archive contains 1,000+ verified records spanning Hijri years 1438–1465 AH (approximately 2017–2043 CE), covering:

  • Geographic coverage: 150+ countries, 500+ cities
  • Observation types: Naked eye, binoculars, telescope, CCD
  • Data fields: Sighting date, observer location (lat/lng), outcome (seen / not seen / uncertain), instrument used, observer experience level, atmospheric conditions

Data Attribution

All ICOP data is used with explicit attribution to the International Astronomical Center. Data is reproduced for educational and research purposes in accordance with ICOP's stated policy of public availability for scientific use.

Theoretical Computed Cities

In addition to ICOP observations, the archive displays computed theoretical visibility for major cities using the Yallop criterion, allowing comparison between what was observed and what was theoretically predicted. Discrepancies illuminate the role of atmospheric and observational factors.


10. Crowdsourced Sighting Reports — Validation Pipeline

The live sighting reports feature (Sighting Feed) allows authenticated users to submit crescent sighting reports in real time. Reports undergo a multi-stage validation pipeline:

Validation Steps

  1. Zone F Rejection: Reports from locations where the Moon's altitude is ≤ 0° at local sunset are automatically flagged as implausible and not added to the public feed without administrative review.
  2. Danjon Limit Rejection: Reports submitted on nights with elongation < 5° are rejected automatically.
  3. Rate Limiting: Maximum 3 reports per authenticated user per night, to prevent spam and flooding.
  4. Atmospheric Enrichment: On submission, current cloud cover (Open-Meteo) and the computed Yallop q-value are automatically attached to each report.
  5. Account Age: Reports from accounts < 24 hours old are held for review before publication.

Data Use

Aggregated, anonymised sighting data may be used in future research on crescent visibility patterns. Individual user data is handled according to the Privacy Policy.


11. Data Export & Public API

Export Formats

  • CSV: Table of sighting records including date, location, q-value, ARCV, W, outcome
  • JSON: Structured object with full ephemeris data per record Available from the ICOP Archive and Sighting Feed views.

Public REST API (v1)

EndpointParametersReturns
GET /api/v1/visibilitylat, lng, date (ISO 8601)Zone A–F, q-value, ARCV, W, elongation, moonAlt, sunAlt
GET /api/v1/moon-phaseslat, lng, date (ISO 8601)Phase name, illumination %, lunar age (days), altitude, azimuth, rise/set times

Rate limit: 60 requests/minute for authenticated Pro users. The public API is subject to rate limiting and may be restricted for unauthenticated requests.


12. Accuracy & Known Limitations

Positional Accuracy

  • astronomy-engine (VSOP87/ELP2000) achieves sub-arcsecond accuracy for the Moon and Sun for dates within ±1000 years of J2000.0.
  • Topocentric corrections are applied for the observer's geodetic coordinates.
  • No gravitational relativistic corrections are applied (effect on lunar position: < 0.01 arcseconds).

Crescent Visibility Accuracy

  • The Yallop q-value correctly classifies ~90% of historical observations into the correct zone (A–F).
  • Intermediate zones (B, C, D) have higher uncertainty — atmospheric variability explains most misclassifications.
  • The Odeh criterion achieves ~95% agreement with ICOP observations for optical-aid sightings.

Known Limitations

  • Atmospheric variability: Clear-sky probability, seeing, and transparency are not modelled beyond cloud cover (Open-Meteo).
  • Horizon profile: Local topographic obstructions are not accounted for; the model assumes a flat horizon at sea level.
  • Default elevation: The web app computes at 0m elevation (sea level). Mountain observatories will have longer observation windows than predicted.
  • Sighting psychology: Human factors (observer experience, eye adaptation, horizon scanning technique) are not modelled.
  • Local time zones: Sunset times use the IANA timezone database; DST transitions are handled automatically.

13. References

  1. Yallop, B.D. (1997). A Method for Predicting the First Sighting of the New Crescent Moon. HM Nautical Almanac Office Technical Note No. 69, NAO, Royal Greenwich Observatory, Cambridge. PDF

  2. Odeh, M.S. (2004). New Criterion for Lunar Crescent Visibility. Experimental Astronomy, 18(1–3), 39–64. DOI: 10.1007/s10686-005-7614-4. ResearchGate

  3. Meeus, J. (1998). Astronomical Algorithms, 2nd Edition. Willmann-Bell, Inc., Richmond, Virginia. ISBN: 978-0943396613.

  4. Danjon, A. (1932). Jeunes et vieilles lunes. L'Astronomie, 46, 57–66.

  5. Cross, D. astronomy-engine — VSOP87/ELP2000 planetary position library for multiple languages. GitHub. MIT License.

  6. International Astronomical Center. Islamic Crescents' Observation Project (ICOP). Abu Dhabi, UAE. Website

  7. King Abdulaziz City for Science and Technology (KACST). Umm al-Qura Calendar. Riyadh, Saudi Arabia.

  8. Ilyas, M. (1994). Lunar crescent visibility criterion and Islamic calendar. Quarterly Journal of the Royal Astronomical Society, 35, 425–461.

  9. Schaefer, B.E. (1988). Visibility of the lunar crescent. Quarterly Journal of the Royal Astronomical Society, 29, 511–523.

  10. Bennett, G.G. (1982). The calculation of astronomical refraction in marine navigation. Journal of the Institute of Navigation, 35(4), 255–259.


About Hilal Vision · Privacy Policy · Terms of Service · Support