Reference · v0.23.0

API Reference

Generated from the caelus package with TypeDoc. Regenerate with npm run docs:api. The tiers below mark what to build against; the full alphabetical index follows. See Edge Cases & Stability for the versioning contract.

Advanced

Stable but specialized: reach for these when the recommended surface does not cover the case. The Engine already calls most of them for you.

Internal / unstable

The engine's own astronomy machinery: series evaluators, apparent-position builders, and raw constants. Exported for inspection and tests; not a stable contract. Prefer the Engine over calling these directly.

The Engine

Construct one Engine from a data pack, then call these methods, the surface most code uses. Every method links straight to its signature and parameters.

Charts
chart()Full chart from calendar fields in UT (year, month, day, hour, minute, second).
chartAt()The same chart straight from a Julian Day (UT), no calendar round-trip.
Positions
position()Full Position at a JD: lon, speed, retrograde, sign, lat, distance, ra/dec.
longitude()Apparent geocentric ecliptic longitude (deg) at a JD.
heliocentric()Geometric heliocentric ecliptic (lon, lat, distance in AU).
ecliptic()Raw apparent [lon, lat, dist] building block; most callers want position().
Fixed stars & introspection
fixedStar()Apparent place of a catalog star: lon/lat/ra/dec, sign, magnitude.
starNames()Names in the loaded fixed-star catalog.
starConjunctions()A chart's bodies within orb of catalog stars; feeds star fact atoms.
lots()The seven Hermetic lots placed by sign and house; feeds lot fact atoms.
bodies()Body ids this engine can compute, given its data.
registerSource()Register a runtime heliocentric xyz source under any body id.
registerRender()Author SkyView appearance (size, magnitude, colour) for a registered body.
renderFor()SkyView render attrs for a registered body, if any.
Synthetic ephemeris
syntheticPositions()World-frame positions for every body in an authored system at one instant.
syntheticEphemeris()Reusable position source with speed, retrograde, and validation diagnosis.
registerSyntheticSystem()Drop authored bodies onto an Engine for returns, transits, SkyView.
validateSyntheticSystem()Flag ill-defined synthetic systems (impossible / problems).

Full index

caelus

Classes

ClassDescription
ChebSeries-
Engine-
KeplerOrbitConstant-element two-body orbit with the same xyz(jde) interface as ChebSeries, so chironApparent takes either.
TurboRuntime evaluator for a turbo pack — a segmented Chebyshev fit of the engine's apparent longitude over a fixed range and body set. Evaluating a longitude costs a couple dozen multiply-adds, so a century-scale transit scan that calls it tens of thousands of times runs in milliseconds. Construct one from a pack you minted offline; it does no fitting, no I/O, and needs no Engine.

Interfaces

