Which day,
here,
and why.

An engine and a versioned book of rulings for the Hindu calendar. Every date arrives with the sky it was read from, the rule that decided it, and the authorities that say otherwise.

Budhavāra · Wed 11 November 2026 · 09:39:52 UTC+05:30

Kārtika Śukla Dvitīyā

until 15:54 · nakṣatra Anurādhā · yoga Atigaṇḍa · karaṇa Kaulava

Sun 35.2° above SE
7 ghaṭī 34 pala since sunrise
Samrāṭ yantra built for 23°11′ N

Drag the scale to move the day. Drag the instrument to walk around it.
Sunrise 06:38Sunset 17:43Sunrise 30:39
09:40
Dvitīyāat sunrise
Tṛtīyāfrom 15:54

The problem, drawn

Amāvasyā ended once.
Twelve cities were at twelve different hours of their day.

The new-moon tithi of Diwali 2025 ended at 12:25 UTC on 21 October. The rule for Lakṣmī Pūjā asks one question of each place: was it still present after sunset? Jersey City had kept the night before. Delhi had ten minutes of it. Sydney had the whole evening.

  1. Los Angeles05:25Tue 21 OctNight
    103 min · 0 min20 Oct
  2. Chicago07:25Tue 21 OctSun 2° ESE
    105 min · 0 min20 Oct
  3. Jersey City08:25Tue 21 OctSun 12° ESE
    105 min · 0 min20 Oct
  4. Port of Spain08:25Tue 21 OctSun 35° ESE
    97 min · 0 min20 Oct
  5. London13:25Tue 21 OctSun 27° S
    109 min · 0 min20 Oct
  6. Durban14:25Tue 21 OctSun 47° WNW
    88 min · 0 min20 Oct
  7. Dubai16:25Tue 21 OctSun 17° WSW
    100 min · 0 min20 Oct
  8. Delhi17:55Tue 21 OctDusk, 3° below
    101 min · 10 min20 Oct
  9. Kolkata17:55Tue 21 OctNight
    100 min · 49 min20 Oct
  10. Singapore20:25Tue 21 OctNight
    95 min · 94 min20 Oct
  11. Sydney23:25Tue 21 OctNight
    0 min · 87 min21 Oct
  12. Suva00:25Wed 22 OctNight
    0 min · 91 min21 Oct

The rule that reads it

Lakṣmī Pūjā falls on the evening when Amāvasyā prevails during pradoṣa, the two muhūrtas after sunset. If both qualify the text is silent: the longer is ruled, as a boundary. CRC 1955, General Rules for Religious Festivals, as profile pac-rp@2026.1.

  • Determinate: computed, clear of every threshold
  • Boundary: within five minutes of a threshold, or the rule is silent.
  • Decreed: an institution ruled, and is quoted with its source
  • Minutes of pradoṣa that Amāvasyā covers, on the evening of the 20th and of the 21st

Principle 1

A fact is found.
A ruling is decided.

Fact · AngaInterval

Amāvasyā
20 Oct 2025 10:15:27 → 21 Oct 2025 12:25:10 UTC

The root of a monotonic function, bracketed and solved to the second under a declared method. It is the same instant in every city and for every tradition. Nobody is asked for an opinion.

Produced by
engine layers L0 to L5
Changes when
the method profile changes
Set in
plain type, tabular figures, UTC shown

Ruling · Ruling

Lakṣmī Pūjā
Monday 20 October, Delhi

A rule, a tradition and a profile applied to the facts, with every step written out so that a person or an agent can quote it. Another authority may rule otherwise. When one does, it is listed beside the answer, never under it.

Produced by
the resolver, from a cited rule
Changes when
the place, tradition or ruleset changes
Set in
flared type: cut in stone, by someone

Machine surfaces

The website is the smallest thing it does.

One canonical address per place and day, served as a page, JSON, Markdown or a calendar file from the same resource. An MCP server with five tools. No key, no account, and the method echoed in every response.

RESTKeyless. Open CORS, no account./v1/day/{place}/{date}
Negotiated pageHTML, JSON, Markdown, ICS/{place}/{date}
MCPStreamable HTTP, five tools/mcp
Calendar feedsFestivals, ekādaśī, tithi/{place}/calendar/festivals.ics
ManifestsProfiles and the ruleset, as data/v1/methods · rules
DescriptionsOpenAPI 3.1, and llms.txt for a model/openapi.json · /llms.txt
PackagesEngine, rules, places. Not yet published.soon
$ curl -H 'Accept: application/json' \
    https://ahargana.org/delhi/festivals/2025/diwali-lakshmi-puja

