A Complete Computational Stack
From raw JPL kernel reads to advanced predictive techniques — all in one library, all in Python.
JPL DE440 Foundation
Built on NASA's most accurate planetary ephemeris. Iterative light-time correction, multi-body relativistic deflection, annual aberration — every step documented and inspectable.
Auditable Calculations
Every intermediate value is accessible. Python API owns orchestration and per-stage controls. Explicit computational policy, deterministic behavior, and documented residuals against ERFA/SOFA.
1,809-Star Sovereign Registry
Sovereign registry with proper motion, parallax, epoch propagation, and Stellar Quality classification. Audited anchor residual: 0.00048 arcseconds (J1000–J3000).
22 House Systems + Aspect Patterns
Placidus, Koch, Regiomontanus, Campanus, Morinus, Porphyry, Whole Sign, Equal, APC, Sunshine, and more. 24 zodiacal aspects (including Septile, Novile & Quintile series), 21 multi-body patterns (T-Square, Grand Trine, Yod, Kite…), declination parallels, antiscia.
Comprehensive Predictive Engine
Secondary/tertiary/minor progressions, primary directions (Placidus semi-arc & mundane), solar/lunar returns, Firdaria, Zodiacal Releasing, Vimshottari Dasha, and more.
Advanced Astronomy
NASA-canon eclipse solver, heliacal phenomena, occultations, astrocartography, galactic coordinates, parans, retrograde stations, harmonics, and synastry.
Validation-First Design
Comprehensive test suite referencing authoritative sources. Validation reports with documented residuals. Reproducible pipelines for research-grade work.
887,000+ Minor Planets
User-supplied .bsp kernels via integrated daf_writer GUI for any numbered minor planet in the JPL catalog. Classical asteroids, Centaurs, and Trans-Neptunians bundled. Kernel Manager GUI for one-click download.
From install to chart in five lines
Moira's API is designed to be explicit and readable. No magic defaults, no hidden configuration. Every parameter has a clear name and a documented effect.
1from datetime import datetime, timezone2from moira import Moira, HouseSystem3from moira.patterns import find_all_patterns4from moira.houses import house_of56m = Moira() # auto-discovers installed JPL kernel78# 1. Planetary positions - full JPL DE441 reduction9chart = m.chart(datetime(2000, 1, 1, 12, 0, tzinfo=timezone.utc))10print(f"Sun: {chart.planets['Sun'].longitude:.6f} deg")11print(f"Moon: {chart.planets['Moon'].longitude:.6f} deg")1213# 2. House cusps (Placidus, London)14houses = m.houses(15 datetime(2000, 1, 1, 12, 0, tzinfo=timezone.utc),16 latitude=51.5074, longitude=-0.1278,17 system=HouseSystem.PLACIDUS,18)19print(f"ASC: {houses.asc:.4f} deg | MC: {houses.mc:.4f} deg")2021# 3. Aspect patterns (21 multi-body configurations)22patterns = find_all_patterns(chart.longitudes())23for p in patterns:24 print(f"{p.name}: {', '.join(p.bodies)}")2526# 4. House placement lookup27sun_house = house_of(chart.planets['Sun'].longitude, houses)28print(f"Sun is in house: {sun_house}")
Moira vs. the competition
Direct feature comparison with other Python astrology libraries.
| Feature | Moira | Kerykeion | Immanuel | Swiss Eph. |
|---|---|---|---|---|
| Python API with inspectable stages | ||||
| Inspectable intermediate stages | ||||
| JPL DE440 kernel support | ||||
| IAU-aligned precession/nutation | ||||
| Fixed star catalog | partial | |||
| 25+ house systems | partial | partial | ||
| Eclipse & occultation engine | partial | |||
| Heliacal phenomena | ||||
| 40+ ayanamshas (Vedic sidereal) | ||||
| Primary directions (built-in) | ||||
| Vimshottari Dasha & Nakshatras | ||||
| Astrocartography (ACG lines) | ||||
| 499 Arabic Parts | ||||
| Documented validation residuals | ||||
| MIT License (commercial friendly) | ||||
| Harmograms / spectral research engine | ||||
| Synastry, composite & Davison charts | partial | partial | ||
| SVG chart generation |
* Kerykeion and Immanuel are wrappers over the Swiss Ephemeris C library (pyswisseph). Swiss Ephemeris is a powerful C library with 25+ house systems, eclipses, and fixed stars — but it requires AGPL or a paid commercial license, uses compiled C binaries, and does not expose intermediate calculation stages. Primary directions, Dasha systems, and astrocartography are not part of its core API and require separate implementation.
Moira vs. Swiss Ephemeris
Swiss Ephemeris is a serious, well-validated C library. This is a developer-to-developer comparison of what each approach offers and where the trade-offs lie.
Swiss Ephemeris
Swiss Ephemeris is mature, accurate, and widely deployed. The AGPL license means any application using it must also be open-sourced — or you pay for a commercial license. The C binary means you cannot step through the calculation, modify a stage, or validate an intermediate value without reading C source.
Moira
Moira's Python API orchestrates a C++17 native core for performance while keeping every stage inspectable. The MIT license removes all commercial friction. Features like primary directions, Dasha systems, harmograms, and astrocartography are first-class citizens, not afterthoughts.
When to choose which

Python orchestration. C++17 performance.
Moira runs a C++17 native extension (_moira_native) for performance-critical paths, while the Python layer owns the API surface, orchestration, and per-stage controls. Every transformation is named, documented, and individually toggleable.
Ready to build with Moira?
Install in seconds. MIT licensed. No hidden dependencies.