TypeScript · browser, edge, Node, and MCP

Validated astrology computation in TypeScript

Caelus is a clean-room, MIT-licensed TypeScript suite for validated astrology computation. It computes planetary positions, charts, events, hellenistic timing techniques, Vedic methods, and citable chart facts across browser, edge, Node, and MCP clients, without Swiss Ephemeris code, AGPL licensing, or ephemeris files.

sky now · 2026-08-16 22:44 UT · sun 24°04' Leo · moon 17°46' Libra

Compute a chart

You pass a date, a UT time, a latitude, and a longitude, and the engine returns a chart object your app, API, or AI tool can read.

Terminal
npm install caelus
chart.ts
import { Engine, fmtLon } from "caelus";
import { embeddedData } from "caelus/data-embedded";

const engine = new Engine(embeddedData);

const chart = engine.chart(
  1990, 6, 10, 14, 30, 0,
  27.95, -82.46,
  "placidus",
);

fmtLon(chart.bodies.sun.lon);   // "19°27' Gemini"
chart.bodies.saturn.retrograde; // true
123456789101112ACMCDCIC19°27'13°17'27°50'13°01'7°30'14°50'24°18'℞8°21'℞13°50'℞15°30'℞15°34'8°07'℞
The same chart, drawn by caelus-wheel: 1990-06-10 14:30 UT, Tampa.

Full walkthrough in the Quickstart, or try it live in the Playground. For a complete app, the caelus-starter template is a Next.js project with a birth form, timezone handling, and a chart wheel, deployable to Vercel in one click.

What it computes

The full capability list, along with a comparison against the other engines, is on Features.

The packages

How it is checked

CI checks the engine in two stages. A Python reference engine is first calibrated against Swiss Ephemeris, and the TypeScript port is then replayed against 3,397 golden checks derived from it. The worst deviation recorded across that suite is 0.61 nano-arcsecond, which sits far below any astronomically relevant scale, so a porting bug fails the build instead of reaching a release. The tables and the methodology behind them are on Validation, and the bugs this suite has caught are written up in the Build Notes.

Frequently asked questions

Is Caelus free to use in commercial projects?
Yes. All four packages are MIT licensed, with no Swiss Ephemeris dependency and no AGPL obligations, so you can ship it in closed-source and commercial apps.
How accurate is it?
Every body's deviation from a reference ephemeris is measured and published, then replayed against thousands of golden checks in CI. The full tables are on the Validation page.
Do I need Swiss Ephemeris or ephemeris files?
No. The planetary data is embedded in the package, so there are no files to download or deploy. See Data Tiers for what ships in the bundle.
What date range does it cover?
The planets, Pluto, and the Moon are validated for the years 1000–3000, and the small bodies (asteroids and Chiron) for 1600–2484. A body outside its fitted range is omitted from the chart and listed under its unavailable field rather than guessed. See Edge Cases.
Does it support Vedic astrology, or only Western?
Both. Alongside the Western chart it computes nakshatras, the Vimshottari, Yogini, and Ashtottari dashas, the divisional charts (vargas), and the yogas. See Vedic & Jyotish.
Can charts be computed without sending birth data to a server?
Yes. The engine does no I/O and runs in the browser, so an app can compute a chart entirely on the client and never transmit birth data. Try the Playground; details on Privacy.
Can I use it with AI assistants like Claude or Cursor?
Yes. caelus-mcp exposes thirty-five chart tools over the Model Context Protocol, available hosted or as a local stdio server. See MCP Setup.
Does it interpret a chart, or just compute it?
The engine computes, and the interpretation is left to you. It stops at validated geometry and ships no delineation text of its own. For generated readings there is an interpretation layer, which projects a chart into ranked, citable fact atoms that a rule corpus or an LLM can consume, and audits the citations afterwards so a generated reading stays tied to the chart it came from.
Can it chart a forecast, a fictional character, or an archetype?
Yes. The provenance layer declares what the chart is (Realm) and how its time and place are known. realize() routes to the ephemeris or the geometric compiler, and passes certainty into the interpretation layer so a forecast reads as provisional and an inexact birth time down-weights the Moon and angles.

Start building

Quickstart →