InterfaceDescription
AnchoredChartA chart described by its realm and anchors, not a bare (instant, place).
AnchorRegistryLookups an anchor may need to resolve: prior instants/places for relative anchors, calendar resolvers for narrative times, a gazetteer for named places. All optional; an anchor that needs a missing one resolves to null.
AngleAtom-
AngleChangeAn angle whose sign changed.
AngleLines-
AshtottariActive-
AshtottariPeriod-
AshtottariSub-
AshtottariTimeline-
AspectOne aspect between two bodies in a Chart.
AspectAtom-
AspectMatch-
BodyChangeA body whose sign or house changed between two charts.
BodyPositionSourceA pluggable position-over-time source: the same shape every derived computation needs from a body. Returned by syntheticEphemeris.
BriefA chart rendered as citable LLM input.
BriefFactA salience-ranked fact in a Brief.
BriefOptions-
CalcOptionsOptions shared by the single-body calls (Engine.position, Engine.longitude) and by charts.
CelestialPoleThe visible celestial pole: the fixed point the whole sky rotates about as time passes (north pole for northern observers, south for southern). Its altitude equals the observer's
ChartA full natal chart, as returned by Engine.chart and Engine.chartAt. Longitudes are degrees in the chart's zodiac.
ChartBodyA Position enriched with chart-relative placement, as returned per body by Engine.chart and Engine.chartAt.
ChartDiffWhat differs between two charts.
ChartLots-
ChartOptionsOptions for Engine.chart and Engine.chartAt, extending CalcOptions.
ChartPatternOne configuration found in a chart.
ChartSignature-
CitationAuditThe result of auditCitations.
ClaimA model-produced statement and the fact ids it claims to rest on.
CompiledForm-
CompileOptions-
CompositeAtom-
CompositePlacementA composite-chart body placement (midpoint method).
ConstellationPackConstellation figure lines and labels; vertices as ecliptic J2000 (lon, lat) degrees. Built by scripts/build-constellations.mjs from d3-celestial.
ContextOptions-
CounterfactualA counterfactual: a base chart and a perturbed variant, with the diff.
CounterfactualEditA perturbation of a resolved chart.
Dasha-
DashaActive-
DashaSub-
DashaTimeline-
DeclinationPair-
DignityAtom-
DignityScoreThe essential-dignity breakdown of a planet at a longitude.
DirectionArcs-
DispositorAtom-
EclipsePathThe umbra/antumbra path of a solar eclipse at one instant.
EngineData-
EnrichFlags-
EnrichTarget-
EphemerisOptions-
EphemerisPoint-
FeatureOptions-
FirdariaPeriod-
FirdariaSub-
GeoPlaceResolved coordinates a chart can be computed at.
GeoPointGeographic point on the Earth's surface (geodetic latitude, east longitude).
InterpretationContextA chart as a flat, ranked list of FactAtoms.
InterpretationSourceA pluggable corpus of rules: a tradition, a house style, a third party.
Kemadruma-
LordPairYoga-
LotAtom-
LunarEclipse-
LunarLocalWhether a lunar eclipse is up at a place, and how high the Moon stands.
MatchThe result of a Selector: did it match, and on which atoms.
MilkyWayThe Milky Way band's appearance in the frame. Visible only in a dark sky (astronomical twilight or night) without a bright Moon or heavy light pollution. The band is the galactic equator; its bright bulge is the galactic center in Sagittarius.
MundaneDirection-
Nakshatra-
NakshatraAtom-
Observer-
OverlayLineAn in-frame polyline (the ecliptic, a constellation figure stroke).
OverlayMarkA labeled point projected into the frame (sign, house, constellation name).
ParanOne co-angular pair: bodies a and b on the named angles at ~the same time.
PatternAtom-
PatternBodyA body's longitude (and house, for stelliums) for detectPatternsIn.
PatternOptions-
Pheno-
PlacementAtom-
PlanetaryHour-
PositionA body's full apparent position, as returned by Engine.position.
PredicateMargin function (true where >= 0) carrying the bodies it depends on.
PrimaryDirection-
ProfectedSign-
Profection-
RankedMoment-
RankOptionsastroengine scan -- long-scan ergonomics over the engine: a batched scan with progress, and rankMoments to find the best instants by a score, synchronously or without blocking the event loop.
ReadingA resolved interpretation: ranked entries, each citing its facts.
ReadingEntryOne licensed statement in a Reading, with its provenance.
ReadingGroupEntries about the same facts, gathered.
RealizedChartThe outcome of realize: how (or whether) a chart was produced.
ReceptionAtom-
ReconcileOptions-
RenderLayerOne layer of the hybrid render: what Caelus computes and the pipeline composites locally over the image-model background plate.
RenderPlanA machine-readable render contract for a hybrid pipeline: ask an image model for a body-free background plate, then composite the computed layers (bodies, stars, the Milky Way, overlays) locally at their exact pixels. The image model supplies atmosphere; Caelus supplies the physically correct objects. This is the structured complement to prompt, which is for humans and image models.
ResolvedPlaceThe outcome of resolving a SpatialAnchor.
ResolvedTimeThe outcome of resolving a TemporalAnchor.
RiseSetOptions-
RuleOne interpretation: a condition and the text it licenses.
SalienceWeightsAdditive salience weights. Each contribution is documented at its use site; override any subset through ContextOptions.salience.
ScanOptionsastroengine scan -- long-scan ergonomics over the engine: a batched scan with progress, and rankMoments to find the best instants by a score, synchronously or without blocking the event loop.
SearchConfigOptions-
SignatureAtom-
SignatureBodyA body's longitude (and house) for chartSignatureOf.
SignatureOptions-
SkyAim-
SkyBody-
SkyLensA resolved lens: field of view and projection actually used.
SkyOffFrameBody-
SkySummary-
SkyViewOptions-
SkyViewOverlaysProjected reference-frame overlays. Each is null when not requested; arrays hold only the in-frame parts. Pixels match the bodies' coordinate system.
SkyViewOverlaysRequestWhich reference frames to project. The ecliptic, the zodiac signs (its 30 degree divisions), the house cusps and angles, and the constellation figure lines. These are annotations: real reference frames drawn over the sky, not things a camera sees.
SkyViewResult-
SkyViewSequence-
SkyViewSequenceSpec-
SkyViewSpec-
SolarEclipse-
SolarLocalLocal circumstances of a solar eclipse seen from one place.
SourceRegistrarA type guard for the surface registerSyntheticSystem needs, so the synthetic module does not import the heavy Engine class.
StarAtom-
StarEntry-
StarfieldSummaryWhat the star field in bodies represents. A deep field is the complete naked-eye sky to limitingMag, pinned at exact pixels (animation-grade); a named field is the bright catalog, to be fleshed out by the model.
StarPack-
StarParanOne star-to-body paran: a fixed star and a body on angles at ~the same time.
SynastryAspectHitAn inter-chart aspect between person A's body and person B's body.
SynastryAtom-
SynastryOverlays-
SyntheticDiagnosisWhy a system is unsatisfiable, if it is — the impossible/residual honesty pattern, mirroring CompiledForm. A system with problems still computes for the bodies that are individually valid, but flags the rest rather than silently producing garbage.
SyntheticPositionA body's position at one instant, in degrees and system length units.
SyntheticRenderRender attributes for a synthetic body — how an imaginary body should look in a SkyView frame. The engine owns position; these own appearance, so a body stays visually consistent across skyViewSequence frames.
SyntheticSystemAn authored celestial system: a set of SyntheticBody that move together, an optional observer body that fixes the vantage point, and optional per-body SyntheticRender attributes.
TimelordAtom-
TransitAtom-
TransitHitA transiting body aspecting a natal point.
TurboBody-
TurboPack-
Varga-
VargaAtom-
VoidOfCourse-
WhenOptions-
XyzSourceAnything that yields heliocentric ecliptic-J2000 xyz (AU) at a TT jd: ChebSeries (fitted small bodies) or KeplerOrbit (Uranian bodies).
Yoga-
YogaAtom-
YoginiActive-
YoginiPeriod-
YoginiSub-
YoginiTimeline-
ZrActive-
ZrPeriod-

Type Aliases

