Most "Indian" astrology apps quietly run on the Swiss Ephemeris — a Western-built library under AGPL/commercial licensing. It's excellent (sub-arcsecond, and more precise than what I'll describe below), but it means the trust chain of a supposedly Bhāratīya product ends at a foreign binary. We wanted to know: what does sovereignty actually cost in accuracy if you compute the sky from classical Indian texts instead?
This is the honest write-up of building Bharat Ephemeris from scratch and benchmarking it against NASA/JPL Horizons — including where we lose.
Method
The pipeline is three classical layers, no foreign ephemeris in the chain:
1. Mean longitudes — Sūrya-Siddhānta. Each body's mean position is propagated from the Siddhāntic mean motions (revolutions per Mahāyuga → daily motion). This is the deterministic backbone.
2. Corrections — Kerala-school Tantrasaṅgraha. On top of the mean position we apply the manda correction (the equation of centre — orbital eccentricity) and the śīghra correction (the heliocentric→geocentric transformation that produces retrograde loops). The Kerala school's formulations are remarkably close to the modern two-body solution.
3. Sidereal frame — Lahiri ayanāṃśa. Finally we subtract the Lahiri ayanāṃśa (the Government-of-India Rāṣṭrīya Pañcāṅga standard) to land in the sidereal zodiac Vedic practitioners actually use.
No Swiss Ephemeris, no JPL kernel at runtime — just the classical math, implemented and tested.
The bake-off: validation against NASA/JPL Horizons
A self-built engine is worthless if you can't say how wrong it is. So we validate against NASA/JPL Horizons — the modern ground truth — over a date grid, and report the p95 error per body (95th-percentile, not a cherry-picked best case):
- Sun: within ~0.1 arcminutes (p95)
- Moon: within ~1 arcminute (p95)
Acknowledging the tradeoff (where we lose)
Let's be direct: Swiss Ephemeris is more precise than we are. It's sub-arcsecond; our Moon sits around an arcminute. If raw precision were the only axis, you'd pick Swiss Ephemeris every time.
What ~1 arcminute buys instead is a fully auditable, fully self-built stack — every number traceable to a classical text and our own code, with no third-party binary you have to trust on faith. For a product whose entire claim is Bhāratīya provenance, an arcminute that you can fully audit beats a hidden arcsecond you can't. That's the honest tradeoff, stated up front rather than buried.
Why publish error bars at all?
Because a number you can audit is worth more than a marketing adjective. "Most accurate" is unfalsifiable; "Sun ~0.1′, Moon ~1′ vs NASA-JPL, p95" is a claim you can check. Publishing the error bar is the difference between asking for trust and earning it — and it's the only honest way to compete with a library that genuinely is more precise than you.
Closing
If you want to see it, the live bake-off and a free chart are here: bharatephemeris.com/accuracy.
The mission is narrow and honest: a 100% Bhāratīya engine with published error bars. We locate where the sky actually is — we don't predict doom, and we don't sell remedies or gemstones.
Top comments (1)
This post is essentially about building a “Bharatiya Ephemeris” derived from classical Indian astronomical/astrological texts and benchmarking it against NASA JPL (DE/DE441-type) ephemerides.
What the idea is really about
At its core, this kind of project sits in a very specific intersection:
NASA JPL ephemerides (DE440/DE441) → modern gold-standard numerical integration of solar system motion
Classical texts (Sūrya Siddhānta, etc.) → pre-modern mathematical models of planetary motion
Benchmarking layer → comparing “text-based computed positions” vs high-precision physical simulation
Modern ephemerides like JPL are used for spacecraft navigation and are accurate to sub-arcsecond precision, built from observational data and numerical integration of gravitational models . That’s fundamentally different from classical astronomical models, which rely on geometric/periodic approximations rather than full-body gravitational simulation.
Why this is interesting (and hard)
The interesting part of this project is not just cultural — it’s technical:
Classical models are algorithmic, not observational
They approximate planetary motion using periodic functions and corrections.
They were designed for naked-eye astronomy, not milliarcsecond precision.
JPL is physics-first, not theory-first
Built from decades of observational data + numerical integration.
Continuously refined for mission-critical navigation.
So the benchmark is asymmetrical by design
You’re comparing:
symbolic/approximate mathematical systems
vs
data-fitted physical simulation of the solar system
That means any deviation you find is expected — but the size and pattern of deviation is where the real insight lives.
The real value of projects like this
Even if the classical model doesn’t “match” JPL numerically, this kind of work can still produce meaningful outcomes:
understanding how ancient algorithms approximate periodic motion
identifying where classical corrections diverge most (planet, epoch, latitude, etc.)
building hybrid models (classical structure + modern ephemeris backend)
or creating reproducible historical simulation tools
The key takeaway
This isn’t really a “who is more accurate” problem.
It’s more like:
classical astronomy is a model of meaning and approximation, while JPL ephemerides are a model of physical reality
So benchmarking them is less about correctness and more about mapping two fundamentally different world models onto the same coordinate system.
Projects like this are valuable mainly when they stay honest about that distinction 🤝