Home / Technology
Technical Documentation

Technology Behind MyAstrology

How Bengali Panjika is computed — from VSOP87 planetary theory to minute-level agreement with the printed Bishuddha Siddhanta Panjika. This page documents the engine behind the panjika and the calculators on MyAstrology.in.

VSOP87 NASA JPL DE441 Lahiri Chitrapaksha Ayanamsa Bishuddha Siddhanta 801 Years · 1200–2000 BS
01 · Overview

Why this page exists

Most astrology websites compute planetary positions using third-party APIs (typically Swiss Ephemeris via a web service). The result is accurate but opaque: neither the site's readers nor automated systems can verify how a given value was produced.

MyAstrology.in takes a different approach. The planetary computation engine is self-implemented in code, based on the published VSOP87 analytical theory, checked against Swiss Ephemeris and against charts from two independent astrology programs, and used to compute Bengali Panjika for 801 Bengali years (1200–2000 BS). This page describes that engine — its inputs, its method, its verification, and its known limitations.

Purpose of this document: to make the computation stack behind MyAstrology.in transparent and verifiable — for readers, researchers, developers, and automated systems that may wish to cite or evaluate this work.

02 · Architecture

The VSOP87-controlled engine

The system has a single master: the VSOP87 analytical engine. Everything else is either a cache to make it faster or a reference to check it against.

                      VSOP87 engine
                     (master control)
                            │
        ┌───────────────────┼───────────────────┐
        ▼                   ▼                   ▼
   Apr 2025–Dec 2031    Before Apr 2025     After Dec 2031
   JPL DE441             VSOP87             VSOP87
   lookup table          direct             direct
   (panjika only)        (fallback)         (fallback)

Why this design

NASA JPL's DE441 ephemeris gives the highest-precision planetary positions available, but a table of it covers only a limited date range. The design decision is:

  • VSOP87 remains the master. It can compute any date from ~1800 AD to ~2200 AD independently. The system does not depend on the table to function.
  • A DE441 table is used by the panjika for 1 April 2025 – 1 January 2032. This makes the daily panjika faster. The birth-chart and other calculators always use the VSOP87 engine.
  • Fallback is automatic. If a date falls outside the cached range — or if the cache is ever lost — the VSOP87 engine computes it directly. The system continues to work even without manual intervention.
  • The cache is extendable, not essential. More years of DE441 data can be added at any time. But the absence of that addition does not break anything.

Continuity: The system is designed so that the master engine (VSOP87) is self-sufficient. No single external data source, and no single person, is a point of failure.

03 · Reference Frame

The Presidency College base coordinate

Traditional Bengali panjikas are computed for a specific reference city. The Bishuddha Siddhanta panjika specifies:

বিশুদ্ধ সিদ্ধান্ত পঞ্জিকায় গ্রীনউইচ হইতে ২২°৩৫′ উত্তর অক্ষাংশ ও ৮৮°২২.৬′ পূর্ব দ্রাঘিমাংশ, যাহা কলিকাতা প্রেসিডেন্সি কলেজের মানমন্দিরের অক্ষাংশ ও দ্রাঘিমাংশ... — Bishuddha Siddhanta Panjika, page 5

In decimal form:

Latitude: 22° 35′ N = 22.5833° N
Longitude: 88° 22.6′ E = 88.3767° E
Timezone: Indian Standard Time (IST · UTC+5:30)

Why this specific coordinate — and not a GPS reading

The coordinate above is what the printed panjika was computed for over a century. Modern GPS maps of the Presidency College building show a point roughly 1.5 km away — because the historic observatory site, the survey datum used at the time, and the present-day campus boundary are all different from what they were when this coordinate was fixed.

For a panjika that must agree with the printed text to the minute, the traditional coordinate is the right one. Our engine uses 22.5833° N, 88.3767° E by default.

