| Crates.io | panchangam |
| lib.rs | panchangam |
| version | 0.2.1 |
| created_at | 2026-01-10 04:07:21.410643+00 |
| updated_at | 2026-01-25 10:49:57.990185+00 |
| description | High-precision Vedic Panchangam calculations using Swiss Ephemeris |
| homepage | |
| repository | https://github.com/fusionstrings/panchangam |
| max_upload_size | |
| id | 2033428 |
| size | 715,781 |
High-Precision Vedic Astrology & Calendar Library
Powered by Swiss Ephemeris | Compiled to WebAssembly | Built for the Edge
Most Vedic astrology libraries rely on static lookup tables or simplified algorithms that trade accuracy for speed. Panchangam bridges the gap between ancient Vedic requirements and modern astronomical precision.
Panchangam is available on JSR and NPM.
Deno:
deno add jsr:@fusionstrings/panchangam
Node.js / Bun:
npm install @fusionstrings/panchangam
Calculate comprehensive Panchang data including precise end times.
import { calculate_daily_panchang, Location } from "@fusionstrings/panchangam";
// 1. Define Location: New Delhi (28.61 N, 77.20 E, 225m)
const delhi = new Location(28.6139, 77.2090, 225.0);
// 2. Calculate for January 1, 2024
// params: (year, month, day, location, ayanamsha_mode)
// mode 1 = Lahiri (Standard)
const result = calculate_daily_panchang(2024, 1, 1, delhi, 1);
// 3. Output Results
console.log(`Sunrise: ${new Date(result.sunrise).toLocaleTimeString()}`);
console.log(`Tithi: ${result.tithi_name}`);
console.log(
` - Ends at: ${
result.tithi_end_time
? new Date(result.tithi_end_time).toLocaleString()
: "N/A"
}`,
);
console.log(`Nakshatra: ${result.nakshatra_name}`);
console.log(
` - Ends at: ${
result.nakshatra_end_time
? new Date(result.nakshatra_end_time).toLocaleString()
: "N/A"
}`,
);
Get precise sidereal positions and dignity status for all planets.
import { calculate_planets, p_julday } from "@fusionstrings/panchangam";
// Julian Day for calculation
const jd = p_julday(2024, 1, 1, 12.0, 1); // Noon UT
// Calculate Sidereal positions (Mode 1 = Lahiri)
const planets = calculate_planets(jd, 1);
planets.forEach((p) => {
console.log(`${p.name}: ${p.longitude.toFixed(2)}°`);
console.log(` Dignity: ${p.dignity}`); // Exalted, Own Sign, Friend, etc.
console.log(` Speed: ${p.speed.toFixed(4)}/day`);
if (p.is_retrograde) console.log(" [Retrograde]");
});
Determine auspicious and inauspicious time windows.
// Accessed via the daily panchang result
const muhurats = result.muhurats;
console.log("--- Inauspicious Periods ---");
console.log(
`Rahu Kalam: ${new Date(muhurats.rahu_kalam.start).toLocaleTimeString()} - ${
new Date(muhurats.rahu_kalam.end).toLocaleTimeString()
}`,
);
console.log(
`Yamaganda: ${new Date(muhurats.yamaganda.start).toLocaleTimeString()} - ${
new Date(muhurats.yamaganda.end).toLocaleTimeString()
}`,
);
console.log("--- Auspicious Periods ---");
console.log(
`Brahma Muhurta: ${
new Date(muhurats.brahma_muhurta.start).toLocaleTimeString()
}`,
);
console.log(
`Abhijit Muhurta: ${
new Date(muhurats.abhijit_muhurta.start).toLocaleTimeString()
}`,
);
Detect planetary wars where planets are within 1° of each other.
import { check_graha_yuddha, p_julday } from "@fusionstrings/panchangam";
const jd = p_julday(2024, 1, 1, 12.0, 1);
const wars = check_graha_yuddha(jd, 1) as any[]; // Mode 1 = Lahiri
if (wars.length > 0) {
console.log("Planetary War Detected!");
wars.forEach((war) => {
console.log(
`${war.planet1_name} vs ${war.planet2_name} (Diff: ${
war.longitude_diff.toFixed(
4,
)
}°)`,
);
console.log(`Winner: Planet ID ${war.winner_id} (Brighter)`);
});
} else {
console.log("No planetary wars currently.");
}
Calculate the current ruling planetary periods.
import { calculate_vimshottari } from "@fusionstrings/panchangam";
// Birth details
const birth_moon_long = 45.5; // Example longitude
const birth_time_ms = new Date("1990-01-01").getTime();
const current_time_ms = Date.now();
const dasha = calculate_vimshottari(
birth_moon_long,
birth_time_ms,
current_time_ms,
);
console.log(`Current Mahadasha: ${dasha.mahadasha}`);
console.log(`Current Antardasha: ${dasha.antardasha}`);
console.log(`Current Pratyantardasha: ${dasha.pratyantardasha}`);
console.log(
`Ends: ${new Date(dasha.pratyantardasha_end_date).toLocaleDateString()}`,
);
Calculate Ascendant and House Cusps for various systems (Placidus, Whole Sign, etc.).
import {
calculate_houses,
Location,
p_julday,
} from "@fusionstrings/panchangam";
const jd = p_julday(2024, 1, 1, 12.0, 1);
const loc = new Location(28.6139, 77.2090, 0.0);
// 'P' = Placidus, 'W' = Whole Sign, 'E' = Equal
// Mode 1 = Lahiri Ayanamsha (Sidereal)
const houses = calculate_houses(jd, loc.latitude, loc.longitude, "P", 1);
console.log(`Ascendant: ${houses.ascendant.toFixed(2)}°`);
houses.cusps.forEach((cusp, i) => {
console.log(`House ${i + 1}: ${cusp.toFixed(2)}°`);
});
src/lib.rs: Wasm entry point.src/vedic/: Core algorithms (Tithi, Nakshatra, Dignity, Muhurat).src/astronomy/: Swiss Ephemeris wrappers and solvers.scripts/build_npm.ts: Build script.If you want to contribute or build the latest version from source:
Prerequisites:
One-Step Build:
deno task build
This generates:
./lib/panchangam.js: The ESM entry point../lib/panchangam.wasm: The compiled Wasm binary../lib/panchangam.d.ts: Fully typed TypeScript definitions.You can run the full examples provided in the examples/ directory:
# Basic Features (Daily Panchang, Planets, etc.)
deno run -A examples/demo.ts
# Advanced Features (Vargas, Shadbala, Jaimini)
deno run -A examples/demo_advanced.ts
# Ashtakavarga & Special Points
deno run -A examples/demo_ashtakavarga.ts
Run the verification suite:
deno task test
MIT