📖 Read the human story: My Natal Rāśi Chart Revealed a Marriage Across Borders
Get the data behind a Jagannatha Hora (JHora) natal Rāśi chart with a few lines of JavaScript and a simple HTTPS request.
This is the first small, public example from VedAstro's full-binary reverse engineering of the original JHora Windows application. The calculation logic was not guessed from screenshots or fitted only to the program's output: we analyzed the compiled native executable itself, decompiled its machine code, traced its internal call graph and data references, mapped UI commands to their handlers, and translated recovered behavior into testable open-source calculations.
JHora is a native 32-bit x86 application, not a .NET program whose original source can simply be extracted. We used Ghidra and purpose-built analysis tooling to recover C-like pseudocode from the actual instructions in jhora.exe, with complete assembly retained wherever high-level lifting was not possible.
The current whole-binary recovery inventory includes:
- 7,535 functions inventoried: 7,533 successfully decompiled to C-like output, with the remaining two recovered as complete x86 assembly.
- 70,305 call records and 8,535 global-variable references mapped into a searchable structural database.
- 1,229 MFC message-map entries recovered, mapping all 554 distinct menu command IDs to exact handlers.
- 791 functions with feature evidence, including 254 functions cited in detailed recovery documents and 133 with reviewed semantic names.
Recovered subsystems include ephemeris and houses, divisional charts, Nakshatra and Rāśi dasas, Ashtakavarga, planetary strengths, yogas, Panchanga, transits, eclipses, Tajaka/Varshaphala, special lagnas, upagrahas, and multiple chakras.
These figures mean 100% low-level function coverage, not that every function has already been given a final astrological name or independently validated. Semantic reconstruction and test-vector verification continue feature by feature.
The natal Rāśi chart—also called the D-1 chart—is the foundation of a Vedic horoscope. The recovered workflow can be expressed as two reusable calculations:
AllPlanetRasiSignsreturns the sidereal sign and degree of the Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rāhu, and Ketu.AllHouseRasiSignsreturns the sign and degree of all twelve houses.House1is the Lagna or Ascendant.
Together, those two responses contain the placements needed to construct the natal Rāśi chart.
You need Node.js 18 or newer. There are no packages to install and no API key is required for this example.
git clone https://github.com/VedAstro/Natal-Chart-Rasi-Jagannatha-Hora-Reverse-Engineered.git
cd Natal-Chart-Rasi-Jagannatha-Hora-Reverse-Engineered
npm startThe default command uses POST with exact latitude and longitude. Edit birthDetails near the top of index.js to use your own date, time, UTC offset, and location.
Example output begins like this:
{
"chart": "Natal Rasi (D-1)",
"requestMethod": "POST",
"ayanamsa": "LAHIRI",
"ascendant": "Capricorn : 25° 20' 47",
"planets": {
"Sun": "Virgo : 29° 27' 25",
"Moon": "Aquarius : 9° 46' 4"
}
}The actual output includes all nine planets and all twelve houses.
POST is recommended because it sends precise coordinates instead of asking the API to resolve a place name.
const response = await fetch(
"https://api.vedastro.org/api/Calculate/AllPlanetRasiSigns",
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
Ayanamsa: "LAHIRI",
Time: {
StdTime: "14:20 16/10/1918 +05:30",
Location: {
Name: "Bangalore, India",
Longitude: 77.5946,
Latitude: 12.9716
}
}
})
}
);
const data = await response.json();
console.log(data.Payload.AllPlanetRasiSigns);Change the calculator name to AllHouseRasiSigns with the same body to retrieve the houses and Lagna.
For a URL-only request, run:
npm run start:getOr open this endpoint directly:
https://api.vedastro.org/api/Calculate/AllPlanetRasiSigns/Location/Bangalore,India/Time/14:20/16/10/1918/%2B05:30/Ayanamsa/LAHIRI
Replace AllPlanetRasiSigns with AllHouseRasiSigns for the houses. In a GET request, the API resolves the location name to coordinates. Use POST when exact coordinates are important.
StdTimeusesHH:mm DD/MM/YYYY ±HH:mmand must include the historical UTC offset at the birthplace.- This example uses the Lahiri ayanāṃśa, matching the common JHora configuration. A different ayanāṃśa changes the sidereal positions.
- Successful responses use the envelope
{ "Status": "Pass", "Payload": ... }. - Astrology software settings and ephemeris versions matter. For reproducible comparisons, keep the time, coordinates, UTC offset, ayanāṃśa, and node settings identical.
JHora made a vast body of Vedic astrology calculations available inside a closed desktop application. VedAstro is turning the results of direct executable decompilation into small, documented, testable open-source features and exposing them as ordinary JSON over HTTPS—usable from JavaScript, Python, mobile apps, research notebooks, and AI tools.
Explore the wider open-source project at VedAstro.org and github.com/VedAstro/VedAstro.
This is an independent educational reverse-engineering project. Jagannatha Hora and JHora belong to their respective owner(s). This repository is not affiliated with or endorsed by the original application or its authors. Although the research analyzed the original compiled executable, this public repository contains no JHora executable, program resources, or proprietary source code.
MIT © VedAstro
