Your Vedic chart and Vimshottari dasha, computed.
Sidereal positions for the classical Navagraha and the lagna, your Moon’s nakshatra and pada, and the full 120-year Vimshottari dasha timeline with the current sub-period. Lahiri ayanamsa by default; approximate Raman-style and KP-style variants selectable. Free, no account.
One sky, two zodiacs.
For the Sun, Moon, Mars, Mercury, Jupiter, Venus, and Saturn, a Vedic chart uses the same geocentric ecliptic longitudes as a Western chart — here computed from VSOP87 planetary theory and a Meeus lunar solution — measured from a different zero point. Western astrology anchors 0° Aries to the March equinox (the tropical zodiac); Jyotish anchors it to the fixed stars (the sidereal zodiac), with the star Spica defining 0° Libra under the Lahiri convention.
Rahu and Ketu are mathematical points, not physical planets. This calculator uses the mean lunar-node convention: Rahu is the Moon’s mean ascending node, and Ketu is fixed exactly 180° away. They are exact antipodes and move retrograde through the zodiac together.
Because the equinox drifts backwards against the stars by about 50.3″ a year, the two zodiacs separate slowly. That separation is the ayanamsa. On 2026-09-29 the Lahiri ayanamsa is 24.226° (0.267 Julian centuries past J2000), so every sidereal longitude on this page is the tropical longitude minus that value. A tropical Sun at 5° Leo becomes a sidereal Sun at roughly 11° Cancer in 2026.
The calculator uses the same timezone resolution as the tropical cast: the birthplace is geocoded, its IANA zone resolved, and the local birth time converted to a true UTC instant before anything is computed. Read the methodology and the accuracy test set for what that pipeline is checked against.
This calculator is a sidereal birth cast: Lahiri ayanamsa, natal Moon nakshatra, and Vimshottari dashas. Tropical daily horoscope columns are one-sign letters from today's sky, not a birth instant. Sky now is live tropical weather for this UTC instant — not a sidereal recast of a birth. Moon today is the transit Moon's sign, phase, and lunation right now, not the natal Moon or nakshatra in this Vedic chart.
This calculator is a sidereal birth cast: Lahiri ayanamsa, natal Moon nakshatra, and Vimshottari dashas. The 2026 Mercury retrograde calendar is dated station and shadow windows on the tropical sky, not a sidereal recast of a birth.
A generic birth form is not a public AA-rated chart. Einstein's birth chart in Hellenistic, Vedic, and BaZi is one 1879 natal read three ways — including that Lahiri ayanamsa and Vimshottari dashas — not this calculator's inputs.
A Vimshottari birth is not a tropical-sign catalog. The Moon sign catalog lists tropical Moon meanings — not this natal Moon's nakshatra or dasha lord. The zodiac sign encyclopedia is standing tropical personality, not a Lahiri recast of a birth instant.
Lunar mansions, 13°20′ each.
Arcs are sidereal. Lords repeat in the Vimshottari order every nine mansions.
| # | Nakshatra | Sidereal arc | Lord | Deity | Symbol |
|---|---|---|---|---|---|
| 1 | Ashwini | 0°00′ Aries – 13°20′ Aries | Ketu | Ashwini Kumaras | Horse's head |
| 2 | Bharani | 13°20′ Aries – 26°40′ Aries | Venus | Yama | Yoni |
| 3 | Krittika | 26°40′ Aries – 10°00′ Taurus | Sun | Agni | Razor, flame |
| 4 | Rohini | 10°00′ Taurus – 23°20′ Taurus | Moon | Brahma (Prajapati) | Ox-cart |
| 5 | Mrigashira | 23°20′ Taurus – 6°40′ Gemini | Mars | Soma | Deer's head |
| 6 | Ardra | 6°40′ Gemini – 20°00′ Gemini | Rahu | Rudra | Teardrop |
| 7 | Punarvasu | 20°00′ Gemini – 3°20′ Cancer | Jupiter | Aditi | Bow and quiver |
| 8 | Pushya | 3°20′ Cancer – 16°40′ Cancer | Saturn | Brihaspati | Cow's udder, lotus |
| 9 | Ashlesha | 16°40′ Cancer – 30°00′ Cancer | Mercury | The Nagas | Coiled serpent |
| 10 | Magha | 0°00′ Leo – 13°20′ Leo | Ketu | The Pitris | Throne |
| 11 | Purva Phalguni | 13°20′ Leo – 26°40′ Leo | Venus | Bhaga | Front legs of a bed |
| 12 | Uttara Phalguni | 26°40′ Leo – 10°00′ Virgo | Sun | Aryaman | Back legs of a bed |
| 13 | Hasta | 10°00′ Virgo – 23°20′ Virgo | Moon | Savitar | Hand |
| 14 | Chitra | 23°20′ Virgo – 6°40′ Libra | Mars | Tvashtar | Bright jewel |
| 15 | Swati | 6°40′ Libra – 20°00′ Libra | Rahu | Vayu | Young sprout in the wind |
| 16 | Vishakha | 20°00′ Libra – 3°20′ Scorpio | Jupiter | Indra and Agni | Triumphal archway |
| 17 | Anuradha | 3°20′ Scorpio – 16°40′ Scorpio | Saturn | Mitra | Lotus |
| 18 | Jyeshtha | 16°40′ Scorpio – 30°00′ Scorpio | Mercury | Indra | Circular amulet |
| 19 | Mula | 0°00′ Sagittarius – 13°20′ Sagittarius | Ketu | Nirriti | Bundle of roots |
| 20 | Purva Ashadha | 13°20′ Sagittarius – 26°40′ Sagittarius | Venus | Apas | Winnowing fan |
| 21 | Uttara Ashadha | 26°40′ Sagittarius – 10°00′ Capricorn | Sun | The Vishvadevas | Elephant tusk |
| 22 | Shravana | 10°00′ Capricorn – 23°20′ Capricorn | Moon | Vishnu | Ear, three footprints |
| 23 | Dhanishta | 23°20′ Capricorn – 6°40′ Aquarius | Mars | The eight Vasus | Drum |
| 24 | Shatabhisha | 6°40′ Aquarius – 20°00′ Aquarius | Rahu | Varuna | Empty circle |
| 25 | Purva Bhadra | 20°00′ Aquarius – 3°20′ Pisces | Jupiter | Aja Ekapada | Sword |
| 26 | Uttara Bhadra | 3°20′ Pisces – 16°40′ Pisces | Saturn | Ahir Budhnya | Twins, back legs of a funeral cot |
| 27 | Revati | 16°40′ Pisces – 30°00′ Pisces | Mercury | Pushan | Fish, drum |
Nine lords, 120 years.
Vimshottari (“one hundred and twenty”) is the timing system almost every Jyotish reading leans on. Life is divided into nine planetary periods (mahadashas) that always run in the same order and always sum to 120 years. Which period you are born into depends only on your Moon’s nakshatra: its lord opens the sequence, and the fraction of the nakshatra the Moon had not yet crossed is the fraction of that lord’s period still to run.
Mahadasha and antardasha
A Mahadasha is the major planetary period: the broad timing chapter. An antardasha (bhukti) is a sub-period inside that chapter. Each Mahadasha is divided in the same nine-lord order, with each antardasha taking its lord’s share of the full 120-year cycle. After you cast a chart, the result shows the full birth-to-age-120 Mahadasha table and the antardashas inside the period active now.
Balance at birth
The starting balance is calculated as (13°20′ − degrees already traversed in the Moon’s nakshatra) ÷ 13°20′. Multiplying that remaining fraction by the nakshatra lord’s full Mahadasha length gives the years left at birth.
Worked example: a Moon at 20° Taurus is 10° into Rohini, leaving 3°20′ of its 13°20′ arc, or one quarter. Rohini is ruled by the Moon, whose full period is 10 years, so the balance at birth is 2.5 years.
Why a lord can appear twice
The reference table below is the canonical cycle: nine complete periods, one for each lord, totalling 120 years. A personal result is instead a birth-to-age-120 window. It begins with the unelapsed tail of the period active at birth and may end with the head of that same lord’s next period. That final partial repeat closes the 120-year window; it is not a tenth lord in the canonical cycle.
How the current period is selected
The calculator compares the age at evaluation with each period’s half-open interval: the start belongs to a row, while its end belongs to the next row. The highlighted current row therefore changes at the computed end instant; the interface displays that boundary as a UTC date. Result dates are produced from the existing calendar conversion of one fractional year to 365.2425 days.
What this calculator can and cannot tell you
A Dasha timeline is timing structure, not a personalized verdict. This calculator identifies the sequence and boundaries; houses and interpretation remain in the paid reading. The birth-chart accuracy research documents the calculation inputs and tests selected astronomical positions against linked reference targets. It does not validate the astrological meaning of Dasha periods.
| Order | Lord | Years | Opens the cycle when the Moon is in |
|---|---|---|---|
| 1 | Ketu | 7 | Ashwini, Magha, Mula |
| 2 | Venus | 20 | Bharani, Purva Phalguni, Purva Ashadha |
| 3 | Sun | 6 | Krittika, Uttara Phalguni, Uttara Ashadha |
| 4 | Moon | 10 | Rohini, Hasta, Shravana |
| 5 | Mars | 7 | Mrigashira, Chitra, Dhanishta |
| 6 | Rahu | 18 | Ardra, Swati, Shatabhisha |
| 7 | Jupiter | 16 | Punarvasu, Vishakha, Purva Bhadra |
| 8 | Saturn | 19 | Pushya, Anuradha, Uttara Bhadra |
| 9 | Mercury | 17 | Ashlesha, Jyeshtha, Revati |
Why do Vimshottari dasha dates differ?
Put two displayed Moon positions and one disputed first boundary on the same workbench. The lab changes one input at a time, so a date mismatch becomes an inspectable Moon-position contribution and calendar-conversion contribution instead of a guess.
Two calculators can use the same nine lords and still print different dates. First, a different UTC birth instant, ephemeris, ayanamsa, or degree-rounding rule can move the sidereal Moon. That changes the fraction of its nakshatra left at birth and therefore the opening balance. Near a nakshatra boundary, a small position change can select a different opening lord and a structurally different sequence.
Second, software must turn fractional Dasha years into calendar instants. Charting Stars declares a 365.2425-day mean-Gregorian conversion. The lab also shows a 365.25-day Julian-year comparison, a 365-day comparison, and a 360-day arithmetic comparison. Changing days per year preserves every fractional age, nakshatra, and lord; it changes only the printed calendar boundaries.
Same sequence, shifted dates. That points to calendar conversion or display rules after the Moon-based balance agrees. Nakshatra boundary crossed; opening lord changed. That is not a like-for-like date shift: the two timelines start from different structural inputs.
Enter each calculator’s displayed sidereal Moon sign and degree within that sign. The lab derives the shortest signed difference after each tool’s astronomy and ayanamsa steps; the two positions must be within 5°. The baseline’s opening balance is engine-derived (2.500000 years in the loaded Rohini example), not copied from a rounded result table.
Same opening sequence; the boundary date shifted. The comparison’s first boundary is 13.106 days earlier than the charting stars baseline.
Rohini · Moon
- Sidereal Moon
- 50.000000°
- Progress in nakshatra
- 10.000000°
- Balance at birth
- 2.500000000 years
- Calendar conversion
- 365.2425 days/year
- First boundary
- 2002-07-02 02:33 UTC
Rohini · Moon
- Sidereal Moon
- 50.000000°
- Progress in nakshatra
- 10.000000°
- Balance at birth
- 2.500000000 years
- Calendar conversion
- 360 days/year
- First boundary
- 2002-06-19 00:00 UTC
Closest tested conversion to 2002-06-19: Arithmetic year (360 days), whose displayed UTC date is 0 calendar days away. This ranks four declared conversions; it does not identify another calculator’s private method.
| Row | Charting Stars baseline | Comparison | End-instant delta |
|---|---|---|---|
| 1 | Moon · 2002-07-02 02:33 UTC | Moon · 2002-06-19 00:00 UTC | −13.106 days |
| 2 | Mars · 2009-07-01 19:17 UTC | Mars · 2009-05-13 00:00 UTC | −49.804 days |
| 3 | Rahu · 2027-07-02 04:03 UTC | Rahu · 2027-02-08 00:00 UTC | −144.169 days |
| 4 | Jupiter · 2043-07-02 01:10 UTC | Jupiter · 2042-11-16 00:00 UTC | −228.049 days |
| 5 | Saturn · 2062-07-01 15:45 UTC | Saturn · 2061-08-08 00:00 UTC | −327.656 days |
Privacy: the comparison link encodes the birth instant and both Moon positions in a URL fragment. The fragment stays in your browser unless you copy and share it; this button does not alter the current address bar.
What the lab can isolate
The Moon-position contribution holds Charting Stars’ 365.2425-day conversion fixed while applying the shortest signed longitude difference between the two Moon positions you enter. The year-convention contribution then holds that comparison Moon fixed while changing only the conversion. Entering another displayed boundary ranks the four tested conversions by civil UTC date; it does not reverse-engineer a private algorithm.
Check the birth instant before the arithmetic. Historical timezone or daylight-saving assumptions can turn the same local birth record into a different UTC instant. UTC versus local display and date rounding can also make equal instants look one civil day apart. Alternative starting-point traditions can change the opening lord and remain outside this Moon-based comparison.
The balance formula and Moon-based convention follow Sanjay Rath’s worked method. The Swiss Ephemeris documentation explains why named ayanamsas and precession models must be compared explicitly. This lab accepts two numeric Moon positions and derives their shortest signed difference instead of claiming that an unverified named profile reproduces another tool.
This is same-engine arithmetic and method-conformance evidence, not independent astronomical validation. It offers no predictive validation of Dasha meanings or life events and does not certify another calculator. For reusable test vectors, inspect the open 81-record Vimshottari conformance set.
Open Vimshottari Dasha Conformance Set.
A versioned, deterministic set of all 27 nakshatras sampled at the start, midpoint, and near-end: 81 cases generated by the same Dasha functions used by the calculator. Sample positions are start = 0, midpoint = 0.5, and near-end = 1 − 1e−9 of each nakshatra span.
Release vimshottari-conformance-2026-09-04-v1 records the sidereal Moon longitude, starting lord, remaining nakshatra fraction, opening balance, period count, final lord, sequence continuity, Antardasha continuity and parent-window sum, and exact [0, 120) closure. Period dates use the documented 365.2425-day year convention.
These are method-conformance vectors. They are not independent astronomical validation and provide no predictive validation of Dasha interpretations or life events.
The record-set SHA-256 is 297fb4ccff0cf62202b71d7108a5805679813bcbf02288529164abffef0d1bd6. The 81 records are available under the CC BY 4.0 license. Permanent JSON, CSV, and manifest URLs for this release are linked below.
Charting Stars. "Open Vimshottari Dasha Conformance Set." Release vimshottari-conformance-2026-09-04-v1, 2026-09-04. https://chartingstars.com/vedic-chart#vimshottari-conformance-set. CC BY 4.0.Run all 81 cases in JavaScript or Python
Download the permanent JSON release to a local file: https://chartingstars.com/vedic-chart/conformance/vimshottari-conformance-2026-09-04-v1.json. Before parsing, each zero-dependency harness verifies the raw artifact SHA-256: f37e8f3b3514d160fde235857b2b2838de6107fb4f613c590ec2d5afbbef108a.
Evidence boundary: these examples test Dasha arithmetic from each supplied, already-sidereal Moon longitude. They do not compute or validate an ephemeris, ayanamsa, astronomical position, predictive result, or civil date.
JavaScript · CommonJS · save as adopt-vimshottari.cjs
"use strict";
// This harness uses CommonJS. Save it as adopt-vimshottari.cjs so it also runs
// inside Node.js projects whose package.json declares "type": "module".
// Download this immutable release once, then run the harness against the local file:
// https://chartingstars.com/vedic-chart/conformance/vimshottari-conformance-2026-09-04-v1.json
// Scope: supplied, already-sidereal Moon longitudes and Dasha arithmetic only.
// This does not compute or validate an ephemeris, ayanamsa, astronomical position,
// predictive result, or civil date.
const { createHash } = require("node:crypto");
const { readFileSync } = require("node:fs");
const RELEASE_ID = "vimshottari-conformance-2026-09-04-v1";
const RELEASE_URL =
"https://chartingstars.com/vedic-chart/conformance/vimshottari-conformance-2026-09-04-v1.json";
const DEFAULT_RELEASE_PATH = "./vimshottari-conformance-2026-09-04-v1.json";
const ARTIFACT_SHA256 =
"f37e8f3b3514d160fde235857b2b2838de6107fb4f613c590ec2d5afbbef108a";
const RECORD_SET_SHA256 =
"297fb4ccff0cf62202b71d7108a5805679813bcbf02288529164abffef0d1bd6";
const SCHEMA_VERSION = 1;
const RECORD_COUNT = 81;
const ABSOLUTE_TOLERANCE = 1e-9;
const EXACT_FIELDS = [
"nakshatraIndex",
"nakshatra",
"startingLord",
"periodCount",
"finalLord",
"sequenceContiguous",
"antardashasContiguous",
"antardashasSumToParents",
"closesAtAge120",
];
const TOLERANCE_FIELDS = [
"remainingFraction",
"openingBalanceYears",
"startAge",
"endAge",
];
function sha256(value) {
return createHash("sha256").update(value).digest("hex");
}
function requireCondition(condition, message) {
if (!condition) {
throw new Error(message);
}
}
function requireExact(actual, expected, label) {
requireCondition(
Object.is(actual, expected),
label + ": expected " + String(expected) + ", received " + String(actual),
);
}
function loadConformanceSet(releasePath = DEFAULT_RELEASE_PATH) {
const rawArtifact = readFileSync(releasePath);
requireExact(
sha256(rawArtifact),
ARTIFACT_SHA256,
"raw JSON artifact SHA-256",
);
let dataset;
try {
dataset = JSON.parse(rawArtifact.toString("utf8"));
} catch (error) {
throw new Error("release is not valid UTF-8 JSON", { cause: error });
}
requireCondition(
dataset !== null && typeof dataset === "object" && !Array.isArray(dataset),
"release root must be an object",
);
requireExact(dataset.schemaVersion, SCHEMA_VERSION, "schemaVersion");
requireExact(dataset.releaseId, RELEASE_ID, "releaseId");
requireExact(dataset.recordCount, RECORD_COUNT, "recordCount");
requireCondition(Array.isArray(dataset.records), "records must be an array");
requireExact(dataset.records.length, RECORD_COUNT, "records.length");
const ids = new Set();
dataset.records.forEach((record, index) => {
requireCondition(
record !== null && typeof record === "object" && !Array.isArray(record),
"record " + index + " must be an object",
);
requireCondition(
typeof record.id === "string" && record.id.length > 0,
"record " + index + " must have a non-empty string id",
);
ids.add(record.id);
});
requireExact(ids.size, RECORD_COUNT, "unique record IDs");
// JSON.parse preserves the published property order, so this compact digest
// can additionally pin the record projection in JavaScript.
requireExact(
sha256(Buffer.from(JSON.stringify(dataset.records), "utf8")),
RECORD_SET_SHA256,
"record-set SHA-256",
);
return dataset.records;
}
function assertImplementation(computeCase, records) {
requireCondition(typeof computeCase === "function", "computeCase must be a function");
requireCondition(Array.isArray(records), "records must be an array");
requireExact(records.length, RECORD_COUNT, "records.length");
records.forEach((expected) => {
const actual = computeCase(expected.siderealMoonLongitude);
requireCondition(
actual !== null && typeof actual === "object" && !Array.isArray(actual),
expected.id + ": computeCase must return an object",
);
EXACT_FIELDS.forEach((field) => {
requireCondition(
Object.prototype.hasOwnProperty.call(actual, field),
expected.id + ": missing " + field,
);
requireExact(actual[field], expected[field], expected.id + ": " + field);
});
TOLERANCE_FIELDS.forEach((field) => {
requireCondition(
Object.prototype.hasOwnProperty.call(actual, field),
expected.id + ": missing " + field,
);
requireCondition(
typeof actual[field] === "number" && Number.isFinite(actual[field]),
expected.id + ": " + field + " must be a finite number",
);
const difference = Math.abs(actual[field] - expected[field]);
requireCondition(
difference <= ABSOLUTE_TOLERANCE,
expected.id + ": " + field + " differs by " + difference,
);
});
});
return records.length;
}
module.exports = Object.freeze({
RELEASE_ID,
RELEASE_URL,
ARTIFACT_SHA256,
loadConformanceSet,
assertImplementation,
});
// Adapter shape:
// const records = loadConformanceSet();
// assertImplementation((siderealMoonLongitude) => {
// return yourDashaEngine.computeConformanceCase(siderealMoonLongitude);
// }, records);
Python · standard library
"""Offline harness for the immutable Open Vimshottari conformance release.
Download this release once, then run the harness against the local file:
https://chartingstars.com/vedic-chart/conformance/vimshottari-conformance-2026-09-04-v1.json
Scope: supplied, already-sidereal Moon longitudes and Dasha arithmetic only.
This does not compute or validate an ephemeris, ayanamsa, astronomical position,
predictive result, or civil date.
"""
from collections.abc import Mapping
from hashlib import sha256
from math import isfinite
from pathlib import Path
import json
RELEASE_ID = "vimshottari-conformance-2026-09-04-v1"
RELEASE_URL = (
"https://chartingstars.com/vedic-chart/conformance/"
"vimshottari-conformance-2026-09-04-v1.json"
)
DEFAULT_RELEASE_PATH = Path("./vimshottari-conformance-2026-09-04-v1.json")
ARTIFACT_SHA256 = (
"f37e8f3b3514d160fde235857b2b2838de6107fb4f613c590ec2d5afbbef108a"
)
SCHEMA_VERSION = 1
RECORD_COUNT = 81
ABSOLUTE_TOLERANCE = 1e-9
EXACT_FIELDS = (
"nakshatraIndex",
"nakshatra",
"startingLord",
"periodCount",
"finalLord",
"sequenceContiguous",
"antardashasContiguous",
"antardashasSumToParents",
"closesAtAge120",
)
TOLERANCE_FIELDS = (
"remainingFraction",
"openingBalanceYears",
"startAge",
"endAge",
)
def _require(condition, message):
if not condition:
raise AssertionError(message)
def _require_exact(actual, expected, label):
_require(
type(actual) is type(expected) and actual == expected,
f"{label}: expected {expected!r}, received {actual!r}",
)
def load_conformance_set(release_path=DEFAULT_RELEASE_PATH):
"""Verify the raw local artifact before returning its 81 records."""
raw_artifact = Path(release_path).read_bytes()
_require_exact(
sha256(raw_artifact).hexdigest(),
ARTIFACT_SHA256,
"raw JSON artifact SHA-256",
)
dataset = json.loads(raw_artifact)
_require(type(dataset) is dict, "release root must be an object")
_require_exact(dataset.get("schemaVersion"), SCHEMA_VERSION, "schemaVersion")
_require_exact(dataset.get("releaseId"), RELEASE_ID, "releaseId")
_require_exact(dataset.get("recordCount"), RECORD_COUNT, "recordCount")
records = dataset.get("records")
_require(type(records) is list, "records must be an array")
_require_exact(len(records), RECORD_COUNT, "records length")
ids = set()
for index, record in enumerate(records):
_require(type(record) is dict, f"record {index} must be an object")
record_id = record.get("id")
_require(
type(record_id) is str and len(record_id) > 0,
f"record {index} must have a non-empty string id",
)
ids.add(record_id)
_require_exact(len(ids), RECORD_COUNT, "unique record IDs")
# The raw artifact hash above is the cross-language byte contract. Do not
# recreate the JavaScript record digest with json.dumps: Python's number
# serialization is not the published JSON.stringify serialization.
return records
def assert_implementation(compute_case, records):
"""Run compute_case(longitude) against every published Dasha vector."""
_require(callable(compute_case), "compute_case must be callable")
_require(type(records) is list, "records must be an array")
_require_exact(len(records), RECORD_COUNT, "records length")
for expected in records:
actual = compute_case(expected["siderealMoonLongitude"])
_require(
isinstance(actual, Mapping),
f"{expected['id']}: compute_case must return a mapping",
)
for field in EXACT_FIELDS:
_require(field in actual, f"{expected['id']}: missing {field}")
_require_exact(
actual[field],
expected[field],
f"{expected['id']}: {field}",
)
for field in TOLERANCE_FIELDS:
_require(field in actual, f"{expected['id']}: missing {field}")
value = actual[field]
_require(
not isinstance(value, bool)
and isinstance(value, (int, float))
and isfinite(value),
f"{expected['id']}: {field} must be a finite number",
)
difference = abs(value - expected[field])
_require(
difference <= ABSOLUTE_TOLERANCE,
f"{expected['id']}: {field} differs by {difference}",
)
return len(records)
# Adapter shape:
# records = load_conformance_set()
# assert_implementation(
# lambda sidereal_moon_longitude: your_dasha_engine.compute_conformance_case(
# sidereal_moon_longitude
# ),
# records,
# )
Method sources and coordinate context
The cycle, nakshatra-lord order, period lengths, and balance method are described in Sanjay Rath’s Vimshottari Dasa guide and the Brihat Parashara Hora Shastra (BPHS). The Swiss Ephemeris documentation provides sidereal-coordinate and Lahiri context; it is not being used here as an independent result oracle.
Reproducing a published balance example
Public input: 1934-11-12 18:20 IST at 20°30′ N, 85°50′ E. That civil time is 1934-11-12T12:50:00Z for the calculation.
The source reports Uttara Ashadha, Sun as the opening lord, a remaining factor of 0.31098, and a balance of 1.865875 years. At its published decimal precision, that factor implies 9.187° traversed within the nakshatra.
The source prints the Moon as 305°51′13″ and the nakshatra start as 296°40′ while labeling the Moon Uttara Ashadha. Those printed longitudes are 30° inconsistent with the standard Uttara Ashadha arc. Because the same offset appears in both printed values, the common 30° offset cancels in M−N.
The production-equivalent UTC → tropical chart → Lahiri sidereal chart chain returns a Moon at 275.853°, Uttara Ashadha, with 9.186° traversed. Its opening lord is Sun, remaining factor 0.3110169, and balance 1.866101 years. Remaining-factor delta: 0.0000369 (absolute). Balance delta in years: 0.0002263 (absolute).
The traversed-arc difference is 0.0005° — about 2 arcseconds. The arc difference is arithmetic from rounded source figures and is not an astronomical accuracy result or end-to-end validation. For unit context, the balance difference is 1.984 hours under Charting Stars’ 365.2425-day convention. The source’s 360-day worked decomposition uses a different conversion, so the convention-neutral factor and balance in years are the primary comparison.
We compare only the within-nakshatra interval M−N, remaining factor, and opening balance, not the absolute longitudes.
Sanjay Rath also describes alternative starting-point traditions. Those rules can select a different reference and therefore another opening lord. For human charts his guidance is to prefer the Moon when in doubt; this reproduction exercises that common Moon-nakshatra convention without treating the alternatives as errors.
| Case ID | Nakshatra | Sample | Moon longitude | Starting lord | Remaining fraction | Opening balance | Periods | Final lord | Sequence | Antardashas | Bounds |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 01-ashwini-start | Ashwini | start | 0.000000000° | Ketu | 1.000000000 | 7.000000000 years | 9 | Mercury | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 01-ashwini-midpoint | Ashwini | midpoint | 6.666666667° | Ketu | 0.500000000 | 3.500000000 years | 10 | Ketu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 01-ashwini-near-end | Ashwini | near-end | 13.333333320° | Ketu | 0.000000001 | 0.000000007 years | 10 | Ketu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 02-bharani-start | Bharani | start | 13.333333333° | Venus | 1.000000000 | 20.000000000 years | 9 | Ketu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 02-bharani-midpoint | Bharani | midpoint | 20.000000000° | Venus | 0.500000000 | 10.000000000 years | 10 | Venus | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 02-bharani-near-end | Bharani | near-end | 26.666666653° | Venus | 0.000000001 | 0.000000020 years | 10 | Venus | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 03-krittika-start | Krittika | start | 26.666666667° | Sun | 1.000000000 | 6.000000000 years | 9 | Venus | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 03-krittika-midpoint | Krittika | midpoint | 33.333333333° | Sun | 0.500000000 | 3.000000000 years | 10 | Sun | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 03-krittika-near-end | Krittika | near-end | 39.999999987° | Sun | 0.000000001 | 0.000000006 years | 10 | Sun | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 04-rohini-start | Rohini | start | 40.000000000° | Moon | 1.000000000 | 10.000000000 years | 9 | Sun | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 04-rohini-midpoint | Rohini | midpoint | 46.666666667° | Moon | 0.500000000 | 5.000000000 years | 10 | Moon | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 04-rohini-near-end | Rohini | near-end | 53.333333320° | Moon | 0.000000001 | 0.000000010 years | 10 | Moon | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 05-mrigashira-start | Mrigashira | start | 53.333333333° | Mars | 1.000000000 | 7.000000000 years | 9 | Moon | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 05-mrigashira-midpoint | Mrigashira | midpoint | 60.000000000° | Mars | 0.500000000 | 3.500000000 years | 10 | Mars | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 05-mrigashira-near-end | Mrigashira | near-end | 66.666666653° | Mars | 0.000000001 | 0.000000007 years | 10 | Mars | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 06-ardra-start | Ardra | start | 66.666666667° | Rahu | 1.000000000 | 18.000000000 years | 9 | Mars | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 06-ardra-midpoint | Ardra | midpoint | 73.333333333° | Rahu | 0.500000000 | 9.000000000 years | 10 | Rahu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 06-ardra-near-end | Ardra | near-end | 79.999999987° | Rahu | 0.000000001 | 0.000000018 years | 10 | Rahu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 07-punarvasu-start | Punarvasu | start | 80.000000000° | Jupiter | 1.000000000 | 16.000000000 years | 9 | Rahu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 07-punarvasu-midpoint | Punarvasu | midpoint | 86.666666667° | Jupiter | 0.500000000 | 8.000000000 years | 10 | Jupiter | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 07-punarvasu-near-end | Punarvasu | near-end | 93.333333320° | Jupiter | 0.000000001 | 0.000000016 years | 10 | Jupiter | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 08-pushya-start | Pushya | start | 93.333333333° | Saturn | 1.000000000 | 19.000000000 years | 9 | Jupiter | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 08-pushya-midpoint | Pushya | midpoint | 100.000000000° | Saturn | 0.500000000 | 9.500000000 years | 10 | Saturn | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 08-pushya-near-end | Pushya | near-end | 106.666666653° | Saturn | 0.000000001 | 0.000000019 years | 10 | Saturn | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 09-ashlesha-start | Ashlesha | start | 106.666666667° | Mercury | 1.000000000 | 17.000000000 years | 9 | Saturn | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 09-ashlesha-midpoint | Ashlesha | midpoint | 113.333333333° | Mercury | 0.500000000 | 8.500000000 years | 10 | Mercury | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 09-ashlesha-near-end | Ashlesha | near-end | 119.999999987° | Mercury | 0.000000001 | 0.000000017 years | 10 | Mercury | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 10-magha-start | Magha | start | 120.000000000° | Ketu | 1.000000000 | 7.000000000 years | 9 | Mercury | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 10-magha-midpoint | Magha | midpoint | 126.666666667° | Ketu | 0.500000000 | 3.500000000 years | 10 | Ketu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 10-magha-near-end | Magha | near-end | 133.333333320° | Ketu | 0.000000001 | 0.000000007 years | 10 | Ketu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 11-purva-phalguni-start | Purva Phalguni | start | 133.333333333° | Venus | 1.000000000 | 20.000000000 years | 9 | Ketu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 11-purva-phalguni-midpoint | Purva Phalguni | midpoint | 140.000000000° | Venus | 0.500000000 | 10.000000000 years | 10 | Venus | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 11-purva-phalguni-near-end | Purva Phalguni | near-end | 146.666666653° | Venus | 0.000000001 | 0.000000020 years | 10 | Venus | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 12-uttara-phalguni-start | Uttara Phalguni | start | 146.666666667° | Sun | 1.000000000 | 6.000000000 years | 9 | Venus | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 12-uttara-phalguni-midpoint | Uttara Phalguni | midpoint | 153.333333333° | Sun | 0.500000000 | 3.000000000 years | 10 | Sun | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 12-uttara-phalguni-near-end | Uttara Phalguni | near-end | 159.999999987° | Sun | 0.000000001 | 0.000000006 years | 10 | Sun | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 13-hasta-start | Hasta | start | 160.000000000° | Moon | 1.000000000 | 10.000000000 years | 9 | Sun | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 13-hasta-midpoint | Hasta | midpoint | 166.666666667° | Moon | 0.500000000 | 5.000000000 years | 10 | Moon | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 13-hasta-near-end | Hasta | near-end | 173.333333320° | Moon | 0.000000001 | 0.000000010 years | 10 | Moon | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 14-chitra-start | Chitra | start | 173.333333333° | Mars | 1.000000000 | 7.000000000 years | 9 | Moon | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 14-chitra-midpoint | Chitra | midpoint | 180.000000000° | Mars | 0.500000000 | 3.500000000 years | 10 | Mars | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 14-chitra-near-end | Chitra | near-end | 186.666666653° | Mars | 0.000000001 | 0.000000007 years | 10 | Mars | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 15-swati-start | Swati | start | 186.666666667° | Rahu | 1.000000000 | 18.000000000 years | 9 | Mars | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 15-swati-midpoint | Swati | midpoint | 193.333333333° | Rahu | 0.500000000 | 9.000000000 years | 10 | Rahu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 15-swati-near-end | Swati | near-end | 199.999999987° | Rahu | 0.000000001 | 0.000000018 years | 10 | Rahu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 16-vishakha-start | Vishakha | start | 200.000000000° | Jupiter | 1.000000000 | 16.000000000 years | 9 | Rahu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 16-vishakha-midpoint | Vishakha | midpoint | 206.666666667° | Jupiter | 0.500000000 | 8.000000000 years | 10 | Jupiter | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 16-vishakha-near-end | Vishakha | near-end | 213.333333320° | Jupiter | 0.000000001 | 0.000000016 years | 10 | Jupiter | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 17-anuradha-start | Anuradha | start | 213.333333333° | Saturn | 1.000000000 | 19.000000000 years | 9 | Jupiter | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 17-anuradha-midpoint | Anuradha | midpoint | 220.000000000° | Saturn | 0.500000000 | 9.500000000 years | 10 | Saturn | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 17-anuradha-near-end | Anuradha | near-end | 226.666666653° | Saturn | 0.000000001 | 0.000000019 years | 10 | Saturn | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 18-jyeshtha-start | Jyeshtha | start | 226.666666667° | Mercury | 1.000000000 | 17.000000000 years | 9 | Saturn | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 18-jyeshtha-midpoint | Jyeshtha | midpoint | 233.333333333° | Mercury | 0.500000000 | 8.500000000 years | 10 | Mercury | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 18-jyeshtha-near-end | Jyeshtha | near-end | 239.999999987° | Mercury | 0.000000001 | 0.000000017 years | 10 | Mercury | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 19-mula-start | Mula | start | 240.000000000° | Ketu | 1.000000000 | 7.000000000 years | 9 | Mercury | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 19-mula-midpoint | Mula | midpoint | 246.666666667° | Ketu | 0.500000000 | 3.500000000 years | 10 | Ketu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 19-mula-near-end | Mula | near-end | 253.333333320° | Ketu | 0.000000001 | 0.000000007 years | 10 | Ketu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 20-purva-ashadha-start | Purva Ashadha | start | 253.333333333° | Venus | 1.000000000 | 20.000000000 years | 9 | Ketu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 20-purva-ashadha-midpoint | Purva Ashadha | midpoint | 260.000000000° | Venus | 0.500000000 | 10.000000000 years | 10 | Venus | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 20-purva-ashadha-near-end | Purva Ashadha | near-end | 266.666666653° | Venus | 0.000000001 | 0.000000020 years | 10 | Venus | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 21-uttara-ashadha-start | Uttara Ashadha | start | 266.666666667° | Sun | 1.000000000 | 6.000000000 years | 9 | Venus | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 21-uttara-ashadha-midpoint | Uttara Ashadha | midpoint | 273.333333333° | Sun | 0.500000000 | 3.000000000 years | 10 | Sun | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 21-uttara-ashadha-near-end | Uttara Ashadha | near-end | 279.999999987° | Sun | 0.000000001 | 0.000000006 years | 10 | Sun | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 22-shravana-start | Shravana | start | 280.000000000° | Moon | 1.000000000 | 10.000000000 years | 9 | Sun | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 22-shravana-midpoint | Shravana | midpoint | 286.666666667° | Moon | 0.500000000 | 5.000000000 years | 10 | Moon | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 22-shravana-near-end | Shravana | near-end | 293.333333320° | Moon | 0.000000001 | 0.000000010 years | 10 | Moon | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 23-dhanishta-start | Dhanishta | start | 293.333333333° | Mars | 1.000000000 | 7.000000000 years | 9 | Moon | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 23-dhanishta-midpoint | Dhanishta | midpoint | 300.000000000° | Mars | 0.500000000 | 3.500000000 years | 10 | Mars | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 23-dhanishta-near-end | Dhanishta | near-end | 306.666666653° | Mars | 0.000000001 | 0.000000007 years | 10 | Mars | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 24-shatabhisha-start | Shatabhisha | start | 306.666666667° | Rahu | 1.000000000 | 18.000000000 years | 9 | Mars | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 24-shatabhisha-midpoint | Shatabhisha | midpoint | 313.333333333° | Rahu | 0.500000000 | 9.000000000 years | 10 | Rahu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 24-shatabhisha-near-end | Shatabhisha | near-end | 319.999999987° | Rahu | 0.000000001 | 0.000000018 years | 10 | Rahu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 25-purva-bhadra-start | Purva Bhadra | start | 320.000000000° | Jupiter | 1.000000000 | 16.000000000 years | 9 | Rahu | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 25-purva-bhadra-midpoint | Purva Bhadra | midpoint | 326.666666667° | Jupiter | 0.500000000 | 8.000000000 years | 10 | Jupiter | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 25-purva-bhadra-near-end | Purva Bhadra | near-end | 333.333333320° | Jupiter | 0.000000001 | 0.000000016 years | 10 | Jupiter | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 26-uttara-bhadra-start | Uttara Bhadra | start | 333.333333333° | Saturn | 1.000000000 | 19.000000000 years | 9 | Jupiter | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 26-uttara-bhadra-midpoint | Uttara Bhadra | midpoint | 340.000000000° | Saturn | 0.500000000 | 9.500000000 years | 10 | Saturn | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 26-uttara-bhadra-near-end | Uttara Bhadra | near-end | 346.666666653° | Saturn | 0.000000001 | 0.000000019 years | 10 | Saturn | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 27-revati-start | Revati | start | 346.666666667° | Mercury | 1.000000000 | 17.000000000 years | 9 | Saturn | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 27-revati-midpoint | Revati | midpoint | 353.333333333° | Mercury | 0.500000000 | 8.500000000 years | 10 | Mercury | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
| 27-revati-near-end | Revati | near-end | 359.999999987° | Mercury | 0.000000001 | 0.000000017 years | 10 | Mercury | Contiguous | Contiguous; parent sum exact | [0, 120) exact |
Common questions.
What is the difference between a Vedic chart and a Western birth chart?
Both start from the same sky. A Western (tropical) chart measures the zodiac from the March equinox; a Vedic (sidereal) chart measures it from a fixed star reference, currently about 24 degrees behind. Subtracting that offset — the ayanamsa — shifts most placements back by most of a sign, which is why a tropical Leo Sun is often a sidereal Cancer Sun.
Which ayanamsa does this calculator use?
Lahiri (Chitra Paksha) by default — the ayanamsa used by the Indian government's ephemeris and most Jyotish software. It is the only option in this engine checked against referenced Lahiri values. Raman and Krishnamurti (KP) remain selectable as approximate variants, not independently validated reproductions of those named definitions; verify boundary-sensitive work against a reference implementation.
What is a nakshatra and a pada?
The sidereal zodiac is divided into 27 nakshatras (lunar mansions) of 13°20′ each, every one with a ruling planet and a deity. Each nakshatra splits into four padas of 3°20′. The Moon's nakshatra at birth (janma nakshatra) sets the starting point of the Vimshottari dasha sequence.
How is the Vimshottari dasha calculated?
Vimshottari assigns nine graha periods totalling 120 years in a fixed order: Ketu 7, Venus 20, Sun 6, Moon 10, Mars 7, Rahu 18, Jupiter 16, Saturn 19, Mercury 17. The first period is the lord of the Moon's birth nakshatra, shortened in proportion to how far the Moon had already travelled through that nakshatra. Sub-periods (antardashas) divide each mahadasha in the same proportions.
Why do Vimshottari dasha dates differ between calculators?
A different UTC birth instant, ephemeris, ayanamsa, or rounding rule can move the sidereal Moon and change the balance left in its nakshatra. A Moon that crosses a nakshatra boundary can even change the opening lord and sequence. If the Moon and sequence agree, different days-per-year or civil-date display conventions can still shift printed boundaries. Alternative starting-point traditions are another separate cause. The comparison lab isolates a Moon-position shift from the calendar conversion without claiming to identify or certify another calculator's method.
How accurate are the positions?
The seven physical grahas use VSOP87 planetary theory and a Meeus lunar solution. Regression-tested across seven Rodden-rated fixtures with a 0.05° drift guard; selected positions are independently compared with published and JPL references. Rahu and Ketu use the Meeus mean-node polynomial. The Lahiri ayanamsa approximation matches the Swiss Ephemeris value to about 0.02° across 1900–2100.