[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82919":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":28,"readmeContent":29,"aiSummary":30,"trendingCount":15,"starSnapshotCount":15,"syncStatus":31,"lastSyncTime":32,"discoverSource":33},82919,"xalen-ephemeris","vedika-io\u002Fxalen-ephemeris","vedika-io","Pure-Rust astronomical ephemeris for astrology — Vedic, Western, Chinese, and 9 world traditions","https:\u002F\u002Fxalen.io",null,"Rust",560,66,1,0,104,689,9.48,"Apache License 2.0",false,"main",[23,24,25,26,27],"astrology","astronomy","ephemeris","rust","vedic","2026-06-12 02:04:29","# XALEN Ephemeris\n\n**A pure-Rust astronomical ephemeris for astrology — JPL-class planet accuracy, zero `unsafe` core, Apache-2.0.**\n\n[![Crates.io](https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fv\u002Fxalen-ephemeris.svg)](https:\u002F\u002Fcrates.io\u002Fcrates\u002Fxalen-ephemeris)\n[![docs.rs](https:\u002F\u002Fimg.shields.io\u002Fdocsrs\u002Fxalen-ephemeris)](https:\u002F\u002Fdocs.rs\u002Fxalen-ephemeris)\n[![CI](https:\u002F\u002Fgithub.com\u002Fvedika-io\u002Fxalen-ephemeris\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fvedika-io\u002Fxalen-ephemeris\u002Factions\u002Fworkflows\u002Fci.yml)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Apache--2.0-blue.svg)](LICENSE)\n\n> **Publish status:** the Rust crates, the PyPI `xalen` wheel, and the npm `xalen` (native) \u002F `xalen-ephemeris` (WASM) packages are **not published to their registries yet** — the Crates.io \u002F docs.rs registry badges above are placeholders until first release. Build from source per the per-binding READMEs (`crates\u002Fxalen-python`, `crates\u002Fxalen-node`, `crates\u002Fxalen-wasm`).\n\n> **Validated against the references that matter** — JPL Horizons **DE440** (NASA's\n> definitive ephemeris), the real DE440 binary kernel, **Swiss Ephemeris**, and the\n> public calculators (astro.com, AstroSage, Drik Panchang, Prokerala, Jagannatha\n> Hora). **Sun + Mercury–Saturn sub-arcsecond** vs DE440 (Sun 0.21″, Mercury–Saturn\n> ≤ 0.76″; Uranus\u002FNeptune ~1.8–2.5″, Pluto arcminute-class in-window). Analytical\n> **Moon RMS ~2.8″ \u002F max ~12″** vs pyswisseph (AD 1600–2100); the DE440 kernel takes\n> the Moon **sub-arcsecond**. Pure Rust, zero `unsafe` in the core, thread-safe,\n> Apache-2.0. Full report → [docs\u002FACCURACY.md](docs\u002FACCURACY.md).\n\n```rust\nuse xalen_ephem::{Almanac, Body};\nuse xalen_time::{calendar_to_jd, CalendarSystem, JulianDay};\nuse xalen_ayanamsa::Ayanamsa;\nuse xalen_vedic::nakshatra::Nakshatra;\n\nlet jd = calendar_to_jd(1990, 3, 15, 12.0 - 5.5, CalendarSystem::default());\nlet almanac = Almanac::default_vedic();\nlet pos = almanac.geocentric_ecliptic(Body::Moon, jd).unwrap();\nlet sid = (pos.longitude.to_degrees() - Ayanamsa::Lahiri.compute_deg(jd.as_f64())).rem_euclid(360.0);\nprintln!(\"{}\", Nakshatra::from_longitude_deg(sid)); \u002F\u002F Swati\n```\n\n---\n\n## What You Get\n\n- **50 ayanamsa systems** -- Lahiri, KP Krishnamurti, Raman, Fagan-Bradley, True Chitrapaksha, True Revati, Surya Siddhanta, all Galactic Center variants, Babylonian (Kugler), all Swiss Ephemeris IDs (0-46), plus a fully custom variant with user-defined epoch, value, and precession rate\n\n- **23 house systems** -- Placidus, Koch, Campanus, Regiomontanus, Whole Sign, Equal, Porphyry, Morinus, Alcabitius, Topocentric (Polich-Page), Meridian, Vehlow, Sripati, Krusinski-Pisa, Sunshine (Makransky & Treindl), Pullen Sinusoidal (Delta & Ratio), Carter Poli-Equatorial, APC, Zariel, Alcabitius Classic -- with automatic Porphyry fallback at polar latitudes. (Gauquelin sectors is an experimental placeholder that currently returns Placidus cusps, not a true Gauquelin division.)\n\n- **12+ astrology traditions** -- Vedic\u002FJyotish (dasha, shadbala, KP, Jaimini, Tajaka, panchang with tithi\u002Fnakshatra\u002Fyoga\u002Fkarana transition times, compatibility, 16 divisional charts, yoga, dosha), Western (aspects, dignities, 97 Arabic Lots, Hellenistic, Uranian, Cosmobiology, progressions, exact solar\u002Flunar returns by iterative refinement, declination aspects + antiscia, harmonics, horary), Chinese (BaZi, Zi Wei Dou Shu, Feng Shui Flying Stars, Qi Men Dun Jia [experimental]), Lal Kitab, I Ching (64 hexagrams + all 384 line texts, verbatim public-domain Legge SBE XVI), Numerology, Korean Saju, Japanese Nine Star Ki, Burmese Mahabote (day-sign profile only), Mayan, Aztec, Tibetan, Persian\u002FZoroastrian, Egyptian, Celtic\n\n- **506 built-in fixed stars** (in `xalen-western`) with proper motion and precession correction (all mag \u003C 3.0, Behenian, Royal, Nakshatra yogatara, IAU-named to mag ~5). The `xalen-stars` crate adds **8,870 compiled-in Hipparcos stars** (every Hipparcos record at Vmag ≤ 6.5, propagated J1991.25 → J2000.0, zero data files) on top of a 108-star curated core catalog — and still supports loading the full 118,218-star Hipparcos catalog from CSV at runtime\n\n- **Solar and lunar eclipse engine** -- rigorous Besselian elements (Explanatory Supplement §11; Meeus Ch. 54) for global type \u002F γ \u002F greatest-eclipse, plus a per-observer local-circumstances layer (magnitude, obscuration, C1–C4 contact times); lunar eclipse classification (total \u002F partial \u002F penumbral) via Meeus Ch. 55. Global type validated against NASA for 2017-08-21 and 2024-04-08\n\n- **Black Moon Lilith** -- both **mean** lunar apogee and **True (osculating)** Lilith (Swiss `SE_OSCU_APOG`), Chiron, True Node, Mean Node\n\n- **Velocity \u002F daily motion** for every body, with `is_retrograde()`,\n  **topocentric positions** (diurnal parallax) for an observer's exact location,\n  and **equatorial RA\u002FDec, heliocentric, and rectangular XYZ** output alongside\n  the geocentric ecliptic place\n\n- **Time systems** -- UT1 \u002F TT \u002F TDB Julian Day types, UTC↔TAI with the full\n  leap-second table, and a genuine Stephenson–Morrison–Hohenkerk 2016 ΔT spline\n  with a published per-epoch σ envelope\n\n- **15 asteroids** -- the big 4 (Ceres, Pallas, Juno, Vesta), Hygeia, Astraea, Psyche, Eros, Lilith (1181), centaurs (Pholus, Nessus), and TNOs (Eris, Sedna, Makemake, Haumea), plus an external element loader for any asteroid with known orbital elements\n\n- **SVG chart rendering** -- North Indian diamond, South Indian box, and Western wheel charts, zero external dependencies\n\n- **City geocoding** for 130+ cities with latitude, longitude, and timezone\n\n- **NAIF DE440 SPK reader** -- reads real JPL `.bsp` binary files for extended validity range and JPL-grade accuracy; the analytical engine (VSOP87A + ELP2000-82 + IAU 2000B nutation + full IAU 2006\u002FP03 rotation) works standalone with zero data files: **Sun + Mercury–Saturn sub-arcsecond** vs JPL DE440 (Sun 0.21\", ≤0.76\"), Uranus\u002FNeptune ~1.8–2.5\", **Moon RMS ~2.8\" \u002F max ~12\"** vs pyswisseph (AD 1600–2100; an earlier build mis-applied the planet annual-aberration term to the geocentric Moon for a ~11–31\" residual — that bug is fixed, see ACCURACY.md), and Pluto arcminute-class in-window (published Goffin-fit bound ~1′; the committed golden test asserts a 600″\u002F10′ regression ceiling vs DE440 — no test asserts a tighter figure). **Load the DE440 kernel for JPL-grade sub-arcsecond on the Sun, planets and Moon, plus full-range Pluto.** Both engines apply the same apparent-place chain (full-rotation precession + nutation; planets\u002FSun get 2-pass annual aberration, the geocentric Moon gets geocentric light-time but NOT annual aberration). Numbers reproducible from this repo via `cargo test -p xalen-ephem --test accuracy_vs_de440` (with a `de440s.bsp` kernel present)\n\n- **19 languages** -- English, Hindi, Sanskrit, Tamil, Telugu, Kannada, Malayalam, Bengali, Gujarati, Marathi, Punjabi, Odia, Spanish, Portuguese, French, German, Japanese, Thai, Indonesian -- for planet names, signs, nakshatras, weekdays\n\n- **Language bindings** -- Node.js (napi-rs), Python (PyO3), WASM (wasm-bindgen), and C FFI (`extern \"C\"`)\n\n---\n\n## Installation\n\n> **Availability note:** crates.io currently serves the **0.3.1** line (leaf\n> crates). The 0.4.x \u002F 0.5.x releases described in this README are **not yet\n> published to crates.io** — publishing is in progress. Until it lands, either\n> pin `0.3` or depend on this repository directly with a `git`\u002F`path` dependency.\n> The Node.js (`xalen`, npm) and Python (`xalen`, PyPI) packages are **not yet\n> published**; see *Language Bindings* below for building from source.\n\n```bash\n# crates.io (currently serves the 0.3.1 line):\ncargo add xalen-ephemeris\n```\n\nOr pick individual crates for a smaller footprint (pin to the latest published\nversion):\n\n```toml\n[dependencies]\nxalen-ephem = \"0.3\"         # planetary engine\nxalen-vedic = \"0.3\"         # Vedic astrology\nxalen-houses = \"0.3\"        # house systems\nxalen-ayanamsa = \"0.3\"      # ayanamsa \u002F sidereal conversion\nxalen-time = \"0.3\"          # Julian Day, delta-T, calendars\n```\n\n## Quick Start\n\n### Vedic chart: Sun and Moon with nakshatra and rashi\n\nWith only `xalen-ephemeris` added, every sub-crate is reachable through the\numbrella re-exports (`xalen_ephemeris::ephem`, `::vedic`, `::time`, …):\n\n```rust,no_run\nuse xalen_ephemeris::ayanamsa::Ayanamsa;\nuse xalen_ephemeris::coords::RAD_TO_DEG;\nuse xalen_ephemeris::ephem::{Almanac, Body};\nuse xalen_ephemeris::time::{calendar_to_jd, CalendarSystem, JulianDay};\nuse xalen_ephemeris::vedic::nakshatra::Nakshatra;\nuse xalen_ephemeris::vedic::rashi::Rashi;\n\nfn main() {\n    \u002F\u002F 15 August 1947, 00:00 IST (UTC+5:30) -- Indian Independence\n    let jd = calendar_to_jd(1947, 8, 15, 0.0 - 5.5, CalendarSystem::default());\n\n    let almanac = Almanac::default_vedic();\n    let aya_deg = Ayanamsa::Lahiri.compute_deg(jd.as_f64());\n\n    for &body in &[Body::Sun, Body::Moon] {\n        let pos = almanac.geocentric_ecliptic(body, jd).unwrap();\n        let sid = (pos.longitude * RAD_TO_DEG - aya_deg).rem_euclid(360.0);\n\n        let rashi = Rashi::from_longitude_deg(sid);\n        let nak = Nakshatra::from_longitude_deg(sid);\n        let pada = Nakshatra::pada(sid);\n\n        println!(\"{body}: {sid:.2} deg -- {rashi}, {nak} (pada {pada})\");\n    }\n}\n```\n\n### Western chart: aspects and dignities\n\n```rust\nuse xalen_ephemeris::western::aspects::{find_all_aspects, AspectType};\nuse xalen_ephemeris::western::dignity::essential_dignity_score;\n```\n\n### More examples\n\n```bash\ncargo run --example basic_chart      # Sun\u002FMoon + nakshatra + rashi\ncargo run --example vedic_chart      # Full Vedic chart with dasha, shadbala, panchang\ncargo run --example western_chart    # Aspects, dignities, Arabic Lots\ncargo run --example chinese_bazi     # BaZi Four Pillars with Wu Xing\n```\n\n---\n\n## Accuracy\n\n| Theory | Bodies | Accuracy | Data Files Needed? |\n|--------|--------|----------|--------------------|\n| VSOP87A + IAU 2000B nutation | Sun | **0.21\"** (vs JPL DE440) | No (analytical) |\n| VSOP87A + IAU 2000B nutation | Mercury -- Saturn | **0.21--0.76\"** (vs JPL DE440, 20k charts) | No (analytical) |\n| VSOP87A + IAU 2000B nutation | Uranus \u002F Neptune | 1.78\" \u002F 2.53\" (vs JPL DE440) | No (analytical) |\n| ELP2000-82 (Chapront-Touzé & Chapront; abridged 60+60 terms per Meeus Ch.47) + Δψ + geocentric light-time | Moon | **RMS ~2.8\" \u002F max ~12\"** (vs pyswisseph 2.10.03, AD 1600--2100; truncation-limited, not aberration) | No (analytical) |\n| Goffin (1989) DE200 fit (43 terms per Meeus Ch.37) | Pluto | arcminute-class in-window; golden test asserts ≤600″\u002F10′ vs DE440 (no tighter figure asserted) | No (valid 1885--2099; DE440 for full range) |\n| JPL DE440 | Sun + planets \u002F Pluto | sub-arcsecond apparent (raw geometry sub-mas; 2-pass body light-time) | Yes (binary `.bsp`) |\n| JPL DE440 | Moon | sub-arcsecond apparent (raw geometry sub-mas; geocentric light-time, no annual aberration) | Yes (binary `.bsp`) |\n| IAU 2006 | Precession | ~0.3 mas\u002Fcentury | No |\n| IAU 2000B | Nutation | ~1 mas | No |\n\nFor most astrological applications, the analytical theories (VSOP87A, ELP2000-82)\nprovide more than enough precision -- they require zero external data files and\nwork entirely from compiled-in polynomial series; the analytical Moon now lands\nwithin RMS ~2.8\" of Swiss Ephemeris across four centuries. Load DE440 when you\nneed JPL-grade sub-arcsecond precision on the Moon and outer bodies, full-range\nPluto, or primary directions to the minute.\n\n**Sub-arcsecond Moon with zero manual kernel handling.** Enable the optional\n`kernel-autodownload` feature and call `De440Provider::from_auto_cache()`; the\npublic NASA NAIF `de440s.bsp` kernel (~32 MB) is fetched once into the OS cache\ndirectory, verified, and reused thereafter. The feature is off by default so the\nbase crate stays offline and data-file-free:\n\n```toml\n[dependencies]\nxalen-ephem = { version = \"0.6\", features = [\"kernel-autodownload\"] }\n```\n\n```rust\nuse xalen_ephem::De440Provider;\n\u002F\u002F First call fetches + caches de440s.bsp; later calls reuse it (no network).\nlet provider = De440Provider::from_auto_cache()?;\n\u002F\u002F Apparent Moon (and all kernel bodies) now sub-arcsecond.\n```\n\nEclipse output now includes both a\nglobal-circumstances classifier (type \u002F Besselian γ \u002F greatest eclipse; the\nglobal figure is a diameter-ratio coverage proxy, not a true magnitude) and a\nBesselian local-circumstances engine that does provide a real per-observer\nmagnitude, obscuration, and C1–C4 contact times.\n\n---\n\n## Crate Map\n\n| Crate | Purpose |\n|-------|---------|\n| [`xalen-ephem`](crates\u002Fxalen-ephem) | Planetary engine: VSOP87A, ELP2000-82, DE440 reader, Pluto, Chiron, lunar nodes, asteroids, eclipses |\n| [`xalen-time`](crates\u002Fxalen-time) | Julian Day types (TT\u002FUT1\u002FTDB), delta-T models, calendar conversions |\n| [`xalen-coords`](crates\u002Fxalen-coords) | Coordinate transforms, IAU 2006 precession, IAU 2000B nutation, obliquity |\n| [`xalen-houses`](crates\u002Fxalen-houses) | 23 house systems with Ascendant, MC, Vertex, polar fallback, city geocoding |\n| [`xalen-ayanamsa`](crates\u002Fxalen-ayanamsa) | 50 ayanamsa systems for tropical-to-sidereal conversion |\n| [`xalen-stars`](crates\u002Fxalen-stars) | 8,870 compiled-in Hipparcos stars (Vmag ≤ 6.5) + 108-star curated core + runtime CSV loader for the full 118,218-star catalog, proper motion, conjunction search (the 506-star astrology catalog lives in `xalen-western`) |\n| [`xalen-vedic`](crates\u002Fxalen-vedic) | Vedic astrology: dasha, shadbala, KP, Jaimini, Tajaka, ashtakavarga, panchang, compatibility, yoga, dosha, upagraha, transit |\n| [`xalen-western`](crates\u002Fxalen-western) | Western astrology: aspects, dignities, Arabic Lots, Hellenistic, Uranian, Cosmobiology, returns, progressions, harmonics, horary |\n| [`xalen-chinese`](crates\u002Fxalen-chinese) | BaZi, Zi Wei Dou Shu, Feng Shui (Flying Stars, Ba Zhai); Qi Men Dun Jia (experimental — authoritative reference data + a simplified chart assembly, not an authoritative reading) |\n| [`xalen-lalkitab`](crates\u002Fxalen-lalkitab) | Lal Kitab: planet-house effects, debts, dormancy, remedies |\n| [`xalen-iching`](crates\u002Fxalen-iching) | I Ching: 64 hexagrams, 8 trigrams, all 384 Legge line texts, date casting |\n| [`xalen-numerology`](crates\u002Fxalen-numerology) | Pythagorean and Chaldean numerology |\n| [`xalen-world`](crates\u002Fxalen-world) | Mayan, Aztec, Tibetan, Persian, Egyptian, Celtic, Korean Saju, Nine Star Ki; Burmese Mahabote (day-sign \u002F ruling-planet profile only — not the full 7-house square) |\n| [`xalen-chart`](crates\u002Fxalen-chart) | SVG chart rendering: North Indian, South Indian, Western wheel |\n| [`xalen-ffi`](crates\u002Fxalen-ffi) | C FFI exports (`extern \"C\"` with `repr(C)` structs) |\n| [`xalen-wasm`](crates\u002Fxalen-wasm) | WASM bindings via wasm-bindgen |\n| [`xalen-python`](crates\u002Fxalen-python) | Python bindings via PyO3 |\n| [`xalen-node`](crates\u002Fxalen-node) | Node.js bindings via napi-rs |\n\n## Language Bindings\n\n| Language | Crate | Mechanism | Status |\n|----------|-------|-----------|--------|\n| **Rust** | `xalen-ephemeris` (umbrella) | Native (crates.io: 0.3.1 line published; 0.4.x+ not yet) | Published (0.3.1) |\n| **C \u002F C++** | `xalen-ffi` | `extern \"C\"` + `repr(C)` structs | Source-stable; not yet on crates.io past 0.3.1 |\n| **Python** | `xalen-python` | PyO3 — build with `maturin develop` | Alpha; **not yet on PyPI** (`pip install xalen` is forthcoming) |\n| **Node.js** | `xalen-node` | napi-rs native addon — build with `napi build` | Alpha; **not yet on npm** (`npm install xalen` is forthcoming) |\n| **Browser \u002F WASM** | `xalen-wasm` | wasm-bindgen, build with `wasm-pack build` | Alpha; build from source |\n\n> The `pip install xalen` \u002F `npm install xalen` commands in the migration guides\n> describe the *intended* published interface and are **not live yet**. There is\n> an unrelated `xalen` package on PyPI (a separate XALEN SDK) — it is **not** these\n> ephemeris bindings. Until the bindings are published, build them from this\n> repository with the commands above.\n\nCore computation crates compile to `wasm32-unknown-unknown` without modification.\n\nAll four bindings expose the full `(lon, lat, dist, lon_speed, lat_speed,\ndist_speed)` 6-tuple plus a retrograde flag, matching what\n`swe.calc_ut(..., FLG_SPEED)` returns. The Python binding additionally ships an\n`xalen.swe` submodule (`import xalen.swe as swe`) intended as a near-drop-in\nsubstitute for `import swisseph as swe` for the common `calc_ut` \u002F `fixstar2`\ncalls — a search-and-replace migration path, not a 1:1 reimplementation of every\npyswisseph entry point.\n\n---\n\n## Architecture\n\n- **Pure Rust** -- no C FFI dependencies in any core crate\n- **No `unsafe` in core crates** -- only `xalen-ffi` uses `unsafe` (required for `extern \"C\"`)\n- **Zero global state** -- all computation through owned or `Arc\u003CT>` references\n- **Thread-safe** -- `Almanac` and all position types are `Send + Sync`\n- **WASM-compatible** -- core crates target `wasm32-unknown-unknown`\n- **Provider-layered** -- stack DE440 on top of VSOP87 with automatic body\u002Fepoch fallback\n- **Serde-ready** -- all data types derive `Serialize` \u002F `Deserialize`\n\n---\n\n## Building\n\n```bash\n# Build the full workspace\ncargo build --release\n\n# Run all tests. `cargo test --workspace` reports 2,199 passing across the\n# library and integration suites, 0 failures. Plain `cargo test` runs the\n# workspace default-members (which exclude the PyO3 extension-module crate\n# xalen-python, tested separately via maturin — see below).\ncargo test\n# The Python bindings are tested via maturin:  cd crates\u002Fxalen-python && maturin develop && pytest\n\n# Build WASM\ncd crates\u002Fxalen-wasm && wasm-pack build --target web\n\n# Run benchmarks\ncargo bench\n```\n\n## Project Stats\n\n- over 70,000 lines of Rust\n- 18 crates (14 core + 4 binding\u002Frendering crates)\n- 2,199 tests passing (`cargo test --workspace`, library + integration suites), 0 failures\n- 150+ source files\n- Zero `unsafe` in core crates\n\n---\n\n## License\n\nLicensed under the [Apache License, Version 2.0](LICENSE).\n\n```\nCopyright 2024-2026 XALEN Technology Pvt Ltd.\n```\n\nFor commercial licensing inquiries, contact [hello@xalen.io](mailto:hello@xalen.io).\n\n---\n\n## Enterprise\n\nXALEN Ephemeris is free and open source (Apache-2.0) — and always will be. For\nproduction use that needs an **SLA, IP indemnification, a managed\u002Fhosted API,\ncertified-accuracy reports, white-label, or on-premise support**, see\n**[ENTERPRISE.md](ENTERPRISE.md)** or reach us at **hello@xalen.io**. The\nopen-source core stays Apache-2.0; Enterprise only adds services and optional\nproprietary modules on top.\n\n---\n\n## Contributing\n\nContributions are welcome. Please open an issue before starting work on\nsignificant changes.\n\n**Before submitting a pull request:**\n\n1. Run `cargo test` and `cargo clippy --workspace --exclude xalen-python -- -D warnings` -- both must pass\n2. Add tests for new computations -- every astrological formula needs at least\n   one known-answer test case against a published reference\n3. Follow `rustfmt` defaults\n4. Cite sources in code comments: textbook name, chapter, verse\u002Fpage number.\n   Wikipedia and blog posts are not acceptable sources for astrological\n   algorithms\n\n**Areas where contributions are especially welcome:**\n\n- Expanded fixed star catalog\n- DE441 reader support\n- Additional world tradition systems\n- Documentation and examples\n- Cross-validation test vectors against Swiss Ephemeris or JPL Horizons\n","XALEN Ephemeris 是一个用纯 Rust 编写的天文历表库，专为占星学设计，支持吠陀、西方、中国等九种世界传统。该项目提供高精度的行星位置计算（如JPL DE440级别的太阳和内行星精度），核心代码不使用 `unsafe` 关键字，确保了安全性和线程安全性。它支持50种分点岁差系统、23种宫位系统以及12种以上的占星学传统，适用于需要精确天体位置数据的各种占星应用场景，包括但不限于个人命盘分析、天象预测等。此外，该库还提供了丰富的文档和支持多种编程语言的绑定，方便开发者集成到不同平台的应用中。",2,"2026-06-11 04:09:38","CREATED_QUERY"]