Ayanamsa Explained: Lahiri vs Raman vs KP — A Developer's Deep Dive
Why your Vedic astrology calculations shift by entire signs depending on which ayanamsa you choose. The astronomy, the history, the numbers, and the API integration.
What is Ayanamsa? The Precession Problem
If you have ever compared the output of a Western astrology app with a Vedic astrology app for the same birth time, you noticed something jarring: the planet positions disagree by about 24 degrees. Your Sun is in Aries in one system and Pisces in the other. Neither is wrong. They are measuring from different starting points.
That angular difference is called ayanamsa (Sanskrit: ayana = solstice, amsha = portion). It exists because the Earth's rotational axis is not fixed in space. It wobbles like a spinning top that has started to slow down. This wobble, called axial precession, traces a cone in space with a full cycle of approximately 25,772 years.
The practical consequence: the vernal equinox (the point where the Sun crosses the celestial equator heading north) slowly drifts westward against the backdrop of fixed stars. Western astrology anchors its zodiac to this moving equinox point. Vedic astrology anchors to the fixed stars. Every year, the gap between these two reference frames grows by about 50.3 arcseconds.
In 2026, the Lahiri ayanamsa value is approximately 24.18 degrees. That means if a planet sits at 10 degrees Aries in the tropical (Western) zodiac, it sits at roughly 15 degrees 49 minutes Pisces in the sidereal (Vedic) zodiac. Same planet, same moment, different coordinate system.
For a developer building astrology software, this is not a philosophical question. It is a coordinate transformation. Get it wrong, and every downstream calculation — signs, nakshatras, house cusps, dasha periods — cascades into garbage.
The Math (Simplified)
sidereal_longitude = tropical_longitude - ayanamsa
If the result is negative, add 360 degrees.
Example for Feb 10, 2026: Sun tropical = 321.47 degrees. Lahiri ayanamsa = 24.18 degrees. Sun sidereal = 297.29 degrees = 27 degrees 17 minutes Capricorn (Dhanishta nakshatra, pada 4).
Historical Context: How We Got Here
The problem of precession was known to ancient Indian astronomers. The Surya Siddhanta, one of the oldest surviving astronomical texts (dated variously from 400-1000 CE, with possible older roots), describes a trepidation model where the equinox oscillates back and forth rather than continuously precessing. That model gives an ayanamsa that cycles between +27 and -27 degrees. Modern astronomy proved this wrong. The precession is continuous and one-directional.
This created a problem for 20th-century Indian astrology: if the old texts had the model wrong, where exactly did the tropical and sidereal zodiacs coincide? That zero-point determines the ayanamsa value for every subsequent year. Different astronomers calculated different zero-dates, and that disagreement persists today.
In 1952, the Government of India formed the Calendar Reform Committee under the chairmanship of physicist Meghnad Saha. The committee included N.C. Lahiri as the secretary. Their task: standardize the Indian civil calendar and the astronomical constants used in panchang (almanac) calculations.
In 1956, the committee adopted what is now called the Lahiri ayanamsa (also known as Chitrapaksha ayanamsa). It was published in the Indian Astronomical Ephemeris by the Positional Astronomy Centre, Kolkata. The choice was pragmatic: it aligned reasonably well with the majority of practicing Indian astrologers and had a clean astronomical reference point.
But "government-endorsed" did not mean "universally accepted." Several prominent astrologers had already established their own ayanamsa values, and their followers continue to use those values today.
Lahiri (Chitrapaksha) Ayanamsa
Reference point: The star Spica (called Chitra in Sanskrit) is fixed at exactly 0 degrees Libra (180 degrees from 0 degrees Aries). The ayanamsa is the difference between Spica's tropical longitude and 180 degrees.
2026 value: Approximately 24 degrees 10 minutes 48 seconds (24.18 degrees). This increases by about 50.3 arcseconds per year.
Zero-date: Approximately 285 CE. This is when the tropical and sidereal zodiacs coincided under this system.
Lahiri is the default in almost every Indian astrology context. Government panchangs use it. ISKCON calendars use it. The vast majority of jyotish software defaults to it. If a client does not specify an ayanamsa, they almost certainly expect Lahiri.
Its strength is institutional backing and widespread adoption. Its weakness, if you want to call it that, is that the choice of Spica as the reference star is somewhat arbitrary. Spica is a binary star with measurable proper motion (about -42 milliarcseconds per year in right ascension). Over centuries, this proper motion shifts the reference point itself. For practical purposes within a human lifetime, this drift is negligible. Over thousands of years of back-calculation, it matters.
When to use Lahiri
- Your target users are in India (or following mainstream North Indian or South Indian jyotish)
- Your app generates panchangs or muhurta timings
- The astrologer or client has not specified a preference
- You need compatibility with government-published ephemeris data
Raman Ayanamsa
Proponent: B.V. Raman (1912-1998), arguably the most influential Vedic astrologer of the 20th century. Author of Hindu Predictive Astrology and founder of The Astrological Magazine.
2026 value: Approximately 22 degrees 40 minutes (22.67 degrees). That is roughly 1.5 degrees less than Lahiri.
Zero-date: Approximately 397 CE. Raman calculated this based on his study of historical horoscopes and astronomical texts.
The 1.5-degree difference from Lahiri sounds small. It is not. For any planet sitting in the last 1.5 degrees of a sign under Lahiri, Raman places it in the next sign. For borderline nakshatra placements, the pada (quarter) changes. For dasha calculations, a different nakshatra means a different starting dasha lord, which reshuffles the entire predictive timeline.
Raman's followers argue that his ayanamsa produces more accurate predictive results, particularly for dasha timings. The debate is impossible to settle objectively because "accuracy" in astrological prediction lacks a controlled experimental framework. What you can say is that Raman's ayanamsa has a dedicated following, particularly among astrologers trained in the B.V. Raman tradition in South India.
If you are building an app that serves Raman-tradition astrologers, you must support this ayanamsa. Giving them Lahiri positions and calling it "Vedic astrology" would be like giving someone a metric measurement when they asked for imperial — technically related, practically wrong.
KP (Krishnamurti Paddhati) Ayanamsa
Proponent: K.S. Krishnamurti (1908-1972), creator of the Krishnamurti Paddhati system. KP is not just an ayanamsa — it is an entire predictive methodology built on sub-lord theory.
2026 value: Approximately 24 degrees 4 minutes (24.07 degrees). This differs from Lahiri by roughly 6 arcminutes (0.1 degrees).
Six arcminutes. That is one-tenth of a degree. You might think this is negligible. KP practitioners disagree, forcefully.
In the KP system, the zodiac is divided not just into 12 signs and 27 nakshatras but into 249 sub-lords. Each nakshatra (13 degrees 20 minutes) is subdivided into 9 unequal parts governed by the Vimshottari dasha lords. The sub-lord of a house cusp determines the planet that controls events related to that house.
Here is why 6 arcminutes matters: the smallest sub-lord division is about 40 arcminutes (the Sun's sub in any nakshatra). Six arcminutes is 15% of that division. At the boundary between two sub-lords, a 6-arcminute shift changes the sub-lord assignment, which changes the entire prediction.
Krishnamurti derived his ayanamsa value from a study of historical events where the exact timing was known. He adjusted the Lahiri value until the KP sub-lord assignments correctly retrodicted those events. His followers treat this specific ayanamsa as non-negotiable.
KP Sub-Lord Theory: The 30-Second Version
Traditional Vedic astrology: "Jupiter is in Pushya nakshatra in Cancer. Jupiter rules the 9th and 12th houses."
KP astrology: "Jupiter is in Pushya nakshatra, Saturn sub-lord, Mercury sub-sub-lord. The sub-lord Saturn rules the 7th and 8th cusps. Therefore, the 4th house matters (Jupiter is significator) will manifest through 7th/8th house themes."
The sub-lord assignment is entirely dependent on the exact ayanamsa value. Wrong ayanamsa = wrong sub-lord = wrong prediction framework.
Other Ayanamsa Systems
Beyond the big three, several other ayanamsa systems exist. Most developers will not need them, but a comprehensive API should support them.
| System | Approx. 2026 Value | Reference Point / Notes |
|---|---|---|
| Lahiri (Chitrapaksha) | 24.18 deg | Spica at 0 deg Libra. Indian government standard. |
| Raman | 22.67 deg | B.V. Raman's calculation. Zero-date ~397 CE. |
| KP (Krishnamurti) | 24.07 deg | Fine-tuned from Lahiri for sub-lord accuracy. |
| Fagan-Bradley | 25.07 deg | Western sidereal. Cyril Fagan + Donald Bradley. Zero-date ~221 CE. Used by Western siderealists. |
| True Chitra | 24.12 deg | Spica's true observed position (accounts for proper motion). Varies slightly from Lahiri. |
| Galactic Center | ~25.19 deg | Anchored to the galactic center at 0 deg Sagittarius. Astronomical but rarely used in traditional practice. |
| Yukteshwar | 22.49 deg | Swami Sri Yukteshwar (Paramahansa Yogananda's guru). Based on yuga cycle theory. Zero-date ~499 CE. |
| Tropical (none) | 0.00 deg | No correction. Equinox-based. Western standard. |
Fagan-Bradley deserves a brief note because it shows up in Western sidereal astrology, which is a small but growing movement. Cyril Fagan argued in the 1940s-1960s that Western astrology had originally been sidereal (based on Babylonian practice) and that the tropical system was a later Greek innovation. His ayanamsa differs from Lahiri by about 0.89 degrees. If you encounter a Western sidereal astrologer asking for API access, they want Fagan-Bradley.
Yukteshwar's ayanamsa comes from The Holy Science (1894), where he argued for a 24,000-year yuga cycle rather than the standard 25,772-year precession cycle. This gives a different annual precession rate and therefore a different accumulated ayanamsa. It has a following among Yogananda's Self-Realization Fellowship communities but is rare in mainstream jyotish practice.
When the Choice Actually Matters: A Concrete Example
Theory is fine. Let us look at real numbers. Consider a person born on March 28, 1990 at 22:15 IST in Mumbai (18.9750 N, 72.8258 E).
Suppose the Moon's tropical longitude at this moment is 174.32 degrees (24 degrees 19 minutes Virgo in tropical).
| Ayanamsa | Value (1990) | Moon Sidereal | Sign | Nakshatra | Starting Dasha |
|---|---|---|---|---|---|
| Lahiri | 23.72 deg | 150.60 deg | Virgo (0 deg 36 min) | Uttara Phalguni (pada 2) | Sun |
| Raman | 22.22 deg | 152.10 deg | Virgo (2 deg 6 min) | Uttara Phalguni (pada 2) | Sun |
| Fagan-Bradley | 24.61 deg | 149.71 deg | Leo (29 deg 43 min) | Uttara Phalguni (pada 1) | Sun |
Notice what happened with Fagan-Bradley. The Moon dropped below the Leo-Virgo boundary. The person's Moon sign changed. Their entire rashi-based analysis (which forms the backbone of transit predictions) is now Leo instead of Virgo. The nakshatra pada shifted from 2 to 1, which changes the sub-lord in KP and the navamsa sign in traditional jyotish.
Now consider a more dramatic borderline case. If this person's Moon were at tropical 173.85 degrees instead:
- Lahiri: Moon at 150.13 deg = Virgo, Hasta nakshatra (pada 4). Dasha lord = Moon.
- Raman: Moon at 151.63 deg = Virgo, Chitra nakshatra (pada 1). Dasha lord = Mars.
The nakshatra changed. The Vimshottari dasha starting lord went from Moon (10 years) to Mars (7 years). The entire dasha sequence — the primary predictive tool in Vedic astrology — is reshuffled for the person's entire life. Moon mahadasha is 10 years followed by Mars (7), then Rahu (18). Mars mahadasha is 7 years followed by Rahu (18), then Jupiter (16). The timing of every major life prediction diverges.
This is not a theoretical edge case. Planets spend time at every degree of the zodiac. Roughly 1 in 30 charts will have at least one planet within the 1.5-degree Lahiri-Raman difference zone. For a platform processing thousands of charts per day, hundreds of users are affected.
Using Ayanamsa via the Vedika API
Vedika API supports all major ayanamsa systems. The ayanamsa is specified as a parameter in the request body. If omitted, the default is lahiri.
Getting Planetary Positions with Different Ayanamsa
// Get planetary positions with Lahiri ayanamsa (default)
const response = await fetch('https://api.vedika.io/v2/astrology/planets', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
},
body: JSON.stringify({
datetime: '1990-03-28T22:15:00+05:30',
latitude: 18.975,
longitude: 72.8258,
ayanamsa: 'lahiri'
})
});
const data = await response.json();
// data.ayanamsa => 23.7234 (the computed value for this date)
// data.planets[1].sign => "Virgo"
// data.planets[1].signDegree => 0.6012
// data.planets[1].nakshatra => "Uttara Phalguni"
Comparing Ayanamsa Systems Programmatically
// Compare positions across ayanamsa systems
const ayanamsaSystems = ['lahiri', 'raman', 'krishnamurti',
'fagan_bradley', 'true_chitra'];
const birthData = {
datetime: '1990-03-28T22:15:00+05:30',
latitude: 18.975,
longitude: 72.8258
};
const results = await Promise.all(
ayanamsaSystems.map(async (system) => {
const res = await fetch('https://api.vedika.io/v2/astrology/planets', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
},
body: JSON.stringify({ ...birthData, ayanamsa: system })
});
const data = await res.json();
return { system, ayanamsa: data.ayanamsa, planets: data.planets };
})
);
// Find planets that change signs between systems
const moon = results.map(r => ({
system: r.system,
ayanamsa: r.ayanamsa,
moonSign: r.planets.find(p => p.name === 'Moon').sign,
moonDegree: r.planets.find(p => p.name === 'Moon').signDegree,
moonNakshatra: r.planets.find(p => p.name === 'Moon').nakshatra
}));
console.table(moon);
// system | ayanamsa | moonSign | moonDegree | moonNakshatra
// lahiri | 23.7234 | Virgo | 0.6012 | Uttara Phalguni
// raman | 22.2156 | Virgo | 2.1090 | Uttara Phalguni
// krishnamurti | 23.6217 | Virgo | 0.7029 | Uttara Phalguni
// fagan_bradley | 24.6102 | Leo | 29.7144 | Uttara Phalguni
// true_chitra | 23.6645 | Virgo | 0.6601 | Uttara Phalguni
Python Example: Dasha Calculation with KP Ayanamsa
# Python: Get dasha periods using KP ayanamsa
import requests
response = requests.post(
'https://api.vedika.io/v2/astrology/vimshottari-dasha',
headers={
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
},
json={
'datetime': '1990-03-28T22:15:00+05:30',
'latitude': 18.975,
'longitude': 72.8258,
'ayanamsa': 'krishnamurti' # KP system
}
)
dashas = response.json()
# dashas.currentMahadasha => { lord: "Sun", start: "...", end: "..." }
# dashas.currentAntardasha => { lord: "Venus", start: "...", end: "..." }
# dashas.periods => [ ... full Vimshottari timeline ... ]
# Compare: same request with 'raman' might give a different
# currentMahadasha lord if Moon is near a nakshatra boundary
Supported Ayanamsa Values
// All supported ayanamsa parameter values:
{
"lahiri": // Chitrapaksha. Indian government standard. Default.
"raman": // B.V. Raman's calculation.
"krishnamurti": // KP system. ~6 arcmin from Lahiri.
"fagan_bradley": // Western sidereal (Fagan-Bradley).
"true_chitra": // True observed Spica position.
"galactic_center":// Galactic center at 0 deg Sagittarius.
"none": // Tropical (Western). No sidereal correction.
}
Common Gotchas for Developers
These are mistakes we have seen in production integrations. They are easy to make and hard to debug because the output looks reasonable — it is just wrong enough to upset an astrologer.
1. Mixing ayanamsa between API calls
You fetch planets with ayanamsa: 'lahiri', then fetch dashas with ayanamsa: 'raman' (or worse, forget to specify it on one call and get a different default from another provider). The dasha periods now do not match the planet positions. The user sees Moon in Virgo but the dasha says Moon-period started in 1987, which only makes sense if Moon were in Leo. Consistency across all API calls for the same chart is mandatory.
Anti-pattern
// DON'T: inconsistent ayanamsa across calls
const planets = await vedika.planets({ ...birth, ayanamsa: 'lahiri' });
const dashas = await vedika.dashas({ ...birth }); // forgot ayanamsa
const houses = await otherApi.houses({ ...birth }); // different provider, different default
Correct pattern
// DO: set ayanamsa once, use everywhere
const AYANAMSA = 'lahiri';
const planets = await vedika.planets({ ...birth, ayanamsa: AYANAMSA });
const dashas = await vedika.dashas({ ...birth, ayanamsa: AYANAMSA });
const houses = await vedika.houses({ ...birth, ayanamsa: AYANAMSA });
2. Default ayanamsa varies by provider
Vedika defaults to Lahiri. Some other APIs default to tropical (no ayanamsa correction). If you are migrating from another provider and do not explicitly set the ayanamsa parameter, you might silently shift every chart by 24 degrees. Your test suite will not catch this unless you validate specific planet positions against known charts.
3. Birth time matters more than ayanamsa choice
A 4-minute error in birth time shifts the ascendant by approximately 1 degree. This is comparable to the Lahiri-Raman difference (1.5 degrees) and much larger than the Lahiri-KP difference (0.1 degrees). If your users are entering approximate birth times ("around 3 PM"), the ayanamsa difference is noise compared to the birth time uncertainty.
This does not mean ayanamsa does not matter. It means that if you are going to invest engineering time in precision, birth time rectification is higher leverage than ayanamsa selection for most applications.
4. Never compare charts computed with different ayanamsa
Synastry (relationship compatibility) compares two charts. If chart A was computed with Lahiri and chart B with Raman, the comparison is meaningless. Aspects, conjunctions, and sign-based compatibility metrics all assume a common reference frame. This sounds obvious, but it happens when users bring charts from different apps to your platform.
5. Ayanamsa is not a setting — it is a coordinate system
Some developers treat ayanamsa like a theme preference or display option. It is not. Changing the ayanamsa changes the mathematical input to every calculation downstream. Do not put it in a settings panel where users might toggle it casually without understanding that it invalidates all previously generated readings.
6. Storing ayanamsa alongside chart data
When you persist computed chart data, store the ayanamsa system used and the computed ayanamsa value (in degrees). If you do not, you cannot reproduce the calculation later. Ayanamsa values drift by ~50 arcseconds per year, so "lahiri" alone is not sufficient — you also need the datetime to recompute, or store the exact numeric value used.
7. The fractional degree trap
When displaying sidereal longitude, some developers round to the nearest degree. For a planet at 29.95 degrees Leo, that rounds to 30 degrees — which is 0 degrees Virgo. You just changed the planet's sign by rounding. Always display at least the minute of arc (29 deg 57 min Leo), and do not round for internal calculations.
Honest Limitations: No Ayanamsa is "Correct"
Here is the uncomfortable truth that astrology API documentation rarely states explicitly: no ayanamsa value is astronomically "correct" in any absolute sense. The tropical zodiac is defined by the equinox, which is an observable astronomical event. The sidereal zodiac is defined by an arbitrary reference star and a historically estimated zero-date. Different scholars estimated different zero-dates. None can be verified because we do not have precise astronomical observations from 285 CE or 397 CE.
The differences between ayanamsa systems are not errors. They are different models of the same underlying astronomical phenomenon (precession), calibrated against different historical data and different philosophical assumptions about when the zodiacs coincided.
As a developer, your job is not to decide which ayanamsa is "right." Your job is to:
- Support the systems your users need
- Default to the most common one for your target market (Lahiri for India)
- Apply the chosen system consistently across all calculations
- Clearly label which ayanamsa was used in any output
- Let the astrologer choose — do not make the choice for them
The worst thing you can do is hardcode an ayanamsa without telling your users which one you are using. The second worst thing is not supporting the system their tradition requires.
Swiss Ephemeris, which powers our planetary calculations, supports over 30 ayanamsa systems. Vedika API exposes the most commonly requested ones. If your use case requires a system we do not currently support, the underlying calculation engine can handle it.
Quick Reference: Choosing an Ayanamsa
| Your Use Case | Recommended Ayanamsa | API Value |
|---|---|---|
| General Vedic astrology app (Indian market) | Lahiri | lahiri |
| Panchang / muhurta / calendar | Lahiri | lahiri |
| KP (Krishnamurti Paddhati) practitioner tool | KP (Krishnamurti) | krishnamurti |
| B.V. Raman tradition astrologer | Raman | raman |
| Western sidereal astrology | Fagan-Bradley | fagan_bradley |
| Western tropical astrology | None (tropical) | none |
| Multi-tradition platform (let user choose) | All of the above | User-selectable |
Build with Swiss Ephemeris Precision
Vedika API computes planetary positions using Swiss Ephemeris with support for Lahiri, Raman, KP, Fagan-Bradley, and more. One parameter change, consistent results across 120+ endpoints.
Specify ayanamsa once. Get positions, dashas, nakshatras, house cusps, and compatibility — all in the same coordinate system.
Get API Key