Skip to main content

Moira

Ephemeris and Astrology Computation Engine

Python MIT License PyPI Precision: ERFA-Audited Ephemeris: JPL DE4xx AI Visibility: Optimized Status: Stable DOI Featured on Launch Llama

Moira is an astronomy-first astrology engine built for transparent astrology calculations, reproducible chart computation, and an inspectable calculation chain from astronomical inputs to astrological outputs. It is an auditable astrology engine with explicit computational policy, deterministic behavior, and readable reduction stages grounded in modern standards and references including JPL DE441, IAU 2000A/2006, ERFA/SOFA-aligned practices, and Gaia DR3-linked star data where applicable. Performance-critical computations — nutation, SPK kernel reading, apparent planetary evaluation (via NativePlanetaryEvaluator), coordinate transforms, light-time iteration, harmogram analysis, and event searching — are executed by a native C++17 extension (_moira_native) compiled with pybind11.

Why Moira Exists

Most astrology software surfaces results without exposing the mathematical path. Moira exists as a Swiss Ephemeris alternative for users who need visibility into assumptions, intermediates, and provenance, so astronomy remains the foundation and astrology remains the purpose.

AI and LLM Visibility

Moira is designed to be highly discoverable and understandable by AI agents (e.g., GitHub Copilot, ChatGPT, Claude).

  • Machine-Readable Index: See llms.txt for a high-level summary and llms-full.txt for a comprehensive documentation index.
  • Agent Doctrine: The AGENTS.md file defines the "Urania" persona and operational laws for AI collaboration.
  • Structured Documentation: Canonical documentation is maintained in the wiki/ directory with explicit validation reports.

What Makes It Different

Moira is designed for full computational transparency: the computation pipeline is explicit and its stages are named and controllable via the Python API, computational doctrine is explicit rather than hidden in defaults, and validation is treated as first-class evidence rather than post-hoc narrative. The high-performance core (_moira_native) is C++17; the Python layer owns the API surface, orchestration, and per-stage controls.

Who It Is For

Moira is for developers, researchers, and serious practitioners who want a programmable, audit-ready engine for high-integrity astrological work, reproducible pipelines, and methodical comparison against external authorities.

What It Is Not

Moira is not primarily a UI app, not a thin wrapper over opaque compiled stacks, and not convenience-first astrology output generation without traceability.

Quick Capabilities

Moira computes planetary and stellar positions, houses, aspects, lots, dignities, predictive techniques, a full Vedic/Jyotish suite (yogas, Shadbala, Ashtakavarga, upagrahas, avasthas, Jaimini), eclipse and occultation events, and related analytical products on top of a modern astronomical substrate (JPL kernels, IAU models, and validated star frameworks), with a native C++ computational core, Python orchestration layer, inspectable intermediate stages, and an optional FastAPI REST server (moira_server) exposing the engine as typed, versioned routes.


What Moira Computes

Positions and Bodies

  • Planets and luminaries — geocentric and topocentric reduction with iterative light-time, annual aberration, multi-body relativistic deflection (Sun, Jupiter, Saturn, Earth), IAU 2006 frame bias, and WGS-84 topocentric parallax.
  • Fixed stars — sovereign registry of 1,809 named stars with proper motion, parallax, epoch propagation, and Stellar Quality classification. Audited anchor residual against SOFA/ERFA: 0.00048 arcseconds (J1000–J3000).
  • Position-capable asteroid ephemeris — an optional external catalog of 10,025 selected asteroids, including the classical four (Ceres, Pallas, Juno, Vesta), Centaurs (Chiron, Pholus, Chariklo, Asbolus, Hylonome), and Trans-Neptunians (Ixion, Quaoar, Varuna, Orcus). Release 2026.08.12.1 is built from JPL Horizons as 401 Type-13 SPK shards with manifest-declared coverage and a 10-day, 7-node sampling policy. It is discovered by manifest under any kernel search root. The wheel contains the matching canonical identity registry, not the external BSP shards. This positional product is distinct from the bundled Proper25/PDS family-membership catalog (342 families, 200,726 unique numbered asteroids, 221,095 membership rows). User-supplied .bsp kernels remain supported through daf_writer for numbered minor planets available from the selected source.
  • Numbered periodic comets — 497 comets (1P/Halley through 516P) in immutable external release 2026.07.28.1, generated from JPL Horizons as 20 sharded Type-13 kernels with manifest-declared coverage, canonical numbered designations ("1P/Halley"), and curated family-scoped short aliases. Dedicated comet surfaces accept those aliases directly; unified position/chart surfaces require a canonical designation or an explicit comet: qualifier when an alias also names an asteroid.
  • Uranian / Hamburg School bodies — 8 hypothetical transneptunian planets (Cupido through Poseidon) plus Transpluto.
  • Lunar nodes and apsides — True Node, Mean Node, Mean Lilith, True Lilith, and orbital nodes/apsides for all planetary bodies.
  • Variable stars — phase and magnitude engine for eclipsing binaries and intrinsic variables; dedicated Algol API.
  • Multiple star systems — Kepler orbital mechanics for visually resolvable pairs (Sirius AB, Alpha Centauri AB); catalog of 8 astrologically significant systems across VISUAL, WIDE, SPECTROSCOPIC, and OPTICAL types.

