Data Tiers
The engine is given its ephemeris data explicitly. Two suppliers ship with the package: the embedded dataset for the browser and edge, and the Node loader for the extended packs. The hosted REST demo and MCP server build on these two.
What runs where
| Capability | Embedded (browser, edge) | Node loader | REST /api/chart | MCP (caelus-mcp) |
|---|---|---|---|---|
| Core bodies (Sun–Pluto, Chiron, nodes) | ✓ | ✓ | ✓ | ✓ |
| Houses (12 systems), angles, aspects | ✓ | ✓ | Placidus | ✓ |
| Tropical + 7 sidereal ayanamsas | ✓ | ✓ | tropical | ✓ |
| Derived charts (returns, progressions, …) | ✓ | ✓ | — | transits, synastry |
| Extended bodies (asteroids, Uranian points) | — | ✓ | — | ✓ |
| Fixed stars (318-star catalog) | — | ✓ | — | ✓ |
| Event search (rise/set, crossings, phases, stations) | — | ✓ | — | ✓ |
| Eclipses (solar, lunar) | — | ✓ | — | ✓ |
| Data on disk | none (bundled) | JSON packs (precise Moon ~3.1 MB + catalogs) | none (edge) | JSON packs (Node) |
| Date range | 1800–2149¹ | 1800–2149¹ | 1800–2149 | 1800–2149¹ |
| Accuracy | per body, see Validation | per body, see Validation | per body | per body |
Embedded (browser, edge)
caelus/data-embedded bundles a compact dataset: the eight planets, the Moon,
Pluto, Chiron, and the nodes, with the core house systems and aspects. This is
what runs client-side and on edge runtimes, with no files on disk.
Node loader (extended)
loadNodeData reads the larger JSON packs from disk: higher-precision VSOP
tiers, the precise Moon pack, the asteroids and Uranian points, and the
318-star catalog. Use it when you need extended bodies, fixed stars, or event
search.
Turbo (bulk longitude scans)
For century-scale work that evaluates a longitude tens of thousands of times — a
long transit scan, a returns sweep — the Turbo tier trades generality for
speed. A turbo pack is a segmented Chebyshev representation of the engine's own
apparent longitude, fit to the engine itself, so one evaluation is a couple of
dozen multiply-adds. The pack is data you mint for your range and bodies; the
runtime evaluator does no I/O and needs no engine.
Bundle sizes
The choice between client-side and server-side computation comes down to one number: the embedded dataset. The engine code tree-shakes small (a chart-only import drops event search, eclipses, the query and turbo tiers, and the derived and electional layers); the weight a browser pays is the coefficient data it bundles.
| What you ship | Approx. gzipped | Notes |
|---|---|---|
Embedded dataset (caelus/data-embedded) | ~74 KB | the eight planets, Moon series, Pluto, Chiron, nutation; full client-side charts |
Precise Moon tier (caelus/node) | ~700 KB | ~3.1 MB on disk; lazy, never in the initial bundle |
caelus-wheel | a few KB | React is a peer dependency, not bundled |
caelus-birth | small code, plus IANA timezone data | the timezone data is the weight, not the resolver |
caelus-mcp | server-side | not a browser bundle |
So: ship caelus + caelus/data-embedded for full charts in the browser (the
data dominates, the code is a small addition on top of your app), or compute
server-side through the REST endpoint or the
MCP server and ship only caelus-wheel to render the result.