Type AliasDescription
AlwaysBodyBodies guaranteed to be in every chart: the analytic Sun–Pluto and the lunar nodes, which resolve across all supported epochs. (Chiron is Chebyshev-packed and can fall outside its fitted range, so it is not guaranteed.)
AspectPhase-
Ayanamsa-
Body-
BodyIdCore names keep autocomplete; any string id is accepted (data packs).
CertaintyHow trustworthy a resolved instant/place is for computation.
ChartBodiesA chart's bodies, keyed by id. The analytic core (AlwaysBody) is always present and needs no presence check. PackedBody bodies (Chiron) and any opt-in extras requested via ChartOptions.bodies may be absent when the instant is outside their fitted range (see Chart.unavailable), so those accesses are typed `ChartBody
ChebData-
Constraint-
DeclinationKind-
Element-
EphemerisValue-
FactAtom-
FactKindAtom kinds in an InterpretationContext.
HermeticLot-
HouseSystem-
Interval-
KeplerElements-
KeplerPack-
LensSpec-
Modality-
MoonSeries-
PackedBodyDefault chart bodies that are Chebyshev-packed, so they can fall outside their fitted range (and be omitted from a chart). Opt-in asteroids are packed too, but arrive as arbitrary ids through the string index.
PhaseName-
RealmWhat a chart's subject is -- its epistemic / ontological status.
RiseKind-
Sect-
SelectorTests a whole InterpretationContext and reports the matching atoms.
SkyProjection-
SolarPhase-
SpatialAnchorHow a chart's place is known -- the spatial twin of TemporalAnchor.
SyntheticBodyA single authored body. Its id is how every consumer (charts, transits, SkyView) refers to it.
TemporalAnchorHow a chart's time is known.
TwilightStage-
Vec3-
VsopSeries-
Zodiac-

Variables

VariableDescription
ARCSEC-
ASHTOTTARI_ORDER-
ASHTOTTARI_YEARS-
ASPECTS-
AYANAMSA_J2000Mean ayanamsa at J2000.0 (degrees) per mode. Standard epoch anchors (matched to Swiss Ephemeris 2.10 to 1e-9 deg); propagation uses Vondrak 2011 ecliptic precession, the same model Swiss Ephemeris uses: agreement over 1900-2099 is <=0.005 arcsec.
BODIES-
BRIEF_INSTRUCTIONSDefault instruction header prepended to Brief.prompt.
CAZIMI_DEG-
COMBUST_DEG-
DASHA_YEAR-
DEFAULT_BODIES-
DEFAULT_ORBS-
DEFAULT_PARAN_BODIES-
DEFAULT_SALIENCE-
DEGastroengine core -- clean-room ephemeris engine (TypeScript port).
DHANA_HOUSES-
DIAMETER_KMEquatorial diameters, km (IAU values, as used by Swiss Ephemeris).
DIGNITY_WEIGHTS-
DOMICILE-
DRISHTIGraha drishti: the house-distances (1-based) each planet aspects.
EARTH_RADIUS_AU-
ELEMENTS-
EXALTATION-
EXTRA_BODIESComputable on request (not in the default chart set).
FACE_CYCLEFaces (decans): Chaldean order from Mars at 0 Aries; floor(lon/10) selects.
FIRDARIA_ORDERThe firdaria cycle of the seven planets.
FIRDARIA_YEARSPeriod length in years for each of the seven planets.
HERMETIC_LOTSThe seven Hermetic lots, in their conventional order.
HOUSE_SYSTEMSThe canonical house-system ids, in a stable order (also used for error text).
J2000-
KENDRAS-
KEYSDegrees of arc that equal one year of life, per time key.
LENS_NAMES-
LEVEL_UNITDays per period unit at each level (each a twelfth of the one above).
LIGHT_TIME_AU-
MODALITIES-
NAK_SPAN-
NAKSHATRAS-
NODE_PERIODSThe two nodes close the sequence with no sub-periods (70 + 5 = 75 years).
NOT_ASPECTABLEPoints: excluded from aspect search by default.
PARAN_ANGLES-
PATTERN_ANGLESPattern aspects, including the quincunx the default Ptolemaic set omits.
PATTERN_ORBSDefault orbs: DEFAULT_ORBS for the five Ptolemaic aspects, plus a tight quincunx. Override via PatternOptions.orbs.
PLANETS-
QUERY_ASPECTS-
SIGN_RULERSTraditional (domicile) ruler of each sign, Aries..Pisces.
SIGNS-
TERMS_EGYPTIANEgyptian terms (Ptolemy I.21): per sign, [ruler, upper-degree] segments.
TIME_ANCHORED_REALMSRealms whose charts come from a time + place (the ephemeris path). The rest (archetypal, conceptual, mythic) are better generated from constraints via the compiler, since they have no instant to compute from.
TRADITIONAL-
TRIKONAS-
TRIPLICITYDorothean triplicity rulers by element (sign%4), as [day, night, participating].
TROPICAL_YEAR-
UNDER_BEAMS_DEG-
VARGA_DIVISIONSSupported divisions.
VIMSHOTTARI_ORDERThe Vimshottari order and each lord's period in years (totalling 120).
VIMSHOTTARI_YEARS-
YOGA_PLANETS-
YOGINI_LORDS-
YOGINI_YEARSPeriod in years by yogini index (Mangala..Sankata), totalling 36.
YOGINIS-
ZR_PERIODSPeriod length in 360-day years for each sign, Aries..Pisces.

Functions