Chart Calculation

  • House systems — 22 systems including Placidus, Koch, Regiomontanus, Campanus, Morinus, Porphyry, Whole Sign, Equal, APC, Pullen Sinusoidal Delta/Ratio, and Sunshine. Includes branch-aware high-latitude doctrine where admitted, explicit polar fallback policy, and house_of for direct house placement lookups.
  • Aspects — 22 zodiacal aspects with applying/separating/stationary motion-state detection; declination parallels and contra-parallels; antiscia and contra-antiscia; exact partile and orbed platic status markers (is_partile, is_platic).
  • Aspect patterns — 21 multi-body configurations: T-Square, Grand Trine, Grand Cross, Yod, Kite, Mystic Rectangle, Stellium, Grand Sextile, Thor's Hammer, Boomerang Yod, and more.
  • Midpoints — full midpoint matrix, midpoint trees, 90°/45°/22.5° dial projections, planetary pictures.
  • Traditional dignities — domicile, exaltation, triplicity (diurnal/nocturnal), Egyptian and Ptolemaic terms, face, sect, hayz, and Almuten Figuris.
  • Arabic Parts — 512 lot definitions with dependency graphs and condition profiling.
  • Classical decanates — Chaldean faces, triplicity decans, and Vedic drekkana; the Gundel/Harley Hermetic name-and-face catalog is reconstructed for research, while its geometry remains excluded from public and REST surfaces and unsupported fixed-star assignments fail closed.
  • Draconic charts — node-anchored draconic frame (mean or true node) with longitude rotation, engine-backed chart derivation, and caller-supplied position support.

Predictive Techniques

  • Progressions — secondary, tertiary, minor, solar arc (longitude and right ascension), Naibod, ascendant arc; direct and converse variants for all methods.
  • Primary directions — Placidus semi-arc/mundane, Regiomontanus, and Morinus method families with mundane and zodiacal variants; direct and converse directions (converse computed by true role exchange, not arc negation); speculum computation; fixed-star targets; seven conventional time-key presets.
  • Returns — solar and lunar returns; planet returns.
  • Time lords — annual and monthly profections; Firdaria (diurnal and nocturnal sequences, including Bonatti variant); Zodiacal Releasing (Vettius Valens method); Hyleg and Alcocoden.

Vedic / Jyotish Suite