{
  "id": "/delhi/festivals/2025",
  "place": {
    "id": "1273294",
    "slug": "delhi",
    "name": "Delhi",
    "region": "India",
    "country": "IN",
    "lat": 28.65195,
    "lon": 77.23149,
    "elevation_m": 227,
    "tz": "Asia/Kolkata"
  },
  "year": 2025,
  "tradition": "smarta",
  "method": "pac-rp@2026.1",
  "ruleset": "2026.3-draft",
  "rulings": [
    {
      "id": "/delhi/festivals/2025/diwali-lakshmi-puja",
      "festival": "diwali-lakshmi-puja",
      "name": "Lakṣmī Pūjā",
      "tradition": "smarta",
      "place": "1273294",
      "year": 2025,
      "local_date": "2025-10-20",
      "confidence": "boundary",
      "boundary_reasons": [
        "tie-break-unstated"
      ],
      "boundary_margin_s": 601,
      "anga": {
        "type": "tithi",
        "index": 29,
        "key": "amavasya",
        "name": "Amāvasyā",
        "start": {
          "local": "2025-10-20T15:45:27+05:30",
          "utc": "2025-10-20T10:15:27Z",
          "ms": 1760955327081.2507
        },
        "end": {
          "local": "2025-10-21T17:55:10+05:30",
          "utc": "2025-10-21T12:25:10Z",
          "ms": 1761049510434.19
        },
        "month": {
          "amanta": 6,
          "purnimanta": 7,
          "adhika": false,
          "amanta_name": "Āśvina",
          "purnimanta_name": "Kārtika"
        }
      },
      "span": {
        "of": "tithi",
        "start": {
          "local": "2025-10-20T15:45:27+05:30",
          "utc": "2025-10-20T10:15:27Z",
          "ms": 1760955327081.2507
        },
        "end": {
          "local": "2025-10-21T17:55:10+05:30",
          "utc": "2025-10-21T12:25:10Z",
          "ms": 1761049510434.19
        }
      },
      "kaala": "pradosha",
      "days": [
        {
          "local_date": "2025-10-20",
          "window": {
            "start": {
              "local": "2025-10-20T17:46:08+05:30",
              "utc": "2025-10-20T12:16:08Z",
              "ms": 1760962567859.264
            },
            "end": {
              "local": "2025-10-20T19:27:26+05:30",
              "utc": "2025-10-20T13:57:26Z",
              "ms": 1760968645624.3972
            }
          },
          "covered_min": 101,
          "window_min": 101,
          "qualifies": true
        },
        {
          "local_date": "2025-10-21",
          "window": {
            "start": {
              "local": "2025-10-21T17:45:10+05:30",
              "utc": "2025-10-21T12:15:10Z",
              "ms": 1761048909912.453
            },
            "end": {
              "local": "2025-10-21T19:26:41+05:30",
              "utc": "2025-10-21T13:56:41Z",
              "ms": 1761055000579.7822
            }
          },
          "covered_min": 10,
          "window_min": 102,
          "qualifies": true
        }
      ],
      "decided_by": "greater-coverage",
      "explanation": [
        {
          "step": "anga",
          "text": "Amāvasyā runs from 15:45 on Mon 20 Oct to 17:55 on Tue 21 Oct.",
          "fact": "2025-10-20T10:15:27Z → 2025-10-21T12:25:10Z"
        },
        {
          "step": "kaala",
          "text": "Pradoṣa is 2 muhūrtas after sunset: 17:46–19:27 on the 20th, 17:45–19:27 on the 21st.",
          "fact": "pradosha: night-muhurta-1-2 · sunrise and sunset: upper limb, 31′ + 16′"
        },
        {
          "step": "rule",
          "text": "Amāvasyā must be present during pradoṣa. It covers 101 of 101 minutes on the 20th and 10 of 102 on the 21st.",
          "fact": "Calendar Reform Committee 1955, General Rules for Religious Festivals, p. 104"
        },
        {
          "step": "tie_break",
          "text": "Both evenings qualify and the rule marks neither. The one covered longer is ruled, as a boundary.",
          "fact": "priority: unstated → greater-coverage · margin 601 s"
        },
        {
          "step": "ruling",
          "text": "Lakṣmī Pūjā, Delhi, 2025: Monday 20 October.",
          "fact": "confidence: boundary (tie-break-unstated)"
        }
      ],
      "rule": {
        "kind": "lunar",
        "id": "diwali-lakshmi-puja",
        "references": [
          {
            "text": "Calendar Reform Committee 1955, General Rules for Religious Festivals",
            "locator": "p. 104",
            "url": "https://archive.org/details/calendar_reform_comittee_report",
            "quote": "K 30 Kali puja (nisithavyapini), Dipavali or Diwali (pradosa), Mahalaksmipuja (pradosa)"
          }
        ],
        "kaala": "pradosha",
        "priority": "unstated",
        "when_absent": "unstated"
      },
      "alternatives": [
        {
          "kind": "profile",
          "profile": "classical@2026.1",
          "local_date": "2025-10-20",
          "confidence": "boundary"
        },
        {
          "kind": "profile",
          "profile": "compat-drikpanchang@2026.1",
          "local_date": "2025-10-20",
          "confidence": "boundary"
        },
        {
          "kind": "institution",
          "institution": {
            "id": "nse",
            "name": "National Stock Exchange"
          },
          "local_dates": [
            "2025-10-21"
          ],
          "statement": "Muhūrat trading, circular of 22 Sep 2025",
          "source_url": "https://www.business-standard.com/markets/news/nse-to-hold-one-hour-diwali-muhurat-trading-session-on-october-21-125092200907_1.html",
          "captured_at": "2026-09-11"
        },
        {
          "kind": "institution",
          "institution": {
            "id": "google-calendar-in",
            "name": "Google Calendar"
          },
          "local_dates": [
            "2025-10-20"
          ],
          "statement": "Holidays in India feed",
          "source_url": "https://calendar.google.com/calendar/ical/en.indian%23holiday%40group.v.calendar.google.com/public/basic.ics",
          "captured_at": "2026-09-11"
        },
        {
          "kind": "institution",
          "institution": {
            "id": "apple-icloud-in",
            "name": "Apple iCloud"
          },
          "local_dates": [
            "2025-10-20",
            "2025-10-21"
          ],
          "statement": "India Holidays feed, listed twice",
          "source_url": "https://calendars.icloud.com/holidays/in_en-in.ics",
          "captured_at": "2026-09-11"
        },
        {
          "kind": "institution",
          "institution": {
            "id": "rashtriya-panchang",
            "name": "Rashtriya Panchang"
          },
          "local_dates": [
            "2025-10-20"
          ],
          "statement": "Principal festivals, 2025-26",
          "source_url": "https://packolkata.imd.gov.in/rashtriya-panchang-english.php",
          "captured_at": "2026-11-10"
        }
      ],
      "quote": "In Delhi, Lakṣmī Pūjā (Diwali) 2025 falls on Monday 20 October. Amāvasyā runs from 15:45 on Mon 20 Oct to 17:55 on Tue 21 Oct and covers all of pradoṣa that evening. It also reaches the next evening for 10 minutes; the rule does not say which to take, and the one covered longer is ruled: treat the date as contested. National Stock Exchange recorded 21 October (Muhūrat trading, circular of 22 Sep 2025). Apple iCloud recorded 20 October and 21 October (India Holidays feed, listed twice).",
      "cite": "https://ahargana.org/delhi/festivals/2025/diwali-lakshmi-puja",
      "method": "pac-rp@2026.1",
      "engine": {
        "version": "0.1.0",
        "ruleset": "2026.3-draft",
        "kernel": "de440-1900-2100",
        "kernel_sha256": "7eef444f9e5bd8786b8b5b72e775ecc376991b953a6246ec7a49d2c37434ea74",
        "tzdata": "2026f"
      }
    }
  ],
  "engine": {
    "version": "0.1.0",
    "ruleset": "2026.3-draft",
    "kernel": "de440-1900-2100",
    "kernel_sha256": "7eef444f9e5bd8786b8b5b72e775ecc376991b953a6246ec7a49d2c37434ea74",
    "tzdata": "2026f"
  }
}

