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 thirty

computing…

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.

npm install caelusGitHubREST APIMCP Server