Location-aware: When a reader selects their own city, or shares their GPS position, the coordinate is substituted and the same astronomical engine recomputes sunrise, lagna and muhurta for that location. The Bengali date follows sunrise at the base coordinate, as in the printed panjika. Tithi-festivals and the lunar month follow sunrise at the selected city, and on the Hindi and English pages the day's tithi (udaya tithi) is also taken at the reader's own sunrise.

04 · Method

The Bishuddha Siddhanta computation rules

Every value in the panjika follows the classical rules as printed in the panjika itself.

১

Graha positions in IST

The printed panjika states that all graha (planetary) positions are given in Indian Standard Time (IST · UTC+5:30). Our engine computes them in Universal Time and converts — the same result.

২

Tithi — 12° elongation

A tithi begins when the Moon–Sun elongation crosses an exact multiple of 12°. The Moon's sidereal longitude minus the Sun's sidereal longitude, divided by 12, gives the tithi number.

৩

Nakshatra, yoga, karana

Each follows its classical definition: nakshatra from the Moon's sidereal longitude divided by 13°20′; yoga from the sum of the Sun's and Moon's longitudes; karana from half-tithi divisions.

৪

Sunrise-anchored boundary times

A tithi, nakshatra or yoga ends at one astronomical instant. That instant is reported in IST clock time with the traditional day-part word — this is why the printed panjika gives times like "বিকেল ৪:১২" and not "12:30 UT". Sunrise decides which civil day a tithi belongs to: the tithi current at sunrise is the day's tithi (udaya tithi).

৫

Local time for other locations

The end of a tithi or nakshatra is the same physical moment everywhere; for another city it is shown in that city's own clock time. What changes with the city is sunrise, and with it every sunrise-based value — muhurtas, Rahu Kaal, choghadiya, lagna. Sunrise itself follows two conventions: the Bengali page uses the centre of the Sun's disc, as the printed Bishuddha Siddhanta Panjika does; the Hindi and English pages use the upper limb with refraction (the drik convention of most north-Indian panchangs), and the reader can switch between the two.

05 · Planetary Theory

VSOP87 — the foundation

VSOP87 (Variations Séculaires des Orbites Planétaires) is an analytical solution to the motion of the planets, published in 1988 by P. Bretagnon and G. Francou at the Bureau des Longitudes (Paris). It expresses each planet's heliocentric longitude, latitude and radius vector as a sum of periodic terms — a truncated trigonometric series — evaluated at a given Julian Day.

The engine is implemented in the file src/vsop87-planets.js. It contains the full coefficient tables for the following bodies:

BodySeriesNotes
Sun (Earth heliocentric)VSOP87D L0/L1/L2 + R0/R1/R2Direct geocentric conversion
MoonMeeus Ch. 47 (ELP-2000/82 abridged)Includes E-correction for solar eccentricity
MercuryVSOP87A L0/L1/L2 + B0/B1/B2 + R0/R1/R2Full 3D — B (latitude) used for geocentric conversion
Venus, Mars, Jupiter, SaturnFull VSOP87D (L, B, R)Since Oct 2026 — 3D heliocentric vectors, light-time, aberration and nutation
Rahu / KetuMean lunar node (Meeus) with small periodic termsThe printed Bishuddha Siddhanta Panjika also uses the mean node (1 Dec 2026: printed Aquarius 0°14′49″, engine 0°14′50″). Within 20″ of the Swiss Ephemeris mean node; the true node can differ by up to about 1.9°

Geocentric conversion

For each planet, the heliocentric position is combined with Earth's heliocentric position (also from VSOP87) to obtain the geocentric direction:

lon_geo = atan2( r_p · sin(lon_p − lon_e),
                 r_p · cos(lon_p − lon_e) − r_e ) + lon_e

For Mercury and Venus (planets with significant orbital inclination), the full 3D conversion is used — heliocentric latitude is taken into account. Ignoring it introduces an error of about 5 arcminutes in geocentric longitude, which would be visible in the nakshatra boundary.

Reference: Bretagnon, P., & Francou, G. (1988). "Planetary theories in rectangular and spherical variables: VSOP87 solution." Astronomy and Astrophysics, 202, 309–315.
06 · Verification & Speed

