Who Uses Moira
Three distinct audiences, each with different needs, different workflows, and different reasons to choose Moira over the alternatives.
Developers
Building production applications
Moira's MIT license and layered import surfaces make it a practical foundation for applications that need astronomical computation under a permissive engine license. Teams remain responsible for the terms of other code, data, dependencies, and distribution choices.
- REST API backend for chart calculations
- Batch processing of historical ephemeris data
- Real-time transit and progression alerts
- Synastry and composite chart generation
- Integration with existing Python data pipelines
- Custom aspect orb policies via AspectPolicy
These summaries are product information, not legal advice. Review the official license texts and obtain legal advice for your architecture and distribution.
from moira.facade import Moira, HouseSystem
from datetime import datetime, timezone
# Initialize once; kernel auto-detected
m = Moira()
def calculate_chart(birth_dt: datetime, lat: float, lon: float) -> dict:
chart = m.chart(birth_dt)
houses = m.houses(birth_dt, latitude=lat, longitude=lon,
system=HouseSystem.PLACIDUS)
aspects = m.aspects(chart)
return {
"planets": {
name: {"longitude": p.longitude, "speed": p.speed}
for name, p in chart.planets.items()
},
"asc": houses.asc,
"mc": houses.mc,
"aspects": [
{"body1": a.body1, "aspect": str(a.aspect), "orb": a.orb}
for a in aspects
],
}Researchers
Reproducible astronomical studies
Moira publishes named calculation stages, scoped validation reports, versioned numerical receipts, and a physical ΔT model for research that requires reproducible methods and explicit evidence boundaries.
- Named reduction pipeline with inspectable per-stage evidence
- Physical ΔT model with calibrated ±1σ uncertainty
- Gaia DR3 stellar positions with parallax and proper motion
- Asteroid family membership catalog (342 families; 200,726 unique numbered asteroids; 221,095 membership rows)
- Light-time split: observed vs. true stellar position
- Full orbital elements from SPICE state vectors on demand
from moira.facade import Moira, delta_t, delta_t_breakdown
from moira.classical import star_at
from moira.stars import star_light_time_split
from datetime import datetime, timezone
m = Moira(kernel_path="/data/de441.bsp")
jd_tt = 2451545.0 # J2000.0
# Inspect ΔT with full breakdown
dt_val = delta_t(jd_tt)
breakdown = delta_t_breakdown(jd_tt)
print(f"ΔT = {dt_val:.6f}s ±{breakdown.uncertainty_1sigma:.4f}s")
# Gaia DR3 stellar positions with light-time split
observed, true_pos = star_light_time_split("Arcturus", jd_tt)
print(f"Observed: {observed.longitude:.6f}°")
print(f"True: {true_pos.longitude:.6f}°")
print(f"Δ = {abs(observed.longitude - true_pos.longitude)*3600:.4f} arcsec")Practitioners
Professional astrological work
Moira provides broad Western, Hellenistic, Medieval, and Vedic computation surfaces, from primary directions to Vimshottari Dasha, in a single library.
- 22 house systems including Placidus, Koch, Regiomontanus, Whole Sign, and more
- 512 Arabic Parts / Lots
- Primary directions with explicit latitude doctrine
- Firdaria, Zodiacal Releasing, Profections
- Vimshottari Dasha with antardasha and pratyantardasha
- Synastry, composite, and Davison charts
- Harmograms (H1–H5 spectral harmonic analysis)
- Heliacal and acronychal phenomena
from moira.vedic import vimshottari
from moira.classical import firdaria, zodiacal_releasing
from moira.predictive import synastry_aspects, composite_chart
# Vimshottari Dasha with sub-periods
periods = vimshottari(
chart.planets["Moon"].longitude,
chart.jd_ut,
levels=3,
)
for period in periods[:3]:
print(f"{period.planet:10s} {period.start_jd:.5f} → {period.end_jd:.5f}")
for sub in period.sub[:2]:
print(f" {sub.planet:10s} {sub.start_jd:.5f}")
# Synastry between two charts
chart_b = m.chart(partner_dt)
synastry = synastry_aspects(chart, chart_b)
for a in synastry[:5]:
print(f"{a.body1} {a.aspect} {a.body2} — orb {a.orb:.2f}°")Ready to get started?
Install Moira, download a JPL kernel, and compute your first chart in under five minutes.