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.