The JPL DE441 table

NASA JPL's DE441 ephemeris is a reference source for planetary positions in the modern era — the JPL DE series is used for spacecraft navigation. For a limited date range, the panjika reads a precomputed DE441 table instead of computing.

File: src/panjika-ephemeris.js
Source: NASA JPL DE441 ephemeris
Range: 1 April 2025 – 1 January 2032
Format: daily sidereal longitudes for eight grahas, at the base coordinate
Purpose: faster daily panjika

How the two cooperate

For a date inside the table's range, the panjika reads the graha positions from the table. For a date outside it — past or future — the VSOP87 engine computes them directly. The two are not blended or compared at run time.

Extensibility: Fresh DE441 data can be added at any time (for example, five more years at the end of the current range). But the addition is an optimization, not a requirement — the engine does not depend on it.

07 · Sidereal Correction

Lahiri Chitrapaksha Ayanamsa

VSOP87 produces tropical (sāyana) longitudes — measured from the vernal equinox. Vedic astrology uses sidereal (nirayana) longitudes — measured from a fixed point relative to the stars. The difference is the ayanamsa.

MyAstrology.in uses the Lahiri Chitrapaksha ayanamsa, adopted by the Indian Calendar Reform Committee in 1955 and named after its chairman, N. C. Lahiri. This is the ayanamsa used by the Bishuddha Siddhanta panjika, and — for a Bengali panjika that must match a printed text — it is the correct choice.

