Caelus
The ephemeris is now just code.
No AGPL. No license fees. No ephemeris files.
The core engine is ~85 KB gzipped, has zero dependencies, and runs anywhere JavaScript runs, under MIT. Per-body accuracy against Swiss Ephemeris: Validation · Sources.
curl "/api/chart?lat=27.94&lon=-82.46"try it in ten seconds (demo endpoint)npm install caelusown it in thirtycomputing…
Accuracy (vs Swiss Ephemeris, 1900–2099)
| Sun–Saturn | ≤ 1″ |
| Uranus / Neptune | ≤ 1.9″ / ≤ 4.6″ |
| Moon (1920–2080 tier) | ≤ 2.5″ |
| Moon (series, embedded) | ≤ 10″ |
| Pluto / Chiron | ≤ 2.5″ / ≤ 1″ |
| Angles & Placidus cusps | ≤ 3.2″ |
| True node | ≤ 1″ |
Within 1′ chart-display precision. Full table →
What This Is
Caelus computes apparent geocentric positions for the Sun, Moon, eight planets, Pluto, Chiron, and both lunar nodes, with speeds, retrograde flags, ASC/MC, four house systems, and major aspects. Valid 1800–2149. The coefficient data ships inside the bundle: VSOP87D planets, an abridged ELP-2000/82 Moon, Meeus's Pluto series, and Chebyshev fits of JPL data for Chiron and the precise-Moon tier.
The engine takes injected data and does no I/O, so one codebase serves three runtimes: this page (charts compute client-side in ~2 ms), the demo endpoint GET /api/chart, and Node, where caelus-mcp exposes six chart tools to AI agents over MCP.
Why It Exists
Most astrology software computes positions with Swiss Ephemeris, and it earned that position: JPL DE431 compressed to 0.001″. It is also a 1997 C library with process-global state, it reads 2–97 MB of ephemeris files from a filesystem, and since v2.10.1 (June 2021) it is AGPL-3.0, dual-licensed at 700 CHF for closed source. None of that maps onto browsers or edge runtimes.
The MIT-licensed alternatives are astronomy libraries, not astrology engines: astronomy-engine stops at ±1 arcminute and computes no houses, nodes, or Chiron; astronomia has sub-arcsecond planets and no astrology layer. Caelus is written from the published record and covers the chart core at chart precision. Engine-by-engine comparison: Sources.
How It Is Checked
Two stages, both in CI. The Python reference is compared to Swiss Ephemeris 2.10 at hundreds of random instants across 1900–2099: planets ≤1″, precise-tier Moon ≤2.5″, angles and Placidus cusps ≤3.2″. The TypeScript engine must match the reference across 1,438 golden fixtures; worst recorded deviation 0.82 nano-arcseconds. Per-body deltas: Validation. Bugs the suite caught: Build Notes.
What Ships
caelus: the engine, ~85 KB gzipped embedded tier; a 729 KB precise-Moon tier (1920–2080) lazy-loads on demand. caelus-mcp: natal_chart, current_sky, transits, synastry, find_aspect_dates, rectification_grid over stdio. LLMs interpolate planetary positions from training data; the MCP tools let them compute instead. GET /api/chart: the same engine on the edge runtime, as a demo, not hosted infrastructure.