AuLun Ephemeris.
The astronomy under every AuLun chart is our own engine — NASA's raw planetary solution, certified against NASA's own reference software to millionths of an arcsecond. It's on npm, free for non-commercial use.
What it is.
You give it a birth moment and a birth place — date, time, timezone, latitude and longitude — and it hands back the complete natal chart as data. Not a picture, not a horoscope reading: the precise raw material both of those are made from.
One call returns exact zodiac positions for 27 bodies (Sun, Moon, the planets, Pluto, Chiron, and sixteen asteroids and dwarf planets like Ceres and Eris), the personal frame — Ascendant, Midheaven, and twelve house cusps in any of eleven house systems — the derived points astrologers use (lunar nodes, Lilith, the Hermetic lots), and every aspect between bodies with whether it's applying or separating. Tropical by default; sidereal (Vedic Lahiri or Fagan–Bradley) on request.
It also reads the geometry whole. The pattern engine recognizes eleven figures — grand trines, T-squares, grand crosses, yods, kites, stelliums, minor grand trines, mystic rectangles, Thor’s hammers, cradles, and the rare Grand Sextile — and reports them the way an astrologer reads a chart: when six planets close into a Grand Sextile, you get one figure with its component trines and kites nested inside it, not sixteen overlapping shapes fighting for attention.
The engine deliberately stops at the numbers. Drawing the wheel and interpreting “Moon in Scorpio in the 8th house” is the app's job. The engine's job is to make sure the astronomy underneath is unimpeachable.

Why we built our own.
Nearly every astrology app on the market computes its charts with the same few decades-old libraries — compact approximations of NASA’s planetary tables, frozen into aging binaries, with license terms that follow your product around. We started there too, and our methodology kept hitting the ceiling: a practice built on exact timing — applying versus separating, precise cusps, patterns that form and dissolve in minutes — deserves a foundation that doesn’t approximate.
So we removed the approximation entirely. The engine reads JPL’s DE441 solar-system solution — the same ephemeris NASA uses to plan spacecraft trajectories — exactly as published for the Sun, Moon, and planets, and JPL’s own computed trajectories for Chiron and the sixteen smaller bodies. No truncated series, no legacy binary in the middle. It covers any moment from 1900 through 2099, and outside that range it refuses loudly instead of guessing quietly.
Accuracy you can check.
Every release is certified against NASA’s own reference software — the same toolkit NASA uses to read its planetary data — at more than 7,000 checkpoints spanning 1900 to 2099, including deliberately hostile instants like leap-second boundaries and the edges of the supported range. In the current certification, the average difference across all 27 bodies and two full centuries is 0.0000004 arcseconds. To picture that: it’s the width of a grain of sand, seen from the distance of the Moon. The single worst measurement in the entire run — the Moon, whose check is bounded by the reference software’s own time-conversion precision — is 0.00002 arcseconds: a golf ball at the Moon’s distance. In birth-chart terms, that’s the error you’d get from mis-recording a birth time by less than a ten-thousandth of a second. No birth record on Earth is precise enough for the engine to be the limiting factor.
On the identical test, the Swiss Ephemeris — the engine inside most astrology software — averages about two arcseconds from the NASA reference. Two arcseconds is genuinely small. Ours is roughly five million times smaller. The full methodology and per-body tables ship with the package.
Built for shipping apps.
It's one npm install: a WebAssembly binary with every byte of ephemeris data embedded — about 78 MB unpacked, the complete NASA dataset riding inside the package, nothing to download or configure at runtime — TypeScript types included, Node 18+, no native compilation, serverless-friendly. Timezones are handled the way birth data actually needs — IANA zones resolved at the historical birth instant, with explicit, correct handling of DST folds and gaps instead of a silent guess. It's the same engine running under every chart AuLun serves in production.
npm install @aulunarcana/ephemerisLicensing.
Free for personal projects, education, and research — install it and go, nothing to ask. Building something commercial? Also free: standard commercial licenses cost nothing — write to us, tell us what you’re making, and the only term is visible attribution. Put “Powered by AuLun Ephemeris” somewhere your users can see it — an about page, a settings screen, a chart footer — linked back to this page, and go build. We just like to know who’s building on it. If attribution doesn’t work for your product, or you need source access or escrow terms, that’s the same conversation.