Same resource, same bytes for the same inputs. ETag is the hash of engine, ruleset, kernel and request.

Conformance

No claims.
A public diff.

Each profile is measured against the people who publish almanacs: the Positional Astronomy Centre, the Rashtriya Panchang, station sunrise tables, ISKCON’s calendar. Where an authority and the engine part ways, the difference stays in the table as a fixture.

Measured 10 November 2026 · engine 0.1.0

53 of 53 PAC values reproduced

The widest difference is 30 s, against a budget of sixty for print. See every row

QuantityBudgetChecked againstTier
Sun and Moon longitude≤ 0.05″ · 0.0070″JPL Horizons, 1900–2100, 120 instantsoracle
Tithi and karaṇa boundary≤ 60 s print · 30 sPAC daily page, 53 printed end-timesA
Nakṣatra and yoga boundary≤ 60 s printthe same PAC rowsA
Saṅkrānti instant≤ 30 s · 1 sSwiss Ephemeris, Lahiri mode 1oracle
Sunrise and sunset≤ 1 s · 0.1 sSwiss Ephemeris, same model; one PAC stationD
Festival dates, pac-rp100% · 162 of 181Rashtriya Panchang lists, 2022–27C
Vaiṣṇava dates, iskcon-gcal100%GCal 11, ten citiesC

A solid mark is measured in the last run, with the widest difference beside its budget. A hatched mark is measured and short of its budget. A ring is a budget whose fixtures are not built yet. A divergence, once found, stays in the table as a fixture and is never patched.