Engine whitepaper
Every number, checkable
Most astrology apps are a black box: the chart appears and you have no way to tell whether the positions are right or where they come from. Astraleria takes the opposite position. Every number is the output of a documented, deterministic algorithm that runs entirely on your device.
Calculation and interpretation are separate
The engine computes facts: positions, aspects, dignities, house cusps, timing windows. The reading layer interprets those facts in plain language. We never blur the two. A sentence about your week is an interpretation; a degree of longitude is a measurement, and a measurement can be checked.
The engine
The positional engine is a clean-room implementation in Swift. It bundles no third-party ephemeris code and no multi-megabyte data file. It is a self-contained set of analytical series and orbital mechanics.
- Sun: Meeus low-precision solar theory.
- Moon: a longitude series validated to better than 8 arcseconds.
- Mercury to Mars: Keplerian orbital elements.
- Jupiter, Saturn, Uranus: Keplerian elements plus dedicated longitude perturbation series.
- Neptune, Pluto: Keplerian elements.
Returned longitudes are geocentric apparent ecliptic longitudes of date: precession, nutation in longitude, and annual aberration are applied, so the figures match standard apparent-position references to the displayed arcminute. Whole Sign is the default house system; Placidus is available as a setting, and its cusps are what we validate against Swiss Ephemeris below.
Independent validation
The engine is validated against two external references it does not ship and does not depend on at runtime: Swiss Ephemeris (Moshier mode), the industry standard, and JPL Horizons, NASA/JPL's solar-system ephemeris, for Chiron.
| What | Reference | Held to |
|---|---|---|
| 10 bodies (Sun to Pluto) | Swiss Ephemeris | ≤ 1 arcminute |
| Planets + Placidus cusps | Swiss Ephemeris | ≤ 2 arcminutes |
| Ascendant | Swiss Ephemeris | ≤ 2 arcminutes |
| Vertex | Swiss Ephemeris | within tolerance |
| Chiron | JPL Horizons | ≤ 0.9 degrees (1900-2100) |
The planetary validation is not one lucky date. It spans seven epochs from 1910 to 2090, checking all ten bodies at each. In plain terms: for the Sun, Moon, and planets, Astraleria's on-device numbers agree with Swiss Ephemeris to within one arcminute, about 1/30 of the width of the full Moon, across more than a century and a half. The worst case measured is 0.8 arcminutes.
Honest limits
A credible accuracy claim names what it does not claim. Chiron is held to 0.9 degrees across 1900-2100 via an empirical correction fitted against 2,283 JPL Horizons reference points, not to the arcminute; its orbit is chaotic and we state the real bound. The narrative readings are an informed interpretation of the computed facts, not a measurement, and carry no accuracy claim. Astrology is a symbolic system: verifiable positions mean the symbolism is applied to correct inputs, not that it predicts events.
Methods and conventions
Astrology has schools; a comparison is only fair if you know which conventions we compute with. These are ours:
- Void-of-course Moon: your choice of rule. The window opens after the Moon's last exact Ptolemaic aspect before leaving its sign; the modern rule (default) counts aspects to any planet from the Sun through Pluto, the traditional rule stops at Saturn. Switch between them in Settings, so the app matches whichever school your reference tool uses.
- Composite charts: midpoint method. Every composite point, including the Ascendant, is the shorter-arc midpoint of the two natal positions. The engine also implements the derived-Ascendant variant (composite MC converted to its right ascension, rising degree taken at the mean of both birth latitudes); the app currently displays the midpoint result.
- Synastry orbs: graduated, not flat. Contacts involving the Sun or Moon get 8 degrees, contacts involving a personal point (Mercury, Venus, Mars, Ascendant, Midheaven) 6 degrees, contacts between two slow movers (Jupiter through Pluto) 4 degrees; sextiles get three quarters of those values. Aspects between the outer planets of two people born close in age are generational and are excluded from the depth and commitment readings.
- Conjunctions: read by the nature of the transiting planet in the daily tone (Mars, Saturn, Uranus, Pluto lean demanding; Venus and Jupiter lean supportive; the rest stay neutral). In the chart wheel, the teaching texts, and synastry, conjunctions remain school-neutral.
- Essential dignities: domicile and detriment follow the traditional rulerships extended by the modern rulers (Uranus for Aquarius, Neptune for Pisces, Pluto for Scorpio), so both the traditional ruler and the modern ruler count as at home. Exaltation and fall are classical. The PDF export tables the seven classical planets, for which both schemes agree.
- Applying and separating: determined from the actual ephemeris motion at the moment in question, including retrograde phases, not from a sign-order shortcut.
Prove us wrong
If you are an astrologer or work with professional software: compare us. Cast a chart in Astraleria and in your reference tool of choice (Solar Fire, Astro Gold, astro.com), same birth data, same house system. Check the Ascendant, the house cusps, the planetary degrees. If you find a deviation beyond the bounds in the table above, write to hello@ankarina.com with the birth data and both results. We treat every verified report as a bug, we fix it, and we credit the finder in the changelog if they wish. A precision claim that cannot be challenged is marketing; this one is an invitation.
Determinism and privacy are one property
Because the engine is a pure function of birth data and clock, three things follow at once. The positions are reproducible: same input, same output, on any device. (One transparent exception layered on top: if you rate forecasts, a conservative local calibration, capped at ten percent and stored only on your device, may re-weight how strongly a transit is emphasised for you. It never changes a computed position.) The computation needs no server, so there is nothing to send, and nothing is sent. And the result is auditable: anyone with the source can run the tests and confirm the figures. Determinism, privacy, and verifiability are one design decision seen from three sides. See the privacy policy.