Stop shipping a 1990s C library to compute planets. Xalen is the pure-Rust, Apache-2.0 replacement for Swiss Ephemeris.
If your app does astrology, you already know the dependency. Swiss Ephemeris: a C library from the 1990s, a folder of binary .se1 data files you have to ship and locate at runtime, and a license that is either AGPL or you pay for a commercial seat. For 30 years it was the only serious option, so everyone just swallowed the cost.
That era is over. Xalen Ephemeris is a full planetary engine written in pure Rust, with no unsafe in the core engine (the only unsafe lives in the optional FFI, Node and WASM binding crates), released under Apache-2.0. No C toolchain. No data files to ship. No copyleft clause waiting for the day you try to make money. It is built to replace Swiss Ephemeris in production, not to admire it from a distance.
Python is live on PyPI and the Rust crates are live on crates.io:
# Python
pip install xalen
# Rust
cargo add xalen-ephem xalen-time xalen-ayanamsa xalen-vedic
Node and WASM build straight from the repo. Repo: https://github.com/vedika-io/xalen-ephemeris
Switching takes one line
Xalen ships a pyswisseph-shaped API on purpose. Migrating an existing codebase is a find-and-replace:
# before
import swisseph as swe
# after
import xalen.swe as swe
jd = swe.julday(1990, 6, 15, 10.5)
xx, ok = swe.calc_ut(jd, swe.SUN, swe.FLG_SWIEPH | swe.FLG_SPEED)
# same argument order, same SE_/SEFLG_/SIDM_ constants, same tuple layout
Your function calls do not change. Your data-file directory disappears. Your license problem disappears.
Xalen vs Swiss Ephemeris
Line them up and the gap is hard to miss. Swiss Ephemeris is C from the 1990s, shipped as a native library you compile and link, fed by .se1 data files you have to bundle and locate at runtime, under AGPL or a paid commercial license. Xalen is pure Rust with no unsafe in the core engine, thread-safe, with no native dependency and no data files for the analytical engine (the DE440 kernel is optional), under permissive Apache-2.0. Swiss reaches other languages through third-party wrappers; Xalen targets Rust, Python, C and C++, Node and WASM from one core. On accuracy both track JPL DE, and Xalen matches DE440 to sub-arcsecond on the inner planets with the kernel available for full precision. Swiss gives you positions, houses and ayanamsa and stops there; Xalen ships the entire astrology layer on top, renders charts to SVG, geocodes 130+ cities and localizes into 19 languages. And switching is one line: import xalen.swe as swe.
The part nobody else ships
This is where the comparison stops being close. A raw ephemeris, JPL's or Swiss's, hands you coordinates. Then you spend the next two years building the astrology yourself. Xalen ships that layer, for the whole world, in the box:
India / Vedic (Jyotish). Vimshottari and other dashas, 16 divisional charts (vargas), full panchang with tithi, nakshatra, yoga and karana transition times, shadbala, KP, Jaimini, Tajaka annual charts, yogas, doshas, and compatibility. Plus Lal Kitab remedial astrology.
Western. Aspects, essential and accidental dignities, 97 Arabic Lots, Hellenistic and Uranian techniques, Cosmobiology, secondary progressions, exact solar and lunar returns by iterative refinement, declination aspects and antiscia, harmonics, and horary.
China. BaZi Four Pillars, Zi Wei Dou Shu, Feng Shui Flying Stars, and Qi Men Dun Jia (experimental).
The rest of the world. Korean Saju, Japanese Nine Star Ki, Burmese Mahabote, Mayan and Aztec calendars, Tibetan, Persian/Zoroastrian, Egyptian, and Celtic systems. I Ching with all 64 hexagrams and the full 384 line texts. Pythagorean and Chaldean numerology (Life Path, Expression, Soul Urge).
And the astronomy a serious engine needs. 50 ayanamsa systems and 23 house systems. A rigorous solar and lunar eclipse engine with Besselian elements and per-observer local circumstances, validated against NASA for 2017 and 2024. 506 built-in fixed stars plus 8,870 compiled-in Hipparcos stars and the full 118,218-star catalog loadable at runtime. Black Moon Lilith (mean and true), Chiron, nodes, and 15 asteroids and TNOs. Velocity and retrograde flags, topocentric positions, and RA/Dec, heliocentric and rectangular output. Real time systems: UT1/TT/TDB, the full leap-second table, and a Stephenson-Morrison-Hohenkerk delta-T spline. SVG chart rendering (North Indian, South Indian, Western wheel) with zero dependencies, 130+ city geocoding, and names in 19 languages.
Swiss Ephemeris gives you the math and stops. JPL gives you the coordinates and stops. Xalen gives you all of it, from one Apache-2.0 engine, with Rust, Python, Node, WASM and C bindings. A few of these are flagged experimental in the docs, and they are labelled honestly rather than hidden.
The accuracy is not a vibe, it is a number
Most libraries ask you to trust them. Xalen hands you the receipts, in two layers. The first is a reproducible 5,000,000-chart consistency sweep: random (date, lat, lon) charts spanning the years 1500 to 2400, every one diffed against a Swiss Ephemeris (pyswisseph) oracle for every body, the house cusps, and four ayanamsas. The harness is in the repo and it is deterministic, so you can reproduce the entire run yourself:
python3 validation/oracle_pyswisseph.py --n 5000000 --seed 42 \
| cargo run -p xalen-validation --release -- -
One honest note on that sweep: the oracle is pyswisseph, and without Swiss or JPL data files (.se1 / .bsp) it falls back to the analytic Moshier theory, so by default it measures analytic-against-analytic agreement. The harness prints exactly which backend it used; point it at the data files for a true Swiss-backed comparison.
The headline accuracy comes from the second layer: a committed cross-validation against JPL Horizons vectors, run with cargo test. Against DE440, the Sun lands at 0.21 arcsec and Mercury through Saturn stay under 0.76 arcsec. Uranus and Neptune sit at 1.8 to 2.5 arcsec. The analytical Moon holds an RMS near 2.8 arcsec, and loading the optional DE440 kernel takes the Sun, planets and Moon sub-arcsecond with full-range Pluto. Every figure is per-body and reproducible. The full breakdown is in docs/ACCURACY.md.
This is the point worth sitting with: a pure-Rust engine with zero data files matches the gold-standard NASA DE440 ephemeris to a fraction of an arcsecond on the inner planets, and backs it with a reproducible five-million-chart consistency sweep on top. You do not have to choose between "clean dependency" and "correct."
A clean-room engine, not a wrapper
Xalen is an independent, clean-room implementation, not affiliated with Astrodienst. It is built directly from the published theories the whole field relies on: VSOP87, ELP-2000/82, IAU 2006 precession with 2000B nutation, and the Stephenson, Morrison and Hohenkerk delta-T model, with JPL DE440 as an optional high-precision kernel. It is cross-checked against Swiss Ephemeris because that is the honest way to prove a replacement, not because a single line of it is borrowed.
Where it stands today
This is a launch, and the engine is ready for real work.
If you have ever fought the Swiss Ephemeris C build, hunted for a missing .se1 file in production, or had a licensing conversation you did not enjoy, Xalen is the exit. Star it, fork it, and put it head to head with whatever you trust:
https://github.com/vedika-io/xalen-ephemeris
Try to break it. Open an issue with a chart Xalen gets wrong against your reference. Out of five million, the next interesting failure is the one you find.
Xalen is a computation engine. Any astrological interpretation built on top of it is for informational and cultural purposes, not professional advice.