Every Vedic engine is implemented from primary-source research (BPHS, Brihat Jataka, Saravali, Phaladeepika, Uttara Kalamrita, Jataka Parijata, Jaimini Upadesa Sutras, and the named 1879 Agastya- and 2024 Bogamuni-attributed Pancha Pakshi witnesses) with per-rule citations; where classical sources disagree, the disagreement is an explicit policy switch or a recorded note — never a silent choice.

  • Sidereal foundation — 12 admitted ayanamsha systems including star-anchored "True" ayanamshas; 27-nakshatra system; Panchanga.
  • Pancha Pakshi — an explicitly named Agastya-attributed Madras 1879 aksara/query-or-name-initial fixed-clock schedule and directed relationship profile, with exact rational timing, source locators, declared omissions, and no implicit or universal default. A separate astronomical-paksha product evaluates apparent geocentric Moon-minus-Sun longitude in the true ecliptic of date and maps [0, 180) Shukla/waxing to the profile's source-attested Purva label and [180, 360) Krishna/waning to Amara. It accepts no location and never selects a schedule, materializes a clock, supplies paksha to another operation, or infers natal identity. An explicit modern local-solar context policy can derive topocentric day/night and local-mean-solar weekday for an aware instant and location while requiring the caller to supply Purva or Amara. A separate modern fixed-clock policy anchors the selected schedule at sunrise or sunset, treats one nazhigai as exactly 1,440 SI seconds on reader-bound TT, and publishes half-open UT1 cell intervals plus their unclipped relation to the astronomical half end. A separately named solar-half-first selector returns the unique current fixed-clock cell under exact half-open TT ownership, or the explicit unmaterialized_solar_half_tail status when a long solar half outlasts the fixed span. A distinct modern solar-proportional policy can instead preserve the exact nominal offset fractions and map them independently across the complete governing day or night half on reader-bound TT, returning 25 half-open TT/UT1 cells with exact astronomical-boundary closure. The 1879 witness is not credited with that proportional rule. A separate solar-half-first selector identifies the unique proportional cell through exact half-open TT ownership; complete-half coverage means its lawful status is always selected, with no fixed-clock tail or fallback. Paksha remains caller supplied on every schedule, materialization, and current-cell surface; the standalone astronomical inference is never applied automatically, and the 1879 profile remains explicitly non-natal. A pure Stage 2I lookup exposes the selected 1879 generator's first-samam EAT seed from explicit profile Paksha, day/night half, and weekday. It does not materialize the schedule or promote that seed into a whole-day eating bird, Padu, authority, Adhikara/Bharana, condition, score, or forecast. All 28 cells are directly bound to the governing 1879 leaves and separately corroborated by the 1934 Uromarisi publication; textual-lineage independence is not claimed. A separate named Bogamuni 2024 profile preserves a complete 54-cell Purva/Amara-by-nakshatra bird table. Its Amara verse governs because the adjacent commentary duplicates Shravana and omits Revati; that malformed commentary remains visible as rejected conflict evidence. The fixed modern bogamuni_2024_apparent_lahiri_natal_moon_identity_v1 composition evaluates apparent geocentric Sun and Moon positions on one reader-bound TT epoch, derives the source-mapped lunar half, applies Lahiri true ayanamsa, assigns the Moon to one of 27 equal half-open nakshatras, and returns the selected source-table bird with every intermediate and locator visible. The source attests nakshatra birds and phase labels; birth-Moon application, Lahiri, and the equal-sector boundary policy are explicitly Moira-owned, not source claims. It never routes into a schedule, current cell, score, or forecast. A third source-scoped Bogamuni 2024 profile, bogamuni_chennai_2024_padu_bird_mapping, preserves the separate 14-cell Purva/Amara-by-weekday Padu-bird table. It is a pure explicit-label lookup: the source table has no day/night axis, and its death-or-inoperative bird is not relabelled as a schedule RULE activity, a generic authority bird, or the separately labelled eating bird. The primary witnesses do not present an Adhikara Pakshi table, while Bharana is secondary terminology only; neither alias nor product is admitted. The Padu profile performs no natal identity, astronomical routing, schedule/current-cell selection, condition scoring, or forecast.
  • Dashas — Vimshottari with nakshatra balance; Chara Dasha (K.N. Rao's named lineage); Varshaphal (annual charts).
  • Vargas — divisional charts (navamsa, dashamansa, dwadashamsa, saptamsa, trimshamsa, and more); Vimshopaka Bala (BPHS 20-point varga-dignity strength over all four classical groups) with vargottama detection.
  • Yogas — 60 classical yogas across six families (Pancha Mahapurusha, Chandra, Surya, all 32 Nabhasa, Raja core, Dhana core), each returned as a proof object: formation conditions with observed evidence, cancellation (bhanga) clauses evaluated first-class, and per-yoga primary-source citations.
  • Shadbala — the complete six-fold strength system plus Bhava Bala (house strength), inline Ishta/Kashta Phala on every planet, and Graha Yuddha transfer disclosure.
  • Ashtakavarga — bindu tables plus kakshya-level transit evaluation (Saturn-first lord order) and Shodhya Pinda, validated to the digit against BPHS Ch. 69's own worked example.
  • Upagrahas — the five kalavelas (Gulika, Kala, Mrityu, Ardhaprahara, Yamaghantaka) with portion-point, Mandi-mode, and lord-sequence lineage policies, plus the five Sun-derived upagrahas.
  • Avasthas — Baladi, Jagradadi, and Deeptadi as per-source rule tables (BPHS / Saravali / Jataka Parijata / Phaladeepika, never merged), plus the six non-exclusive Lajjitadi flags with evidence strings.
  • Jaimini — rasi drishti, arudha padas A1–A12 (Rath/JHora exception default, Raman variant as policy), argala with virodha pairs, and karakamsa with both lineage readings named (Rath D9 vs. K.N. Rao D1).
  • Muhurta — Tara Bala (nine-tara cycle) and Chandra Bala (Chandra Shuddhi with Chandrashtama flagged) as a natal-personalized electional overlay.
  • Sade Sati — phase classification (rising/peak/setting) with Ashtama and Kantaka Shani flags, and kernel-timed phase windows via Saturn sidereal sign-ingress bisection, with retrograde re-entries reported as separate windows.

Advanced Astronomy

  • Eclipses — NASA-canon contact solver for solar and lunar eclipses; Saros series classification with heptagonal vertex labelling; local circumstance computation.
  • Heliacal phenomena — heliacal rising and setting; acronychal rising and setting; planetary elongation extremes.
  • Parans — paranatellonta field analysis with contour extraction and stability metrics.
  • Occultations — lunar occultation of stars and planets; close-approach detection.
  • Stations — retrograde stations with precise stationary-point search.
  • Mapping — Astrocartography (ACG) lines for all planets; Local Space chart positions; Gauquelin sectors.
  • Galactic coordinates — full equatorial-to-galactic transform and reference point catalog.
  • Temporal systems — 28-mansion Arabic lunar stations (Manazil); Sothic cycle drift and Egyptian civil calendar conversion; void-of-course Moon windows.
  • Harmograms — intensity-spectrum research engine (H1–H5); spectral vectors, zero-Aries parts construction, intensity doctrine, and time-domain trace analysis.
  • Harmonics — harmonic chart calculation, aspect-harmonic profiles, vibrational fingerprint analysis.
  • Synastry — inter-chart aspects, house overlays, composite chart (midpoint method), Davison chart (spherical midpoint).
  • Jones chart shapes — all 7 temperament types.

Quick Start

Moira initializes even when no planetary kernel is present. Kernel-dependent operations (for example chart()) raise a clear MissingEphemerisKernelError until a kernel is configured. See Kernel Setup below before executing planetary examples.

from datetime import datetime, timezone
from moira import Moira

m = Moira()

# 1. Planetary positions
chart = m.chart(datetime(2000, 1, 1, 12, 0, tzinfo=timezone.utc))
print(f"Sun:  {chart.planets['Sun'].longitude:.6f} deg")
print(f"Moon: {chart.planets['Moon'].longitude:.6f} deg")

# 2. House cusps (Placidus, London)
from moira import HouseSystem
houses = m.houses(
    datetime(2000, 1, 1, 12, 0, tzinfo=timezone.utc),
    latitude=51.5074,
    longitude=-0.1278,
    system=HouseSystem.PLACIDUS,
)
print(f"ASC: {houses.asc:.4f} deg  |  MC: {houses.mc:.4f} deg")

# 3. Aspect patterns
from moira.patterns import find_all_patterns
patterns = find_all_patterns(chart.longitudes())
for p in patterns:
    print(f"{p.name}: {', '.join(p.bodies)}")

# 4. House placement lookup
from moira.houses import house_of
sun_house = house_of(chart.planets['Sun'].longitude, houses)
print(f"Sun is in house: {sun_house}")

REST API Server

The engine ships with an optional FastAPI transport layer (moira_server) that exposes the admitted engine surface as typed, versioned REST routes.

pip install moira-astro[server]
uvicorn --factory moira_server:create_app

For latency-sensitive deployments, opt in to one bounded per-worker startup warmup before accepting computational traffic:

$env:MOIRA_SERVER_PREWARM = "1"
uvicorn --factory moira_server:create_app

With prewarm enabled, /ready returns HTTP 503 until the kernel-backed warmup succeeds; /health remains available for liveness diagnostics. Prewarm is disabled by default because each worker pays its own native memory cost.

  • 60+ route families under /v1 — charts, positions, houses, per-stage pipeline visibility, progressions (the full dispatched method menu advertised as OpenAPI enums), primary directions, returns, transits, dashas and time lords, the complete Vedic suite (yogas, shadbala, ashtakavarga, upagrahas, avasthas, Jaimini, muhurta, sade sati), draconic charts, astrocartography, asteroids and comets, fixed stars, harmonics, harmograms, electional scoring, synastry and relationship products, and more.
  • Typed transport — every route family has dedicated Pydantic request/response models, serializers, and services; doctrine stays in the engine, the server is transport and orchestration only.
  • OpenAPI discovery — tagged schema with installed discovery metadata for machine consumers.

Requirements and Installation

  • Python 3.10 or later
  • A C++ compiler, cmake >= 3.24, and pybind11 >= 2.12 (required at build time for the native extension)
  • A JPL DE-series planetary kernel (de430, de440, or de441 — not bundled; see below)
# Standard install (builds the native C++ extension)
pip install moira-astro

# With the FastAPI REST server (fastapi, uvicorn, pydantic)
pip install moira-astro[server]

# With Lunar Graze support (spiceypy, laspy, requests)
pip install moira-astro[lunar-graze]

Kernel Setup

Moira requires a JPL DE-series SPK planetary kernel for all planetary computation. No kernel is bundled — the files are large and the choice of release belongs to the user.

All kernel reading is performed by Moira's own native C++ SPK/DAF reader. As of 4.0.0 there is no jplephem runtime fallback: segment types outside the native reader's support raise an explicit error rather than silently routing through a third-party library.

Supported kernels:

Kernel File Size Date range Notes
DE441 de441.bsp ~3.1 GB ~13 200 BCE – ~17 200 CE Original design target; maximum date coverage
DE440 de440.bsp ~114 MB 1550 BCE – 2650 CE Current JPL standard; recommended for most users
DE430 de430.bsp ~128 MB 1550 BCE – 2650 CE Widely deployed predecessor to DE440

Kernel Manager (GUI)

The easiest way to download and configure a kernel is the built-in Tkinter interface. It requires no extra dependencies — Tkinter ships with CPython on all platforms.

moira-kernel-manager

The window shows all supported kernels with extended descriptions (design rationale, date coverage, size trade-offs), live Installed/Missing status for each, and a real progress bar for downloads. You can also point Moira at a .bsp file already on disk without re-downloading.

What the GUI provides:

  • Kernel list — planetary (de430, de440, de441) and supplemental (asteroids, small bodies) sections with size, date range, and status per row.
  • Detail panel — selecting a row shows a full description of that kernel's coverage, accuracy, and when to prefer it over the alternatives.
  • Download with progress — streams the selected kernel in the background; a progress bar tracks bytes received. A Cancel button interrupts the transfer and removes the partial file.
  • Use selected — activates an installed planetary kernel for the current session via set_kernel_path().
  • Browse… — select a planetary .bsp already on disk and set it as the active kernel immediately.

The GUI and moira-download-kernels supplemental entries are the generic JPL asteroids.bsp and sb441-n373s.bsp resources. They are separate from the immutable 10,025-asteroid and 497-comet Moira releases described below. They remain caller-managed compatibility inputs for explicit small-body workflows; downloading them does not install or substitute for either manifest-governed catalog.

CLI

# List all kernels and their status
moira-download-kernels --list

# Download all missing kernels (interactive prompt)
moira-download-kernels

# Download without prompting
moira-download-kernels --yes

SPK Kernel Writer (GUI)

Moira supports building custom Type 13 SPK kernels using an integrated compiler GUI (built on Tkinter). This utility fetches physical position vectors directly from the JPL Horizons API and packages them into a native-readable binary kernel (.bsp).

moira-daf-writer

What the custom kernel writer provides:

  • Guided Horizons Import: Search the JPL Small Body Database (SBDB) by designation or name for any numbered asteroid or comet.
  • Custom Parameter Controls: Configure start/end Julian Days, step size in days, interpolation center, and coordinate frame.
  • Verification Loop: Automatically runs a post-compilation check to verify segment availability and test coordinate evaluations.

Engine readiness model

  • Moira() succeeds even if no kernel is installed. It auto-discovers any compatible kernel in the standard locations.
  • m.is_kernel_available() reports kernel readiness.
  • m.get_kernel_status() explains expected paths and remediation.
  • m.available_kernels lists installed planetary kernels (small-body shard catalogs are discovered separately via their manifests).
  • Kernel-dependent calls raise MissingEphemerisKernelError with instructions.

Standard location: kernels/<filename>.bsp relative to the repository root, or ~/.moira/kernels/. The engine resolves either automatically.

Custom location: pass the path at construction, or call set_kernel_path() before the first Moira() instantiation:

from moira.spk_reader import set_kernel_path
from moira import Moira

set_kernel_path("/path/to/de440.bsp")
m = Moira()

print(m.is_kernel_available())
print(m.get_kernel_status())
print(m.available_kernels)

Direct download links (JPL SSD):

Small-Body Catalogs (Asteroids and Comets)

The unified asteroid catalog (10,025 bodies as 401 Type-13 shards in release 2026.08.12.1) and the numbered periodic comet catalog (497 comets as 20 shards in release 2026.07.28.1) are too large to ship inside the wheel and are distributed separately. Install a catalog by placing its shard directory — asteroids/ or comets/, each containing its shards and manifest.json — under any kernel search root (kernels/ at the repository root or ~/.moira/kernels/). The engine discovers every manifest under every search root automatically; no configuration call is required. A bundled canonical name does not by itself imply position capability: the matching external manifest and BSP shard must be installed.

Distributed catalog releases are immutable and versioned. Each extracted release contains SHA256SUMS; its manifest.json also records the byte length and SHA-256 of every Moira-generated Type-13 kernel and its per-shard build evidence. Verify an extracted release with:

.\.venv\Scripts\python.exe -m moira.small_body_catalog_release verify C:\path\to\catalog-release

The downloadable ZIP has an adjacent .zip.sha256 receipt and can be verified before extraction:

.\.venv\Scripts\python.exe -m moira.small_body_catalog_release verify-archive C:\path\to\catalog-release.zip

Release maintainers finalize an already-built catalog without recalculating its ephemeris using the prepare command documented by python -m moira.small_body_catalog_release --help. A changed file, membership set, sampling policy, or coverage rule always receives a new catalog version; published bytes are never replaced beneath an existing version.

Note for pre-4.0.0 installs: the single-file supplemental kernels (comets.bsp, centaurs.bsp, minor_bodies.bsp) no longer auto-load. All small bodies now resolve through the sharded manifests.


Data Inventory

Layer Source Bundled Note
IAU 2000A/2006 nutation and precession tables IAU Yes 2,414 terms; native C++ (_moira_native)
DE-series planetary kernel JPL No de430 (~128 MB), de440 (~114 MB), or de441 (~3.1 GB); download separately
Named star registry Sovereign (star_registry.csv + JSON provenance) Yes 1,809 stars; license-independent
Canonical small-body identity registries Moira release catalogs with JPL identity lineage Yes 10,025 asteroid and 497 comet identities; names and disambiguation only, with no positional vectors implied
Position-capable asteroid ephemeris JPL Horizons No 10,025 selected asteroids; 401 Type-13 shards in release 2026.08.12.1; public archive, manifest-discovered
Asteroid-family membership catalog Proper25 + retained NASA PDS exclusions Yes 342 families; 200,726 unique numbered asteroids; 221,095 many-to-many membership rows; no positional ephemeris implied
Numbered periodic comet catalog JPL Horizons No 497 comets (1P–516P); 20 Type-13 shards in release 2026.07.28.1; separate distribution, manifest-discovered

Native C++ Performance

Moira's computational core (_moira_native) is implemented in C++17 and compiled as a pybind11 extension at install time. Performance-critical paths — IAU 2000A nutation evaluation, SPK/DAF kernel reading, apparent planetary evaluation (via NativePlanetaryEvaluator), coordinate transforms, light-time iteration, harmogram computation, precession, and event searching — execute natively without Python overhead.

This matters most in phenomenon-searching loops (retrograde periods, eclipse searches, heliacal events, conjunction sweeps) where core transforms are evaluated thousands of times. The native extension is a required component and is built automatically during pip install.


Validation Evidence

Moira is validated as a three-layer corpus. Each layer has its own correct evidence standard.

Astronomy layer — authoritative physical oracles first, enforced regression thereafter. References: IAU ERFA/SOFA, JPL Horizons, NASA catalogs, IERS.

Astrology layer — external chart software where stable and meaningful; doctrine-grounded invariants where no universal oracle exists. References: Swiss Ephemeris, Astro.com, canonical doctrine tables, structural invariants.

Experimental layer — subsystem-specific surfaces for sovereign or modern domains. Domains: sovereign fixed stars, variable stars, multiple star systems, galactic transforms, eclipse Saros classification.

Every validated claim must pass three gates:

  1. Gate of Source — inputs and reference data are tied to an independent authority.
  2. Gate of Flow — the computational path is explicit and inspectable.
  3. Gate of Oracle — outputs are benchmarked against an external reference appropriate to the domain.

When residuals remain, Moira documents them as model-basis differences rather than mislabeling them as engine defects. Two systems may be internally correct while answering different mathematical questions because of differing assumptions — for example, Delta-T branch, retarded-versus-geometric Moon treatment, or event-definition objective.

Report Verification Source
VALIDATION_ASTRONOMY.md IAU ERFA/SOFA, JPL Horizons, NASA. Geocentric residual: 0.576 arcseconds (documented Delta-T divergence).
VALIDATION_ASTROLOGY.md Swiss Ephemeris, Astro.com, canonical doctrine tables. Houses, ayanamshas, predictive cycles.
VALIDATION_EXPERIMENTAL.md SOFA/ERFA, Swiss swetest, AAVSO, GCVS, binary orbit ephemerides. Sovereign stars, variable stars, multiple systems.

The Reduction Pipeline

graph TD
    A[JPL Planetary Kernel\nChebyshev state vectors] --> B[SSB Barycentric Position\nkm · ICRF]
    C[Sovereign Star Registry\n1809 named stars] --> D[Stellar Astrometric Position\nproper motion · parallax]
    B --> E[1 · Light-Time Iteration\nbody at t − τ  where τ = d/c]
    E --> F[2 · Gravitational Deflection\nSun · Jupiter · Saturn · Earth]
    F --> G[3 · Annual Aberration\nrelativistic · IAU SOFA]
    G --> H[4 · IAU 2006 Frame Bias\nICRF → Mean Equator J2000]
    D --> H
    H --> I[5 · IAU 2006 Precession\nP03 polynomial series]
    I --> J[6 · IAU 2000A Nutation\n1358 luni-solar + 1056 planetary terms]
    J --> K[True Equinox and Equator of Date]
    K --> L[7 · Topocentric Parallax\nWGS-84 · optional]
    K --> M[8 · Atmospheric Refraction\nSky positions only · optional]
    K --> N[Ecliptic Projection\nTrue obliquity of date]
    N --> O[Zodiacal Longitude · Latitude · Distance]
    K --> P[Sidereal Frame · Ayanamsa\noptional]
    K --> Q[House Cusps · 22 Systems\nrequires lat/lon]

Worked Example: Mars at J2000.0

The following traces every pipeline stage for Mars on 2000 January 1, 12:00 TT, using live DE441 kernel data. All numbers are from the running engine.

Time: JD_UT 2451545.000000 → JD_TT 2451545.000739  (ΔT = +63.807 s)

Step Operation Vector / Value Shift from Previous
0 DE441 kernel read — SSB → Mars (206,980,508.6, −184,891.6, −5,666,529.8) km
0 DE441 kernel read — SSB → Earth (−27,568,641.0, 132,361,060.2, 57,418,514.1) km
0 Geometric geocentric — Mars − Earth distance: 276,697,408.2 km = 1.849608 AU
1 Light-time iteration — Mars at t − τ τ = 0.010683 days = 15.383 min 15.761 arcsec
2 Gravitational deflection — Sun + Jupiter + Saturn sub-arcsecond bending of light path 0.006 arcsec
3 Annual aberration — Earth velocity 29.786 km/s relativistic displacement toward apex 14.070 arcsec
4 IAU 2006 frame bias — ξ₀ = −16.617 mas, dε₀ = −6.819 mas fixed ICRF → mean equinox J2000 rotation 0.023 arcsec
5 IAU 2006 precession — P03 polynomial series negligible at J2000 (reference epoch) 0.016 arcsec
6 IAU 2000A nutation — Δψ = −13.932″, Δε = −5.769″ true equator and equinox of date 14.351 arcsec
7 Ecliptic projection — true obliquity ε = 23.437677° λ = 327.963300° · β = −1.067779° · d = 1.849688 AU

Final position: Aquarius 27° 57′ 48″  ·  distance 1.8497 AU  ·  speed +0.7757°/day (direct)

Total pipeline correction from geometric to apparent: −43.760 arcsec

The largest contributors are nutation (−13.932″), annual aberration (−14.070″), and the combined light-time displacement (−15.761″). Gravitational deflection (0.006″) and frame bias (0.023″) are sub-arcsecond but non-negligible at sub-arcsecond accuracy targets.

Pipeline Controls

Each correction stage can be toggled independently via planet_at(). The table below shows the measurable effect of disabling each stage on the Mars J2000.0 result.

Parameter Default Effect on Mars J2000.0 longitude Function
apparent=True True Full pipeline active planet_at()
apparent=False Geometric position; all corrections skipped. Δ = +43.760 arcsec planet_at()
aberration=False Aberration stage skipped. Δ = +14.069 arcsec planet_at()
grav_deflection=False Deflection stage skipped. Δ = +0.003 arcsec planet_at()
nutation=False Nutation skipped; mean equinox used. Δ = +13.932 arcsec planet_at()
observer_lat/lon None When supplied, adds topocentric parallax (WGS-84). Effect: ~1° for Moon, <0.01″ beyond Jupiter planet_at()
refraction=True True Atmospheric refraction applied to altitude. Effect: ~0.57° at horizon sky_position_at()
delta_t_policy None Controls UT → TT conversion branch (IERS tables, polynomial, hybrid physical) both

Project Documentation

The canonical documentation tree lives in wiki/. The flat moira.wiki/ Git wiki mirror is generated from it by python scripts/sync_git_wiki.py and should not be edited by hand. Website-publishable documents are governed by website_docs/publication_sources.json and built with python scripts/build_website_docs_bundle.py. After changing server routes, run python scripts/sync_rest_api_reference.py in an environment with the server extra installed; CI checks its generated OpenAPI inventory, the Git wiki mirror, and the website publication manifest for drift.

Document Contents
01_LIGHT_BOX_DOCTRINE.md Transparency and derivation as design constraints.
BEYOND_SWISS_EPHEMERIS.md Capabilities enabled by sovereign catalogs, explicit policy, and modern Python.
HOUSE_SYSTEM_DIVERGENCE.md House-system derivation and discretionary divergence from conventional Swiss-facing behavior.
CONSTITUTIONAL_PROCESS.md The Subsystem Constitutional Process — the development and governance protocol.
MOIRA_ROADMAP.md Feature implementation status and mathematical accuracy register.

License

MIT (c) 2026 TheDaniel166. See PROVENANCE.md for license and Swiss-lineage provenance clarity.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

moira_astro-6.1.1.tar.gz (4.1 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

moira_astro-6.1.1-cp314-cp314-win_amd64.whl (5.0 MB view details)

Uploaded CPython 3.14Windows x86-64

moira_astro-6.1.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

moira_astro-6.1.1-cp314-cp314-macosx_11_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

moira_astro-6.1.1-cp314-cp314-macosx_10_15_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

moira_astro-6.1.1-cp313-cp313-win_amd64.whl (5.0 MB view details)

Uploaded CPython 3.13Windows x86-64

moira_astro-6.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

moira_astro-6.1.1-cp313-cp313-macosx_11_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

moira_astro-6.1.1-cp313-cp313-macosx_10_13_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

moira_astro-6.1.1-cp312-cp312-win_amd64.whl (5.0 MB view details)

Uploaded CPython 3.12Windows x86-64

moira_astro-6.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

moira_astro-6.1.1-cp312-cp312-macosx_11_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

moira_astro-6.1.1-cp312-cp312-macosx_10_13_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

moira_astro-6.1.1-cp311-cp311-win_amd64.whl (5.0 MB view details)

Uploaded CPython 3.11Windows x86-64

moira_astro-6.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

moira_astro-6.1.1-cp311-cp311-macosx_11_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

moira_astro-6.1.1-cp311-cp311-macosx_10_9_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

moira_astro-6.1.1-cp310-cp310-win_amd64.whl (5.0 MB view details)

Uploaded CPython 3.10Windows x86-64

moira_astro-6.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

moira_astro-6.1.1-cp310-cp310-macosx_11_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

moira_astro-6.1.1-cp310-cp310-macosx_10_9_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file moira_astro-6.1.1.tar.gz.

File metadata

  • Download URL: moira_astro-6.1.1.tar.gz
  • Upload date:
  • Size: 4.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for moira_astro-6.1.1.tar.gz
Algorithm Hash digest
SHA256 14664dd51d6d0d63579d9e096df35e636e6566bea2f5cc9e81abb1a4e7e9bdcb
MD5 067cae5d1e69b40515633eb68809f3b7
BLAKE2b-256 22e0209fff3a5323d46c7b0e5ebf285349c291ee5a57278f5e29c69e89d22dba

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 8596d29ead6f718223653d29f2303a2c0bd72ebff8606ae23a0e42f0a70ffb87
MD5 dd34c27d355f614d63638f17035e01f2
BLAKE2b-256 37e7aef3e0b5af7be0cd52cc1c0aa5d95b956139de943a9341649f8fdeab7e30

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fd537a11014f5743ac16ff25dbe2d9178d14f2823d6a16d445619c6d14410762
MD5 df28ed2b154c8ba2a520c9c52848eb4f
BLAKE2b-256 2ccd2d5d2048517e363d329c3e5e503d6d553e656967b90ce4cd1b1b03266d17

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5cb886fe61471a10531638fbf738df24b4ad81d34c310f527609c3a183dac1eb
MD5 546d090adfaf4e620ba05b0e10d2c987
BLAKE2b-256 5e8437ff3e84427cb3070cb4e4461d137a56d92b794901fa1ad6672673df85a9

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 be1935e84081dc14f4a285ebe23f5f8674cebc4686268e23489417fe7a12f70e
MD5 06847cc15c3276f9984e5d5837d6a642
BLAKE2b-256 fe9ed3d4c93867b33ee55fa60e02cc70a5c689f308dc229e136543bc689a1123

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c7c47671c26bb4f95762629c98e348f235211b7405c0bdd91426015e6a8b19ac
MD5 c9f948acd41d28566b8c71a5332608e7
BLAKE2b-256 65d2a1c6aa7603726cf876bf7a5d78310a1b2477ca77a717300648790d5fcead

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a3a481dc8b1560359bb151db010925fb751c85b7608d0b6a9bfc300767f0c5db
MD5 572672af7304ce187a37764c8acc47f7
BLAKE2b-256 17e95a00ea73dfe7bded36afd701c430678c12b4f3d1b68bafc5d474d8babff5

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6e6b58324d0c8bbafc9cb982f5d4c28892dc9e092b330fecb8346da2ff15965e
MD5 e5556bb73ce92222162824f42767dc98
BLAKE2b-256 7f19cfbf8b90a7e8db2662f5ffab9722460c8232e42513d74dea43d61c2f2c5b

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 70ece44f8adebce47d862806adb7128fb2eab6af68bdad196acc757b764f26f6
MD5 a82c28001ba6b77dd36947d7e8e15d0f
BLAKE2b-256 18ae705fc41ec94741fa0481c4ac086514f499d2741633b2bf5753ef40857cee

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c9d1ebbd346803a4743299e71155086e29996ee8fae0809d9f7eccbee8a32d3e
MD5 f258bc926d854345028f1eef8324c690
BLAKE2b-256 4df8cbab519e4a7f3a78494492cb1c6f7fd1cc866bf7f246956bd540a0a2898c

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 86a1bb1afd406831a0dc8d9f65eff1956558f2a2e6fa2185dca3003ee42da156
MD5 d329b84d01e723b4c9fe78668d91a7eb
BLAKE2b-256 8c163a69374ea597af2940730653be5a51093b45ba1482d9a987668e56240cb1

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a4e2af48436dd0e9cc9c32bda7644c9b51c2340da410880cce956161e4f84594
MD5 194887281d46d4dbe8a7928b0b3bda9a
BLAKE2b-256 d98b421737ff0d3fe90e64c3b86bbe4ef2cc19384980df7ef0435de80f5f9765

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 37a714196bb22ba427be386d6d0a999726eef4cf2b019cc9756913e1fe4dbf1b
MD5 2623bd4d63af95d6359dd1ab1f855d34
BLAKE2b-256 20de2ab5f3bc3e46cc06cfb93fd62167f4d13e92ca7fdbc61f60f1e20b4ec1f4

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9c69e9f3a6aef4a1be11ca4d843dd33c22a22686fba49c903e17ea2086894db4
MD5 ac02a1eaa8e5828ffff0b232209cbfab
BLAKE2b-256 ae2b08e7f6bd8e70b3251d1fd779fde15cc5df011a510761e80d062b25fc84bc

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3b1c803d427dea0abfe0c5879abbdda82b72e39e5cdf9112de5214b320b80a40
MD5 35f062790eb28e35592f69ceeee3dda3
BLAKE2b-256 8e693fa7131f9f6bae9d2f8701c221ffc026ab89ddbdfddad13f0ba97c7713c6

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 97768ea459af643be69052348323c5dd0cec435eee2de245fabc493930f26165
MD5 75854db3500e31ab1679d299e37a4774
BLAKE2b-256 4c7a67d45c0ee1235856838d6edfc063520443b7a789dc07757c2d039129e512

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0bcbb62b8e69d4df783726544bde539238ebe0c98e68609e4a33a144cfd58540
MD5 dc12376607e21f315ade77a1cb201610
BLAKE2b-256 7371427178f5433ae3d5888567bd2f45c4f992b9279f796ac530e385f9ffb353

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6b10ce11dd2f6b61fdea5c188c765a595d397cc590ccf42517858d723925fd9a
MD5 41ef85a53aaabea6bffb48e8edbbdfbe
BLAKE2b-256 19e48996f81cc9544ee6b2f3c78c9a457f6247fbc8baad2fb15023ebe2a165ae

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 30f7dbbdc6a55531cbd89cb447a2f1806437b1caf49aa9dd1aec834b25859835
MD5 e7447b640bcf47edbbbdda222cec04d6
BLAKE2b-256 31336e0502c0e0a73617aef3220e76668cc5396118e57baab43142cf93d4f05b

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4c926229aef25364828bdcfb9976ae2a494ef9dae683de85e73b5349dd2aa7a0
MD5 8af1f80b085066ab109e1d72bcec298c
BLAKE2b-256 8edd8ecff6294b9f17960a0750d31c67ef166a482ad7291e190e6a87054ec881

See more details on using hashes here.

File details

Details for the file moira_astro-6.1.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for moira_astro-6.1.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ace5d4c360d1b0df7e52e1051d456f9e3c7a0161ea3341da5ed88896eb440535
MD5 3d2a7a029debce6717a52e7ae4c30d49
BLAKE2b-256 3e9a9864503ee93204aa035f7c53e4a56daa4e8f1c65315f34444a0b129ed7c1

See more details on using hashes here.

Release history Release notifications | RSS feed

6.4.1

21 files

6.4.0

21 files

6.3.0

21 files

6.2.2

21 files

6.2.1

21 files

6.2.0

21 files

This release

6.1.1 This release

21 files

6.1.0

21 files

6.0.1

21 files

6.0.0

21 files

5.2.3

21 files

5.2.2

21 files

5.2.1

21 files

5.2.0

21 files

5.1.2

21 files

5.1.1

21 files

5.1.0

21 files

5.0.0

21 files

4.2.1

21 files

4.2.0

21 files

4.1.0

21 files

4.0.1

21 files

4.0.0

21 files

3.4.3

21 files

3.4.1

21 files

3.4.0

21 files

3.3.4

21 files

3.3.0

2 files

3.2.4

2 files

3.2.3

2 files

3.2.2

2 files

3.2.1

2 files

3.2.0

2 files

3.1.0

2 files

3.0.0

2 files

2.2.0

2 files

2.1.3

2 files

2.1.2

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page