FunctionDescription
allOfTrue where every predicate is true (interval intersection).
almutenThe almuten of a degree: the classical planet with the greatest positive essential dignity (rulership + exaltation + triplicity + term + face) at lon. Ties broken by the canonical planet order.
anglesAscendant, MC, ARMC, obliquity. East longitude positive.
angularityangular / succedent / cadent for a 1-based house number.
angularSeparation3dTrue great-circle angle (degrees) between two bodies from their ecliptic longitude and latitude. With both latitudes zero this is the unsigned longitude difference; latitude pulls the two apart in three dimensions.
antiscionReflection across the solstice (Cancer-Capricorn) axis.
anyOfTrue where any predicate is true (interval union).
ashtottariActiveThe maha and antar lord active at targetJd; null before the first period.
ashtottariAtAshtottari dasha active at targetJd, from the natal Moon's nakshatra.
ashtottariDashasThe Ashtottari dasha timeline from the Moon's sidereal longitude.
ashtottariLordThe Ashtottari dasha lord governing a nakshatra index (0-based).
aspectA Predicate that holds while body is within orb degrees of an exact aspect to target. Feed it to when to find the time windows, or compose it with allOf/anyOf.
aspectBetweenThe tightest major aspect between two bodies at jd, within orb, or null. orb is the signed distance from exact (degrees).
aspectPhaseApplying/separating/exact for the aspect (degrees) between body a and body b, from their longitudes and longitude speeds (deg/day). Applying = the orb to the exact aspect is closing.
aspectsSignWhether planet at planetSign casts a graha drishti onto targetSign.
associationTypeHow two planets associate: "conjunction"
astrocartographyAngle lines for each body at jdUt: { body: AngleLines }.
auditCitationsCheck that a model's claims cite only facts that exist in the context -- the accuracy half of "novel and accurate". A claim citing an id not in ctx fabricated its provenance, so ok is false and the id lands in unknown.
ayanamsaMean ayanamsa in degrees. Sidereal longitude = (tropical true-equinox longitude - nutation in longitude) - ayanamsa: the sidereal zodiac is anchored to the mean equinox.
azAltApparent ecliptic position -> azimuth (deg, from true north, east- positive) and true altitude (deg). No refraction.
bodySourceThe heliocentric xyz source for one authored body — the per-body engine behind every tier, and the exact object Engine.registerSource consumes.
chartBriefRender an InterpretationContext as a compact, id-tagged Brief for an LLM to interpret and cite.
chartDiffDiff two charts: body sign/house shifts, aspects gained/lost, angle sign changes. Bodies and angles that did not change sign/house are omitted.
chartFeaturesEncode the sky at an instant as a feature vector: each body's ecliptic longitude becomes a weighted unit-circle point. The deterministic substrate for matching and searching chart configurations — compare two with cosineSimilarity, or rank a time range against one with searchConfigurations.
chartSignatureThe structural signature of a Chart: element / modality / angularity / quadrant / hemisphere distributions over its bodies, the dominant element, modality, and most-occupied sign, and the classical chart ruler. Counts only, no interpretation. Bodies absent from the chart (outside their fitted range) are skipped.
chartSignatureOfStructural counts for a body map. Lower-level form of chartSignature: bodies maps a body id to { lon, house? }.
chironApparent-
compileFormSynthesize a chart form from geometric constraints — the inverse of (time, place) → chart. Given weighted Constraints (aspects between bodies, sign placements, exact degrees), find the body longitudes that best satisfy them via deterministic coordinate descent, and report how well they can be met. When even the best fit is poor, the form is flagged impossible — a valid, informative result.
compositeLongitudesMidpoint-method composite: the shorter-arc midpoint of each body's two longitudes. Angles compose the same way via midpointLon on the two ASC/MC.
compositePlacementsMidpoint-composite placements for bodies from two birth instants.
configurationFitSimilarity between the sky at jdUt and a target feature vector — shorthand for cosineSimilarity(chartFeatures(engine, jdUt, opts), target). The scoring function searchConfigurations maximizes.
constraintLossDegrees by which a single Constraint is unmet for a set of body longitudes — 0 when satisfied. The pure building block of formLoss and compileForm.
contraAntiscionReflection across the equinox (Aries-Libra) axis.
cosineSimilarityCosine similarity of two feature vectors, in [-1, 1]. For vectors from chartFeatures this is a weighted mean of cos(Δlongitude) per body: 1 when the configurations coincide, falling off as bodies diverge.
counterfactualRealize an AnchoredChart, then apply a CounterfactualEdit and diff the result -- "a real event, perturbed." A time/place edit recomputes the ephemeris; a setLongitudes edit splices the geometry.
crossingsUT JDs where the body's apparent longitude crosses targetLon (degrees) in [jdStart, jdEnd]. Retrograde bodies can cross a degree three times; every crossing is returned in time order.
davisonParamsTime and place for a Davison relationship chart: the temporal midpoint and the geographic midpoint (mean latitude, shorter-arc mean longitude). Compute a normal chart at these to get the Davison chart. Returns [jd, lat, lonEast].
declinationAspectClassify two declinations: parallel (same), contraparallel (opposite), null.
declinationAspectsParallels and contraparallels among a set of bodies at an instant: pairs whose declinations are equal (parallel) or equal and opposite (contraparallel) within orb — the declination analogue of conjunction and opposition.
deltaTΔT (TT − UT1) in seconds at a given instant — the gap between Terrestrial Time and universal time. Observed IERS values 1955–2025, Espenak–Meeus polynomials before, and a gentle extrapolation after (Earth's rotation sped up post-2016). The engine applies this for you; call it directly only for timescale work.
detectPatternsThe aspect configurations present in a Chart: T-squares, grand trines, grand crosses, yods, kites, mystic rectangles, and stelliums by sign and by house. Bodies outside their fitted range (absent from the chart) are skipped.
detectPatternsInThe configurations present among a body map. Lower-level form of detectPatterns: bodies maps a body id to { lon, house? }.
detectYogasThe placement yogas present in a chart. signs maps each of the seven classical planets to its 0-based sign index; ascSign is the Ascendant's sign index.
dhanaYogasDhana yogas: associations between two wealth-house (2/5/9/11) lords.
dhanaYogasAtDhana yogas of a natal chart.
dignitiesEssential dignities a body holds in a sign: any of "domicile", "exaltation", "detriment", "fall" (the last two are the signs opposite domicile and exaltation). Empty when the body is peregrine there or has no classical rulership (the outer planets, Chiron, the nodes).
dignityOf-
dignityScoreThe weighted essential dignities of planet at ecliptic longitude lon (degrees) in a day or night chart. Only the seven classical planets score.
directedLongitude-
directionArcsDirect primary-direction arcs (degrees, [0, 360)) of a body at right ascension alpha and declination delta to the four angles, for latitude phi and right ascension of the MC ramc. asc/dsc are null when the body is circumpolar.
directionYearsYears of life corresponding to an arc of direction under a time key.
elementTriplicity (element) of a sign: "fire", "earth", "air", or "water".
enrichContextOptionsBuild ContextOptions extras for a natal chart evaluated at target. Merge the result into interpretationContext(chart, { ...base, ...extras }).
enrichSynastryOptionsSynastry and composite atoms for two natal charts (A is the projection base).
ephemerisSample value for each body across [start, end], returning per-body series in time order.
equationOfTimeApparent minus mean solar time, minutes (Meeus ch. 28).
equatorialEcliptic lon/lat -> right ascension, declination (all radians).
faceRuler-
featureVectorBuild a feature vector from explicit (longitude, weight) pairs: each pair contributes a weighted unit-circle point [w·cos(lon), w·sin(lon)]. The low-level primitive behind chartFeatures; most callers want that.
findAspects-
firdariaThe full firdaria timeline from birth.
firdariaActiveThe major and sub firdar lord active at targetJd; both null outside the 75-year span.
firdariaAtThe active firdar at targetJd, taking the chart's sect from the natal moment and place.
firdariaSequenceThe nine major firdaria periods in order, as [lord, years] pairs.
fmtLon-
formLossTotal weighted loss for a set of body longitudes — the sum of each constraint's constraintLoss times its weight. The objective compileForm minimizes.
gastGreenwich apparent sidereal time.
gauquelinSectorThe Gauquelin sector of a body (1–36, fractional) from the rise/set times of the disc centre with refraction (Swiss Ephemeris method 3). Sectors run from rise: 1–18 above the horizon, 19–36 below.
gmstGreenwich mean sidereal time, radians (IAU 1982 / Meeus 12.4).
harmonicChartThe nth-harmonic chart: each body's longitude multiplied by n and wrapped to [0, 360). The 5th harmonic surfaces quintiles, the 9th the navamsa, and so on.
harmonicLongitudeThe nth-harmonic longitude of a point: lon * n, wrapped to 360.
hasAngleMatches an angle atom by which angle and/or its sign.
hasAspectMatches aspect atoms. between is an unordered pair; minStrength filters loose aspects; phase filters applying/separating.
hasCompositeMatches a composite midpoint placement.
hasDignityFineMatches finer essential-dignity facts (term, face, triplicity, almuten).
hasDispositorMatches dispositor atoms by body, its dispositor, and/or the final flag (a body in its own domicile that terminates a dispositor chain).
hasLotMatches a Hermetic lot by name, and/or its sign or house.
hasNakshatraMatches a nakshatra placement.
hasPatternMatches configuration atoms by kind and/or a participating body.
hasPlacementMatches placement atoms by any subset of body / sign / house / retrograde / a held dignity.
hasReceptionMatches a mutual reception, optionally involving a given body.
hasSignatureMatches a structural-signature facet, e.g. ("element", "fire").
hasStarMatches a fixed-star conjunction by the catalog star and/or the body on it.
hasSynastryMatches synastry aspect or house-overlay atoms.
hasTimelordMatches an active time-lord period.
hasTransitMatches transit-to-natal aspect atoms.
hasVargaMatches a varga (divisional chart) placement.
hasYogaMatches a classical yoga.
hermeticLotsThe seven Hermetic lots from the Ascendant, sect, and the seven planets' longitudes (degrees). Pure arithmetic.
houseCuspEcliptic longitude where the house circle with pole pole crosses the ecliptic; ra measured like ARMC. The Ascendant is houseCusp(armc+90, phi); the MC is houseCusp(armc, 0).
houseFromAscThe whole-sign house (1-12) a sign falls in from the Ascendant.
houseLordThe lord of the given whole-sign house from the Ascendant.
houseOf1-based house number for an ecliptic longitude (degrees) given the twelve cusps (degrees), wrapping across 0.
housesAlcabitiusAlcabitius: trisect the Ascendant degree's semi-arcs in right ascension; project cusps along meridians.
housesCampanusCampanus: equal divisions of the prime vertical. House circles run through the horizon's north/south points; cusps are their ecliptic crossings, assigned in zodiacal order MC->ASC->IC.
housesEqual-
houseSignThe sign on the given whole-sign house (1-12) from the Ascendant.
housesKochKoch (birthplace): cusps are ascendants at ARMC +/- k/3 of the MC degree's diurnal semi-arc. Throws where the MC degree is circumpolar (
housesMeridianMeridian (axial rotation): equal RA divisions projected along hour circles. Latitude-independent.
housesMorinusMorinus: equal RA divisions projected onto the ecliptic by great circles through the ecliptic poles. Latitude-independent.
housesPlacidusPlacidus house cusps via the classic iterative semi-arc scheme: for all four intermediate cusps RA = ARMC + offset + f·AD with AD = asin(tan φ · tan δ); offsets 30/60/120/150, f = 1/3, 2/3, 2/3, 1/3. Undefined above the polar circles, as Placidus itself is.
housesPolichPagePolich-Page ('topocentric'): cusp poles tan P = (k/3) tan(phi).
housesPorphyry-
housesRegiomontanusRegiomontanus: equal divisions of the celestial equator; cusp poles tan P = tan(phi) sin(H).
housesVehlowVehlow: equal houses with the ASC at the middle of house 1.
housesWholeSign-
inSect-
inSignTrue while body is in sign (index 0=Aries..11=Pisces, or name).
interpretRun interpretation sources against a fact projection and return a ranked Reading. Each rule whose selector matches emits an entry carrying the matched atom ids (provenance) and a salience = sum of those atoms' salience x the rule weight. The engine never ships the content: the sources are the caller's.
interpretationContextProject a Chart into a ranked list of FactAtoms -- the substrate an interpretation layer consumes. Pure and deterministic; computes applying/separating and a normalized strength for each aspect that the bare Chart.aspects list omits.
isDayChartDiurnal when the Sun is above the horizon at the given place.
isoToJdISO-8601 timestamp -> UT Julian Day, or null when unparseable.
isTimeAnchoredWhether a realm is normally grounded in an instant (ephemeris) rather than synthesized from symbolic constraints.
jdTT-
julianDayConvert a UT calendar date and time to a Julian Day (UT) — the time coordinate the engine consumes. Pass the result to Engine.position, Engine.longitude, Engine.chartAt, and the event/derived functions; Engine.chart takes the calendar fields directly instead.
kemadrumaKemadruma yoga: the Moon is isolated -- no planet in the 2nd or 12th sign from it, nor conjunct it. The planet set is parameterized (texts vary): the default is the five tara grahas, includeSun adds the Sun, includeNodes adds Rahu/Ketu when present in signs.
kemadrumaAtKemadruma yoga of a natal chart, from the sidereal rasi positions.
lotFortuneLot of Fortune: Asc + Moon - Sun by day, Asc + Sun - Moon by night.
lotsThe seven Hermetic lots of a chart: compute the Ascendant and sect, then the lots from the seven planets' longitudes.
lotSpiritLot of Spirit (the reverse of Fortune): Asc + Sun - Moon by day.
lunarEclipseLocalLocal visibility of a lunar eclipse: a lunar eclipse happens at the same instant for the whole Earth, so "local circumstances" is simply whether the Moon is up. Pass a contact time (e.g. LunarEclipse.tMax or a phase boundary) to learn whether that phase is visible from a place.
lunarEclipsesLunar eclipses in [jdStart, jdEnd] (UT JDs).
lunarPhasesEvery principal lunar phase (new, first quarter, full, last quarter) within [jdStart, jdEnd], sorted by time. Found from the Sun–Moon elongation crossing 0°/90°/180°/270°.
lunarReturn-
matchAllMatches only when every selector matches; returns the union of their atoms.
matchAnyMatches when any selector matches; returns the atoms from those that did.
matchNoneMatches when the selector does NOT match (an absence test); no atoms.
meanLilithMean lunar apogee (Black Moon Lilith) on the inclined lunar orbit: apparent lon (true equinox) and orbital latitude, radians.
meanNode-
meanObliquity-
midpointLonShorter-arc midpoint of two longitudes (degrees).
modPython-style modulo: result has the sign of the divisor.
modalityQuadruplicity (modality) of a sign: "cardinal", "fixed", or "mutable".
moonApparentPrecise-
moonApparentSeries-
moonGeometricGeocentric Moon, mean equinox of date (Meeus ch.47): lon, lat, dist km.
mundaneDirectionArcPlacidus semi-arc mundane directional arc (degrees) for promissor P to significator S: arc = MD_p - (MD_s / SA_s) * SA_p. null if either body is circumpolar. Reduces to the to-MC arc when S is on the meridian, and to 0 when P and S coincide.
mundaneDirectionsDirect mundane (Placidus semi-arc) directions of each promissor to each other significator within maxYears, sorted by years.
nakshatraThe nakshatra of a sidereal longitude.
nakshatraAtThe nakshatra of a body (default the Moon) at jd, in a sidereal zodiac.
normalizeHouseSystemResolve a forgiving house-system string (any case, spaces or hyphens, or a known alias) to a canonical HouseSystem, or throw listing the valid ids. Lets MCP, share links, and hand-written calls pass "whole sign", "Whole_Sign", "whole", etc. without tripping the strict union.
notOfTrue where pred is false (interval complement).
notRetrogradeTrue while body is direct or stationary.
nutationIAU 1980 nutation: [dPsi, dEps] in radians.
oscApogeePreciseOsculating lunar apogee (True Lilith) from the Chebyshev moon.
oscApogeeSeriesSeries fallback outside the Chebyshev range (same finite-difference state as the true-node fallback).
outOfBounds-
outOfBoundsMargin
paransCo-angular pairs over the 24 hours from jd (UT) at latitude lat: every pair of different bodies whose angle crossings fall within toleranceMin minutes. Ordered by (a, b, jd), with a < b by name.
parivartanaSign exchange: a sits in b's sign and b sits in a's sign.
parseOffsetParse a duration offset into days. Accepts a compact single unit ("3d", "-2h", "1.5y", "6mo", "90m") or an ISO-8601 duration ("P1Y2M10DT2H30M"). Calendar units use mean lengths (year 365.2425 d, month 30.436875 d). Returns NaN when unparseable.
phenoPhotometric and apparent-geometry quantities for a body at an instant: its phase angle, illuminated fraction, elongation from the Sun, apparent disc diameter, and apparent visual magnitude.
planetApparentApparent geocentric ecliptic lon/lat (true equinox of date), distance.
planetaryHourThe planetary hour containing jdUt at a place, or null at latitudes where the Sun does not rise or set on the day in question.
planetarySectThe sect a body belongs to: "diurnal" (Sun, Jupiter, Saturn), "nocturnal" (Moon, Venus, Mars), or null for Mercury and bodies without a fixed sect. Whether a chart is itself day or night — the Sun above or below the horizon — is a separate question.
planetLinesAngle lines for one body at right ascension/declination (degrees) and a Greenwich apparent sidereal time (degrees).
plutoApparent-
plutoHeliocentricMeeus ch.37 heliocentric Pluto, ecliptic J2000: [l rad, b rad, r AU].
precessEclipticPrecession of ecliptic coordinates between epochs (Vondrak 2011): ecliptic-of-from -> J2000 equatorial -> ecliptic-of-to.
primaryDirectionsDirect primary directions of the bodies to the four angles within maxYears, by the given time key, sorted by years.
profectedSignThe whole-sign profection steps signs after the Ascendant sign.
profectionAnnual and monthly profection at targetJd for a natal Ascendant sign.
profectionAtProfection from a natal chart: take the Ascendant sign from the natal chart, then profect to targetJd.
progressedJdThe JD whose real positions are the secondary-progressed positions for the age (targetJd - natalJd): one day of motion per year of life.
progressedLongitudeSecondary-progressed longitude of a body for a given target date: the "day-for-a-year" method, where one day of real motion after birth maps to one year of life. Equivalent to taking the body's longitude at progressedJd.
quadrant1-based quadrant (I–IV) of a 1-based house number: houses 1–3 -> 1, etc.
rajaYogasRaja yogas: associations between a kendra lord and a trikona lord.
rajaYogasAtRaja yogas of a natal chart, with the chart's yogakarakas.
rankMomentsScore every sampled instant and return the best, highest score first.
rankMomentsAsyncrankMoments that yields to the event loop every chunk samples, so a long main-thread scan does not freeze the UI. Same result as rankMoments.
realizeRealize an AnchoredChart: resolve its anchors and run the appropriate generator. A resolvable instant always wins (the realm is then just framing); failing that, constraints synthesize a form; failing both, nothing computes.
realmFramingA one-line framing for the realm and certainty, or "" when neither needs it.
reconcileGroup a Reading's entries by the facts they share, so statements about the same atoms surface together rather than scattered through a flat list -- the substrate for "everything said about this placement" and for spotting contention. Entries are connected when their cited atoms overlap; an entry citing nothing (an absence rule) stands alone. A group is contested when a declared conflicting tag-pair both appear in it.
refractApparentToTrueBennett refraction, degrees.
refractTrueToApparentSaemundsson refraction, degrees. Returns the input unchanged when even the refracted altitude stays below the horizon (matches Swiss Ephemeris).
registerSyntheticSystemRegister a system's bodies on a real Engine so transits, returns, retrograde detection, skyView, relational — every computation built on Engine.position/Engine.longitude — consume them unchanged. The bodies are placed heliocentrically in the real solar system and viewed from real Earth, so the synthetic observer is not applied here (use syntheticPositions for the self-contained world frame). Each body's epoch is then interpreted as a TT Julian Day.
resolvePlaceResolve a SpatialAnchor to coordinates, using registry for relative references and the gazetteer for named places. place is null when no coordinates can be derived (fictional, none, an unknown reference).
resolveTimeResolve a TemporalAnchor to a usable instant, using registry for relative references and narrative calendars. The result always reports its Certainty; jd is null exactly when no instant can be derived (symbolic, none, an unknown reference, or an unmappable calendar).
retrogradeTrue while body is in apparent retrograde motion.
returnsUT JDs in [jdStart, jdEnd] when body returns to its natal longitude. Outer-planet returns can show three crossings around a retrograde loop.
riseSetThe next rise, set, or meridian transit of a body after jdStart, as a Julian Day (UT). Accounts for the body's apparent radius, atmospheric refraction, and observer altitude.
sampleCountNumber of samples a scan of these options visits.
scanEvaluate fn at each sampled instant in [start, end], returning the results in time order.
searchConfigurationsRank the instants in [start, end] by how closely the sky resembles a target feature vector, best first — a realization search over the feature space. Build target with chartFeatures (e.g. from a natal chart).
separationUnsigned angular separation in [0, 180] degrees.
signedElongationSigned shortest angle from b to a, in (-180, 180] degrees.
signLordThe traditional ruler of a sign index (0 = Aries).
signRulerTraditional (domicile) ruler of a sign index (0 = Aries).
skyViewProject the visible sky into an image frame for a place, instant, aim, and lens. Returns each in-frame body's pixel position, apparent size, brightness, and (for the Moon) phase orientation, a sky-state summary, the bright bodies just outside the frame, and a serialized prompt.
skyViewSequenceA time sequence of skyView frames for the same place, aim, and lens: the keyframes for an accurate night-sky animation. Each frame is a complete, physically exact spec; across frames the sky rotates about the pole, the Moon drifts and changes phase, twilight evolves, and the Milky Way wheels. The geometry is continuous, so the frames are temporally coherent; supplying them as control images (or reprojecting one rendered plate by the per-frame rotation) is how to keep the rendered output coherent too.
solarArcSolar-arc direction angle (degrees, forward): how far the secondary- progressed Sun has moved from the natal Sun. Add it to any natal longitude.
solarEclipseLimitsGround path of a solar eclipse at a Julian Day (UT): the central point and the north/south limits of totality (or annularity), with the path width. Marches perpendicular to the shadow's ground track out to the umbra edge -- where the Moon just fully covers (or is covered by) the Sun. Sample across the eclipse to trace the full path of totality.
solarEclipseLocalLocal circumstances of a solar eclipse as seen from one place: contact times, magnitude, and obscuration. Topocentric Sun and Moon disks, so it accounts for lunar parallax (which is what makes the same eclipse total in one town and partial in the next).
solarEclipsesSolar eclipses in [jdStart, jdEnd], with global circumstances (not local visibility). Each new Moon in the window is tested for an eclipse and, when found, classified by the Moon's shadow geometry.
solarEclipseWhereSub-shadow geographic point where the eclipse axis meets the Earth at a Julian Day (UT): the centre line of totality/annularity at that instant. Sample it across the eclipse (e.g. between the SolarEclipse begin and end) to draw the ground track.
solarElongationEcliptic-longitude separation between a body and the Sun (degrees).
solarPhasecazimi / combust / under_beams / null for a body's nearness to the Sun by ecliptic longitude. The Sun itself returns null.
solarReturnSolar-return instants in [jdStart, jdEnd]: the times the Sun returns to its natal longitude (about once a year). Build a chart at each with Engine.chartAt for the solar-return chart.
starAngleTimesThe four angle crossings of a fixed star over the day from jd at latitude lat: the meridian transits always occur; rise/set are absent when the star is circumpolar or never rises.
starApparentApparent ecliptic [lon, lat] of date (rad) for a catalog entry.
starParansStar-to-body parans over the day from jd (UT) at latitude lat: a fixed star and a moving body simultaneously on angles within toleranceMin minutes — Brady's fixed-star parans. Ordered by (star, body, jd).
startingYogini0-based starting yogini index from the Moon's nakshatra index (0-based): (nakshatra number + 3) mod 8, a remainder of 0 mapping to the 8th.
stationsTimes the body stations (speed crosses zero): [jdUt, direction the body turns]. Sun and Moon never station. Station timing is ill-conditioned: expect minute-level differences between ephemerides.
sunApparent-
synastryAspectsInter-chart aspects between two natal charts (static snapshot; both speeds 0).
synastryOverlaysHouse overlays both ways between two charts.
syntheticEphemerisA BodyPositionSource over an authored system: the world-frame view as a reusable object, with longitude speed and a retrograde flag so it satisfies the same contract real ephemeris bodies do. Carries the system's validateSyntheticSystem diagnosis (impossible/problems) — the honesty pattern — and still serves the bodies that are individually valid.
syntheticPositionsPositions of every body at one instant — the core position-over-time contract. Pure: a function of (sys, t) only.
syntheticRenderThe SyntheticRender attributes for a body id, or undefined when none were authored. The accessor SkyView/skyViewSequence reads so an imaginary body keeps a consistent size, brightness and colour across frames — the engine owns position, this owns appearance.
syntheticSourcesBuild the heliocentric XyzSource for every body in a system, keyed by id — the raw material for both the world-frame contract and engine registration.
termRuler-
topocentricEclDiurnal parallax in ecliptic coordinates (Meeus ch. 11/40). lst = local apparent sidereal time (rad). Returns [lon, lat, distAu].
transitAspectsTransiting bodies aspecting a natal chart at transitJd. Natal longitudes are fixed; phase reflects the transiting body's motion toward the natal point.
trueNodePrecise-
trueNodeSeriesOsculating node from the series moon (fallback outside Chebyshev range).
trueObliquity-
unitVectorUnit vector on the sphere for an (ecliptic longitude, latitude) pair, in the ecliptic frame: x toward 0 Aries, z toward the north ecliptic pole.
validateSyntheticSystemCheck an authored system for the ways it can be ill-defined — duplicate ids, a dangling observer, non-positive periods, or out-of-range eccentricity — and report each, in the impossible/residual honesty style. Pure.
vargaThe varga D-n placement of a sidereal longitude.
vargaAtThe varga D-n of a body (default the Moon) at jd, in a sidereal zodiac.
vargaChartThe full divisional chart D-n at jd: the varga sign of each body.
vertexEastPointVertex (western crossing of prime vertical and ecliptic) and east point (equatorial ascendant). Radians in, radians out.
vimshottariActiveThe mahadasha, antardasha, and pratyantardasha lords active at targetJd.
vimshottariAtVimshottari dasha active at targetJd, from the natal Moon's nakshatra.
vimshottariDashasThe Vimshottari dasha timeline from the Moon's sidereal longitude.
voidOfCourseVoid-of-course state of the Moon at jdUt: void from its last perfecting aspect to a traditional planet (Sun..Saturn) until it leaves the sign it occupies at jdUt.
vsopHeliocentric-
whenSolve for the time intervals within [jdStart, jdEnd] (UT Julian Days) where a Predicate holds. Predicates compose from aspect, inSign, retrograde, notRetrograde, and the allOf/anyOf combinators, so one call answers questions like "when is Venus in Taurus while Mercury is direct?".
yogakarakasPlanets ruling both a pure kendra (4/7/10) and a pure trikona (5/9), sorted.
yogasAtThe placement yogas of a natal chart, from the sidereal rasi positions.
yoginiActiveThe maha and antar yogini active at targetJd; null before the first period.
yoginiAtYogini dasha active at targetJd, from the natal Moon's nakshatra.
yoginiDashasThe Yogini dasha timeline from the Moon's sidereal longitude.
zrActiveThe L1..L4 releasing signs active at targetJd; null outside the span.
zrAtZodiacal releasing active at targetJd, releasing from the Lot of Spirit (default) or Fortune of the natal chart.
zrReleaseFlat timeline of releasing periods down to maxLevel over horizonYears (360-day years) from birth.

Start building

Quickstart →