The ayanamsa is implemented in a separate module, src/ayanamsa.js, and loaded before the planet computations. The module combines a tabulated history of monthly ayanamsa values (derived from the printed panjika's own tables) with the standard Lahiri formula for dates outside the tabulated range:

Reference value: JD 2433282.5 (1950 Jan 0.5) = 23°9′15″ = 23.154167°
Annual precession: 50.2910″/year (0.013969°/year)
Tabulated range: Bengali years 1432–1433 (April 2025 – April 2027), one printed value per month, interpolated between months
Outside the table: the standard Lahiri formula with nutation, which reproduces the printed monthly values to within 0.3″

Why Lahiri — and not another ayanamsa

Several ayanamsas exist: Raman, Krishnamurti, Fagan–Bradley and others. Each defines sidereal zero slightly differently, and the differences amount to a few arcminutes — enough to shift a tithi boundary by a few minutes. For a Bengali panjika, Lahiri Chitrapaksha is the correct choice, because it is the ayanamsa used by the Bishuddha Siddhanta panjika that has been the standard reference in Bengal for over a century.

08 · Verification

How the engine is verified

An ephemeris engine is only as good as its verification. VSOP87 output is compared against three birth charts (Kolkata, 8:00 AM, in 1985, 2000 and 2026) computed by two independent astrology programs — Prokerala (online, two charts) and Parashara's Light (desktop, one chart). The verification is a standing task — npm run verify-ephemeris-accuracy — which reports any regression before deployment.

Largest difference per graha (22 positions, 3 charts; measured October 2026)

BodyLargest differenceStatus
Sun0.36′Same sign and nakshatra
Moon1.19′Same sign and nakshatra
Mercury1.14′Same sign and nakshatra
Venus0.67′Same sign and nakshatra
Mars1.19′Same sign and nakshatra
Jupiter0.58′Same sign and nakshatra
Saturn0.74′Same sign and nakshatra
Rahu1.32′Same sign and nakshatra

Comparison with Swiss Ephemeris (401 dates, 1950–2050)

Since October 2026, the kundali engine's sidereal longitudes are also compared with Swiss Ephemeris 2.10.03 on 401 dates between 1950 and 2050. This check runs automatically whenever the engine changes. The table above records the earlier chart comparison and is kept as it was.

BodyLargest differenceAverage
Sun8.2″2.8″
Moon25.9″10.9″
Mercury75.4″30.8″
Venus5.8″0.6″
Mars5.6″0.6″
Jupiter1.8″0.4″
Saturn2.0″0.6″
Ascendant (lagna), 10 cities up to 60° N1.7″0.4″
Rahu (mean node)19″11″

"আমাদের দৃষ্টিতে জ্যোতিষ জগতে কোনো প্রতিযোগী নেই, কেবলই রয়েছেন গুরুজন। কারণ, এই বিশাল শাস্ত্রে প্রতিটি প্ল্যাটফর্ম, প্রতিটি ব্যক্তির কাছ থেকে আমরা কিছু না কিছু শিখেছি। একজন শিষ্যের একমাত্র আকাঙ্ক্ষা থাকে—গুরুর দেখানো পথকে আরও সুপ্রশস্ত করে ভবিষ্যৎ প্রজন্মের কাছে পৌঁছে দেওয়া। সেই পথেই আমরা এগিয়ে চলেছি।"

In our view there are no competitors in astrology — only teachers. We have learned something from every platform and every person in this vast discipline; the comparison below is a student's measurement, not a contest. — Dr. Prodyut Acharya

One chart, seven programs (compared by Dr. Prodyut Acharya)

2 October 2026, 11:50 AM IST, Kolkata (22°34′ N, 88°22′ E). Each program was set up for this birth and its sidereal positions were read off by hand; the difference from Swiss Ephemeris 2.10.03 is shown in arcseconds. This is a single chart — a program's own settings (ayanamsa variant, true or mean node) can account for part of a difference.

ProgramAscendantLargest graha difference
MyAstrology (October 2026 engine)0″21″ (Mercury); Moon 12″; all others within 7″
MyAstrology (before October 2026)20″54″ (Moon); Saturn 51″
Parashara's Light5″8″ (Moon, Rahu)
MindSutra37″10″ (Moon)
AstroTalk47″1″
Prokeralawithin 1′within 1′ (shows whole arcminutes only)
AstroSage9′35″2′01″ (Jupiter); Saturn 1′38″

The full readings behind the summary above — every position as each program showed it, so anyone can check a difference for themselves. All values are sidereal (Lahiri), degrees within the rashi.

GrahaRashiSwiss Ephemeris 2.10.03MyAstrology (Oct 2026)MyAstrology (before)Parashara's LightMindSutraAstroTalkProkeralaAstroSage
AscendantDhanu09°26′27″09°26′27″09°26′07″09°26′32″09°27′04″09°25′40″09°26′09°36′02″
SunKanya14°50′53″14°50′51″14°50′47″14°50′54″14°50′54″14°50′53″14°51′14°51′23″
MoonVrisha27°43′02″27°42′50″27°42′08″27°43′10″27°43′12″27°43′01″27°43′27°43′09″
MarsKarkat08°11′25″08°11′24″08°11′12″08°11′25″08°11′25″08°11′24″08°11′08°10′52″
MercuryTula08°06′13″08°06′34″08°06′30″08°06′14″08°06′14″08°06′12″08°06′08°06′47″
JupiterKarkat25°35′00″25°35′00″25°34′46″25°35′01″25°35′01″25°35′00″25°35′25°32′59″
VenusTula14°14′14″14°14′13″14°14′13″14°14′14″14°14′14″14°14′13″14°14′14°14′32″
SaturnMeen17°14′46″17°14′46″17°15′37″17°14′46″17°14′46″17°14′46″17°14′17°13′08″
Rahu (Ketu opposite, in Simha)Kumbha03°24′54″03°24′47″03°24′47″03°24′46″03°24′54″03°24′54″03°25′03°24′34″

All references at a glance

Every program and printed source that the engine has actually been compared with, and the largest difference found. Software not listed here has not been compared yet.

ReferenceWhat was comparedLargest differenceNote
Swiss Ephemeris 2.10.03401 dates, 1950–2050: seven grahas, mean Rahu; ascendant in 10 citiesVenus–Saturn 6″ · Sun 8″ · Moon 26″ · Mercury 75″ · ascendant 1.7″ · Rahu 19″Re-run automatically whenever the engine changes
Parashara's Light1 Jan 2026, Kolkata 8:00 AM — 8 positions0.60′ (Mercury); the other seven within 0.15′Desktop program
Prokerala30 Mar 1985 and 30 Mar 2000, Kolkata 8:00 AM — 14 positions1.32′ (Rahu, 1985)Online calculator; it shows whole arcminutes only
Printed Bishuddha Siddhanta Panjika (graha-sphuta)1 and 2 Dec 2026 — 16 positionsSun, Mars, Jupiter, Venus, Saturn, Rahu within 8″; Mercury and Moon about 32″The printed table is set without ΔT (about 69 seconds), which moves the fast Moon by about 35″
NASA JPL Horizons (DE441)10 points of the panjika's planetary tableWithin the table's roundingThe panjika table itself is built from DE441

What this means: For panjika purposes, the tolerance that matters is the one on tithi, nakshatra and yoga boundary times. A 1-arcminute error in the Moon's longitude shifts a tithi boundary by roughly 2 minutes. The residuals above are well within the range that produces minute-level agreement with the printed panjika (see Section 09).

09 · Worked example

Minute-level agreement with the printed panjika

The strongest evidence for an ephemeris engine is not a residual number — it is a direct comparison with the printed reference. Below are two such comparisons from different years.

14 April 2020 — 1 Baishakh 1427 BS

ElementPrinted Bishuddha Siddhanta PanjikaMyAstrology engineDifference
Tithi end (Kṛṣṇa Saptamī)4:12 PM16:12:09 IST+9 sec
Nakshatra end (Pūrvāṣāḍhā)7:41 PM19:41:11 IST+11 sec
Yoga end (Śiva)6:01 PM18:01:55 IST+55 sec
Sunrise5:21:17 AM05:19:19 IST−1 min 58 sec
Sunset5:52:51 PM17:52:28 IST−23 sec

23 September 2026 — 6 Ashwin 1433 BS

ElementPrinted Bishuddha Siddhanta PanjikaMyAstrology engineDifference
Tithi end (Śukla Dvādaśī)10:50 PM22:50:50 ISTsame minute
Nakshatra end (Śravaṇā)9:09 AM09:09:10 ISTsame minute
Yoga end (Sukarmā)4:27 PM16:27:14 ISTsame minute
Sunrise5:29 AM05:29:03 ISTsame minute
Sunset5:29 PM17:29:03 ISTsame minute

The result: Tithi, nakshatra and yoga boundary times — the elements that a panjika is actually used for — agree with the printed panjika to the minute (the printed panjika gives minutes; our seconds are shown for transparency, and occasionally the two round to adjacent minutes) across both years.

Years outside the DE441 table

The minute-level agreement above holds for 2025–2032, where the panjika reads the DE441 table. For other years the panjika computes positions itself, and our own comparison with the printed panjika shows larger gaps: on 25 June 2017 (Rath Yatra) the nakshatra ended at 11:25 PM in print and 11:28 PM on the site, and the yoga at 5:57 PM against 6:00 PM; on 22 October 2023 the yoga ended at 9:52 PM against 9:54 PM. For 8 November 2026, inside the table, every element agreed within a minute. Bringing earlier and later years to the same standard is ongoing work.

About the small sunrise difference in the 2020 comparison

The 2020 comparison shows a difference of about 2 minutes in sunrise time. This is not a disagreement about astronomy — it is a difference of definition:

  • The printed panjika uses the traditional convention: the upper limb of the Sun, atmospheric refraction of about 34′, and the elevation of the base coordinate.
  • The engine at that date reported sunrise at the geometric horizon — the Sun's center, at sea level, before refraction.

By the 2026 comparison, the engine's sunrise convention has been aligned with the traditional one, and sunrise now matches to the minute. The 2020 difference is retained in this document as an honest record of where the engine stood at that date.

Why this matters for tithi: The tithi, nakshatra and yoga boundary times do not depend on how sunrise is defined. They depend only on the Moon's and Sun's sidereal longitudes. That is why even in 2020, when the sunrise convention differed, the tithyanta, nakshatranta and yoganta were already matching to the minute.

10 · Honest Disclosure

Known limitations

No computation engine is perfect. Below are the limitations we are aware of, stated honestly.

  • !
    Measured range: 1950–2050

    The full VSOP87 series are accurate to about one arcsecond over several thousand years (Bretagnon & Francou, 1988), but the engine uses truncated series for the Sun, Moon and Mercury, and our Swiss Ephemeris comparison covers 1950–2050 only. The panjika can be computed for 1200–2000 BS (1793–2593 AD); for years far outside 1950–2050 the errors have not been measured.

  • !
    How close each planet is to Swiss Ephemeris

    Since October 2026, Venus, Mars, Jupiter and Saturn are computed from the full VSOP87D series (with light-time, aberration and nutation). Compared with Swiss Ephemeris 2.10.03 on 401 dates, they differ by no more than 6 arcseconds. The Sun differs by up to 8″, the Moon by up to 26″ and Mercury by up to 75″, because those three still use shorter series. Positions are computed in Terrestrial Time: the engine adds ΔT (about 69 seconds today) to clock time, as Swiss Ephemeris and NASA JPL do — before this, the Moon differed by up to 64″. Every sign and nakshatra matched. A planet sitting within about a minute of arc of a boundary can still fall on either side. This comparison is re-run automatically whenever the engine changes. (Before this update, Venus differed by up to 560″.)

  • !
    Sunrise convention was different in earlier engine versions

    Before the sunrise convention was aligned with the Bishuddha Siddhanta tradition (upper limb, refraction, elevation), the engine's sunrise differed from the printed panjika by around 2 minutes. This is documented in the 2020 worked example above. Current versions match to the second.

  • !
    Festival definitions follow the Bishuddha Siddhanta tradition

    Some panjika traditions (e.g., Drik Siddhanta) define festival dates by slightly different rules — particularly for festivals that depend on sunrise or midnight-crossing. Where these traditions differ, MyAstrology follows Bishuddha Siddhanta. Users of other traditions should verify against their own panjika.

  • !
    Checked against independent references — open to outside audit

    The engine is compared automatically with Swiss Ephemeris (planets) and NASA JPL ephemeris points (panjika table), and against charts from independent astrology programs. These checks are run by us; no outside party has yet audited the code. We welcome researchers who would like to audit the engine and publish their findings.

11 · Citation

How to cite this work

If you use data or methodology from MyAstrology.in in research, journalism, or software, please cite as follows.

For the ephemeris engine

Acharya, Prodyut (2026). "VSOP87-based Ephemeris Engine for Bengali
Panjika Computation (1200–2000 BS)." MyAstrology.in.
Retrieved from https://myastrology.in/technology

For a specific date or panjika element

Dr. Prodyut Acharya, MyAstrology.in — Bengali Panjika,
[BS date] / [AD date]

Reference sources used by the engine

  • Bretagnon, P., & Francou, G. (1988). Planetary theories in rectangular and spherical variables: VSOP87 solution. Astronomy and Astrophysics, 202, 309–315.
  • Meeus, J. (1998). Astronomical Algorithms, 2nd ed. — Chapter 47 (Moon), Chapter 22 (Nutation).
  • NASA Jet Propulsion Laboratory. DE441 planetary ephemeris — reference data for the 2025–2032 panjika table.
  • Bishuddha Siddhanta Panjika — printed reference for computation rules, base coordinate, and ayanamsa tables.

Attribution request: If you use data from this site in a derivative work, please include the phrase "Data source: Dr. Prodyut Acharya, MyAstrology.in" in your published output. This preserves the chain of attribution from creator to user.

Questions about the method?

If you are a researcher, developer, or journalist wishing to verify or cite this work, we welcome your inquiry.

Contact · info@myastrology.in
💬