PHPackages                             divinea-labs/laravel-swisseph - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. divinea-labs/laravel-swisseph

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

divinea-labs/laravel-swisseph
=============================

A Laravel wrapper for the Swiss Ephemeris library, providing accurate astronomical and astrological calculations.

v0.3.1(2w ago)0453[1 PRs](https://github.com/divinea-labs/laravel-swisseph/pulls)MITPHPPHP ^8.3 || ^8.4CI passing

Since Dec 23Pushed 1w agoCompare

[ Source](https://github.com/divinea-labs/laravel-swisseph)[ Packagist](https://packagist.org/packages/divinea-labs/laravel-swisseph)[ Docs](https://github.com/divinea-labs/laravel-swisseph)[ GitHub Sponsors](https://github.com/divinealabs)[ RSS](/packages/divinea-labs-laravel-swisseph/feed)WikiDiscussions main Synced today

READMEChangelog (7)Dependencies (42)Versions (12)Used By (0)

Laravel Swisseph
================

[](#laravel-swisseph)

[![Latest Version on Packagist](https://camo.githubusercontent.com/94fa389531b13dc1aefa9128e29b634e709a3ad327576489f6a219ef1cf6df02/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f646976696e65612d6c6162732f6c61726176656c2d73776973736570682e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/divinea-labs/laravel-swisseph)[![GitHub Tests Action Status](https://camo.githubusercontent.com/975c9f0c8cf6cd5a0afe5dc7749f84b6d7b82648824058bbf5d7227825e7e143/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f646976696e65612d6c6162732f6c61726176656c2d73776973736570682f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/divinea-labs/laravel-swisseph/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/97e6cd19c596b55a3dd359163239e1c24709b9d3f38ed39d6a3247d2d3594b6d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f646976696e65612d6c6162732f6c61726176656c2d73776973736570682f6669782d7068702d636f64652d7374796c652d6973737565732e796d6c3f6272616e63683d6d61696e266c6162656c3d636f64652532307374796c65267374796c653d666c61742d737175617265)](https://github.com/divinea-labs/laravel-swisseph/actions?query=workflow%3A%22Fix+PHP+code+style+issues%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/75b4a61a0b32d15e49da5e6f1d03b16c05613e6593dbc4655d21a4dd5730d083/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f646976696e65612d6c6162732f6c61726176656c2d73776973736570682e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/divinea-labs/laravel-swisseph)

A clean, explicit Laravel wrapper for the **Swiss Ephemeris (`swetest`) CLI**.

Designed for projects that require **deterministic astronomical calculations**, **full control over ephemeris configuration**, and **structured, stable data output**.

It focuses on:

- explicit configuration (no hidden magic)
- deterministic CLI generation
- stable DTO contracts
- strong typing via enums

Why this package exists
-----------------------

[](#why-this-package-exists)

Swiss Ephemeris is one of the most precise astronomical calculation engines available, but its CLI interface (`swetest`) is difficult to integrate cleanly into modern Laravel applications.

This package exists to:

- provide a **fluent, explicit API** for building `swetest` commands
- eliminate stringly-typed CLI calls
- expose **stable DTO contracts** instead of raw text output
- keep all calculations **local, private, and reproducible**

Requirements &amp; Compatibility
--------------------------------

[](#requirements--compatibility)

- PHP **8.3** or **8.4**
- Laravel **12.x** or **13.x**
- Swiss Ephemeris (`swetest`) installed locally

This package is tested against the officially supported Laravel versions using Orchestra Testbench and GitHub Actions.

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require divinea-labs/laravel-swisseph
```

You can publish the config file with:

```
php artisan vendor:publish --tag="laravel-swisseph-config"
```

This is the contents of the published config file:

```
return [
    /*
   |--------------------------------------------------------------------------
   | Path to swetest executable
   |--------------------------------------------------------------------------
   */
    'executable' => env('SWISSEPH_EXECUTABLE', base_path('swisseph/swetests')),

    /*
    |--------------------------------------------------------------------------
    | Path to ephemeris directory
    |--------------------------------------------------------------------------
    */
    'ephemeris_dir' => env('SWISSEPH_EPHEMERIS_DIR', base_path('swisseph/ephe')),

    /*
    |--------------------------------------------------------------------------
    | Ephemeris computation options
    |
    | ALL VALUES COME FROM .env AND ARE MAPPED SAFELY TO ENUMS
    |
    | .env example:
    |   SWISSEPH_EPHEMERIS_TYPE=eswe
    |   SWISSEPH_TRUE_POSITIONS=true
    |   SWISSEPH_NO_NUTATION=nonut
    |
    | All allowed values are those of EphOptions::cases()
    |--------------------------------------------------------------------------
    */
    'eph_options' => array_values(array_filter([
        EphOptions::tryFrom(env('SWISSEPH_EPHEMERIS_TYPE', EphOptions::SWISS_TYPE->value))
        ?? EphOptions::SWISS_TYPE,

        EphOptions::tryFrom(env('SWISSEPH_TRUE_POSITIONS', EphOptions::TRUE_POSITIONS->value))
        ?? EphOptions::TRUE_POSITIONS,

        EphOptions::tryFrom(env('SWISSEPH_NO_NUTATION', EphOptions::NO_NUTATION->value))
        ?? EphOptions::NO_NUTATION,
    ])),

    /*
    |--------------------------------------------------------------------------
    | Default house system
    |
    | Example in .env:
    |   SWISSEPH_HOUSESYSTEM=P
    |--------------------------------------------------------------------------
    */
    'default_house_system' => HouseSystems::tryFrom(env('SWISSEPH_HOUSESYSTEM', 'P'))
        ?? HouseSystems::PLACIDUS,

    /*
     * |--------------------------------------------------------------------------
     * | Timeout for swetest execution (in seconds)
     * |--------------------------------------------------------------------------
     */
    'timeout' => env('SWISSEPH_TIMEOUT', 10),
];
```

Pipelines
---------

[](#pipelines)

The package exposes seven calculation pipelines, each accessed via a dedicated sub-builder factory method:

MethodBuilderPurpose`Swisseph::positions()``PositionsBuilder`Planetary positions, houses, properties, fixed stars, asteroids, planetary moons, computed values, batch &amp; relative ephemeris`Swisseph::risings()``RisingsBuilder`Rise/set events for any body`Swisseph::eclipses()``EclipsesBuilder`Solar &amp; lunar eclipses, global or local, with contacts, magnitudes and Saros data`Swisseph::occultations()``OccultationsBuilder`Planetary &amp; stellar occultations by the Moon, global or local`Swisseph::meridianTransits()``MeridianTransitBuilder`Upper/lower meridian transits for any body`Swisseph::orbitalElements()``OrbitalElementsBuilder`Osculating orbital elements for any body`Swisseph::heliacal()``HeliacalBuilder`Heliacal risings/settings and first/last visibilityEvery factory call returns a **fresh, isolated builder** — no shared mutable state between calls.

---

Usage
-----

[](#usage)

Laravel Swisseph is designed around **explicit, deterministic defaults** with **optional overrides**.

---

### Planetary positions

[](#planetary-positions)

```
use DivineaLabs\Swisseph\Facades\Swisseph;
use DivineaLabs\Swisseph\Enums\HouseSystems;

// Zero-configuration: current time, default bodies
$result = Swisseph::positions()->get();

// With location and houses
$result = Swisseph::positions()
    ->setLocation(17.038538, 51.107883, 'Wroclaw')
    ->withHouses(HouseSystems::PLACIDUS)
    ->get();

// With explicit date/time and body selection
use DivineaLabs\Swisseph\Enums\PlanetBodySelection;

$result = Swisseph::positions()
    ->setDateTime('2025-03-23 21:21:00', 'Europe/Warsaw')
    ->setLocation(17.038538, 51.107883, 'Wroclaw')
    ->selectBodies(PlanetBodySelection::SUN)
    ->withHouses(HouseSystems::KOCH)
    ->get();
```

> `setLocation()` expects coordinates in the order: **longitude, latitude**.

Available `positions()` builder options:

- `setDateTime(...)`
- `setLocation(...)`
- `setPlace(...)`
- `withEphOptions(...)`
- `selectBodies(...)`
- `withProperties(...)`
- `withHouses(...)`
- `setObserverPosition(...)`
- `withSidereal(...)`
- `withCustomSidereal(...)`

---

### Fixed stars, asteroids, planetary moons &amp; computed values

[](#fixed-stars-asteroids-planetary-moons--computed-values)

Beyond the default planets, `positions()` can target catalog bodies and output-only computed values. Each selector replaces the default body set:

```
use DivineaLabs\Swisseph\Enums\Asteroid;
use DivineaLabs\Swisseph\Enums\ComputedValue;
use DivineaLabs\Swisseph\Enums\FixedStar;
use DivineaLabs\Swisseph\Enums\Sidereal;
use DivineaLabs\Swisseph\Facades\Swisseph;

// Fixed star by catalog name (FixedStar enum, or any raw name from sefstars.txt)
$frame = Swisseph::positions()->selectFixedStar(FixedStar::SIRIUS)->get();
$frame = Swisseph::positions()->selectFixedStar('Capella')->get(); // raw name still works

// Asteroid by MPC number (Asteroid enum, or any raw number from seasnam.txt)
$frame = Swisseph::positions()->selectAsteroid(Asteroid::EROS)->get(); // 433
$frame = Swisseph::positions()->selectAsteroid(1862)->get();          // raw number (Apollo)

// Planetary moon by swetest moon number
$frame = Swisseph::positions()->selectMoon(1)->get();

// Computed values (variadic) — sidereal time, ΔT, obliquity, ayanamsha, …
$frame = Swisseph::positions()
    ->selectComputedValue(
        ComputedValue::SIDEREAL_TIME,
        ComputedValue::DELTA_T,
        ComputedValue::AYANAMSHA,
    )
    ->withSidereal(Sidereal::LAHIRI) // required for AYANAMSHA
    ->get();
```

For catalog and computed bodies the parsed row's `index` is `null` and its `name` carries the catalog/computed label. Invalid targets (empty star name, non-positive MPC/moon number, empty computed-value list) throw `InvalidPlanetBodySelectionException`.

---

### Batch ephemeris — N frames in a single process

[](#batch-ephemeris--n-frames-in-a-single-process)

`steps()` turns a single `positions()` query into a **time series**: swetest emits *N* time-stepped frames from **one** process instead of one spawn per moment. Fetch the result with `getSeries()`, which returns an `AstroTimeSeries`.

```
use DivineaLabs\Swisseph\Facades\Swisseph;

$series = Swisseph::positions()
    ->setDateTime('2026-01-01 12:00:00', 'UTC')
    ->steps(5, '1') // 5 frames, 1-day step
    ->getSeries();

$series->count();              // 5
$series->first();              // first AstroTimeFrame
$series->last();               // last AstroTimeFrame
$series->at('02.01.2026 12:00:00'); // lookup by timestamp token

foreach ($series->frames as $frame) {
    $frame->date;              // Carbon timestamp for this frame
    $frame->planet_bodies;     // positions/properties for this frame
}
```

Each row is automatically prefixed with a timestamp column so frames can be grouped deterministically. Step-size tokens are passed to swetest verbatim: bare digits = days, `m` = minutes, `mo` = months, `y` = years, `s` = seconds. A step count below `1` throws `InvalidStepCountException`.

---

### Relative ephemeris — differential &amp; midpoint

[](#relative-ephemeris--differential--midpoint)

`differentialTo()` prints the difference between each selected body and a reference; `midpointTo()` prints their midpoint. The reference is a `PlanetBodySelection` (swetest selection code), and the two are mutually exclusive (last call wins).

```
use DivineaLabs\Swisseph\Enums\PlanetBodySelection;
use DivineaLabs\Swisseph\Facades\Swisseph;

// Mercury relative to the Sun → row name "Mer-Sun"
$frame = Swisseph::positions()
    ->selectBodies(PlanetBodySelection::MERCURY)
    ->differentialTo(PlanetBodySelection::SUN)
    ->get();

// Saturn/Chiron midpoint → row name "Sat/Chi"
$frame = Swisseph::positions()
    ->selectBodies(PlanetBodySelection::SATURN)
    ->midpointTo(PlanetBodySelection::CHIRON)
    ->get();
```

---

### Inspecting the generated CLI command

[](#inspecting-the-generated-cli-command)

```
$command = Swisseph::positions()->getCliCommand();
```

---

Rise / Set events
-----------------

[](#rise--set-events)

Laravel Swisseph can compute **rise and set times** for celestial bodies using the Swiss Ephemeris `-rise` pipeline via `Swisseph::risings()`.

Results are returned as structured DTOs with deterministic timezone behavior.

### Sunrise / sunset (UTC day — Mode A)

[](#sunrise--sunset-utc-day--mode-a)

Mode A treats the date as a **UTC calendar day**.

```
use DivineaLabs\Swisseph\Facades\Swisseph;

$r = Swisseph::risings()
    ->setDateTime('2026-02-14')
    ->setLocation(17.038538, 51.107883)
    ->getSunEvents();

$r->rise()->utcAt;
$r->set()->utcAt;
$r->dayLength();
```

Example:

```
rise: 2026-02-14T06:10:32.900Z
set:  2026-02-14T16:02:08.300Z

```

In Mode A:

- timestamps are UTC
- `localAt` and `localDate` are null
- filtering is done by UTC day

---

### Local calendar day (timezone — Mode B)

[](#local-calendar-day-timezone--mode-b)

Mode B filters events by **local calendar day**.

```
$r = Swisseph::risings()
    ->setDateTime('2026-02-14', 'Europe/Warsaw')
    ->setLocation(17.038538, 51.107883)
    ->getSunEvents();

$r->rise()->localAt;
$r->set()->localAt;
```

Example:

```
rise: 2026-02-14T07:10:32.900+01:00
set:  2026-02-14T17:02:08.300+01:00

```

In Mode B:

- UTC timestamps are preserved internally
- `localAt` contains projected local time
- filtering is done by local calendar day

---

### Any celestial body

[](#any-celestial-body)

```
use DivineaLabs\Swisseph\Enums\PlanetBody;

$r = Swisseph::risings()
    ->setDateTime('2026-02-14')
    ->setLocation(17.038538, 51.107883)
    ->getRiseSetEvents(PlanetBody::SATURN);
```

---

### Multiple bodies (batch orchestration)

[](#multiple-bodies-batch-orchestration)

Swiss Ephemeris supports only **one body per CLI run**.
The wrapper orchestrates multiple runs automatically.

```
use DivineaLabs\Swisseph\Enums\PlanetBody;

$batch = Swisseph::risings()
    ->setDateTime('2026-02-14')
    ->setLocation(17.038538, 51.107883)
    ->getRiseSetEventsForBodies([
        PlanetBody::SUN,
        PlanetBody::MOON,
        PlanetBody::SATURN,
    ]);

$batch->forBody(PlanetBody::SUN)->rise();
$batch->forBody(PlanetBody::MOON)->rise();
$batch->forBody(PlanetBody::SATURN)->rise();
```

---

### Optional configuration

[](#optional-configuration)

```
use DivineaLabs\Swisseph\Enums\DiscMode;

$r = Swisseph::risings()
    ->setDateTime('2026-02-14', 'Europe/Warsaw')
    ->setLocation(17.038538, 51.107883)
    ->setDiscMode(DiscMode::BOTTOM)
    ->withoutRefraction()
    ->anchorToLocalMidnight()
    ->searchBackward()
    ->getSunEvents();
```

Available options include:

- disc mode (`BOTTOM`, `CENTER`, `HINDU`)
- atmospheric refraction toggle
- backward search
- atmospheric model
- observer model
- optical model

All options are explicit and deterministic.

---

Eclipses
--------

[](#eclipses)

Compute **solar and lunar eclipses** via `Swisseph::eclipses()`. Choose the kind (`solar()` / `lunar()`) and scope (`global()` default, or `local(lon, lat, elev)`), then read structured DTOs with contact times, magnitudes and Saros data.

```
use DivineaLabs\Swisseph\Facades\Swisseph;

// Next two global solar eclipses
$collection = Swisseph::eclipses()
    ->solar()
    ->from('2026-01-01')
    ->count(2)
    ->get();

foreach ($collection->all() as $eclipse) {
    $eclipse->type;                 // EclipseType (TOTAL, ANNULAR, PARTIAL, …)
    $eclipse->maxAt;                // Carbon — moment of maximum (UTC)
    $eclipse->magnitudes->primary;  // eclipse magnitude
    $eclipse->saros->series;        // Saros series number
    $eclipse->contacts->partialStart; // ?Carbon contact time
}

// Local total lunar eclipse for an observer
$local = Swisseph::eclipses()
    ->lunar()
    ->local(17.038538, 51.107883)
    ->onlyTotal()
    ->get();
```

Filters (`onlyTotal()`, `onlyPartial()`, `onlyAnnular()`, `onlyPenumbral()`, `onlyCentral()`, …), `from()`, `count()` and `backward()` mirror the swetest `-eclipse` options. Calling `get()` without `solar()`/`lunar()` throws `EclipseKindNotSetException`; `lunar()->local()` is unsupported and throws `InvalidEclipseFilterException`.

---

Occultations
------------

[](#occultations)

Compute **occultations of planets and fixed stars by the Moon** via `Swisseph::occultations()`. Pick a target with `forBody()` or `forStar()`, optionally restrict to a local observer.

```
use DivineaLabs\Swisseph\Enums\PlanetBody;
use DivineaLabs\Swisseph\Facades\Swisseph;

// Global occultations of Jupiter
$collection = Swisseph::occultations()
    ->forBody(PlanetBody::JUPITER)
    ->from('2026-01-01')
    ->count(5)
    ->get();

foreach ($collection->all() as $event) {
    $event->type;                    // OccultationType (TOTAL, ANNULAR, PARTIAL)
    $event->maxAt;                   // Carbon — peak (UTC)
    $event->magnitude;               // float
    $event->contacts->exteriorStart; // ?Carbon
}

// Local occultation of a fixed star
$local = Swisseph::occultations()
    ->forStar('Aldebaran')
    ->local(17.038538, 51.107883)
    ->get();
```

Calling `get()` without a target throws `OccultationTargetNotSetException`.

---

Meridian transits
-----------------

[](#meridian-transits)

Compute **upper and lower meridian transits** for any body via `Swisseph::meridianTransits()`. A geographic position is required.

```
use DivineaLabs\Swisseph\Enums\PlanetBody;
use DivineaLabs\Swisseph\Facades\Swisseph;

$transits = Swisseph::meridianTransits()
    ->forBody(PlanetBody::VENUS)
    ->at(17.038538, 51.107883)
    ->from('2026-01-01')
    ->count(2)
    ->get();

foreach ($transits->all() as $transit) {
    $transit->date;            // 'Y-m-d' (UTC) of the upper transit
    $transit->upperTransitAt;  // Carbon
    $transit->lowerTransitAt;  // Carbon
}
```

Calling `get()` without `at()` throws `MeridianGeoPositionNotSetException`.

---

Orbital elements
----------------

[](#orbital-elements)

Compute **osculating orbital elements** for any body via `Swisseph::orbitalElements()`. Returns a single DTO.

```
use DivineaLabs\Swisseph\Enums\PlanetBody;
use DivineaLabs\Swisseph\Facades\Swisseph;

$elements = Swisseph::orbitalElements()
    ->forBody(PlanetBody::MARS)
    ->from('2026-01-01')
    ->get();

$elements->semiAxis;             // semi-major axis
$elements->eccentricity;         // eccentricity
$elements->inclination;          // inclination (J2000)
$elements->siderealPeriodYears;  // sidereal period
```

Calling `get()` without `forBody()` throws `OrbitalElementsBodyNotSetException`.

---

Heliacal events
---------------

[](#heliacal-events)

Compute **heliacal risings/settings and first/last visibility** via `Swisseph::heliacal()`. Target a planet (`forBody()`) or fixed star (`forStar()`); a geographic position is required. Atmospheric, observer and optical models are optional overrides.

```
use DivineaLabs\Swisseph\Enums\FixedStar;
use DivineaLabs\Swisseph\Enums\HeliacalEventType;
use DivineaLabs\Swisseph\Enums\PlanetBody;
use DivineaLabs\Swisseph\Facades\Swisseph;

$events = Swisseph::heliacal()
    ->forBody(PlanetBody::VENUS)
    ->at(17.038538, 51.107883)
    ->from('2026-01-01')
    ->get();

foreach ($events->all() as $event) {
    $event->type;             // HeliacalEventType
    $event->at;               // Carbon — event time (UT)
    $event->optimumAt;        // Carbon — optimum visibility
    $event->durationMinutes;  // float
}

// Filter by event type, with custom models
$risings = Swisseph::heliacal()
    ->forStar(FixedStar::SIRIUS)
    ->at(17.038538, 51.107883)
    ->withAtmosphere(1013.25, 15.0, 40.0, 0.0)
    ->withObserver(45.0, 1.2)
    ->get()
    ->ofType(HeliacalEventType::HELIACAL_RISING);
```

Calling `get()` without `at()` throws `HeliacalGeoPositionNotSetException`.

---

### Summary

[](#summary)

- Each pipeline is accessed via its own sub-builder (`positions()`, `risings()`, `eclipses()`, `occultations()`, `meridianTransits()`, `orbitalElements()`, `heliacal()`)
- Each call returns a **fresh, isolated builder** — no shared mutable state
- Date/time defaults to the current moment (UTC)
- Observer location only matters when houses are enabled (positions pipeline)
- All configuration methods are optional overrides
- Defaults are explicit, deterministic, and transparent

Documentation
-------------

[](#documentation)

- [Basic example (CLI + raw output + parsed DTO)](docs/swisseph-cli/example-default.md)
- [DTO contract](docs/dto.md)
- [Enums reference](docs/enums.md)
- [AstroProperties contract](docs/astro-properties.contract.md)
- [Environment variables](docs/env.md)

Testing
-------

[](#testing)

```
composer test
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

Please review [our security policy](../../security/policy) on how to report security vulnerabilities.

About Divinea Labs
------------------

[](#about-divinea-labs)

This package is developed by **Divinea Labs**.

Divinea builds applications and technologies that support human development, with a strong emphasis on personal freedom, privacy, and conscious interaction with natural cycles.

Laravel Swisseph is part of a broader ecosystem of tools designed to remain local, transparent, and under the user's control.

Credits
-------

[](#credits)

- **Divinea Labs** – project vision, architecture and long-term maintenance
- skyel – original author and core implementation
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

45

—

FairBetter than 91% of packages

Maintenance97

Actively maintained with recent releases

Popularity16

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity49

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 66.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~28 days

Recently: every ~42 days

Total

7

Last Release

20d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/4d53b46aa693910cc497ff64d7b2cb7f23eaa9f7555271de355fe80de0613b7c?d=identicon)[skyel](/maintainers/skyel)

---

Top Contributors

[![skyel1337](https://avatars.githubusercontent.com/u/125035439?v=4)](https://github.com/skyel1337 "skyel1337 (10 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (4 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (1 commits)")

---

Tags

laraveldivinealabslaravel-swisseph

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/divinea-labs-laravel-swisseph/health.svg)

```
[![Health](https://phpackages.com/badges/divinea-labs-laravel-swisseph/health.svg)](https://phpackages.com/packages/divinea-labs-laravel-swisseph)
```

###  Alternatives

[spatie/laravel-pdf

Create PDFs in Laravel apps

1.0k4.8M47](/packages/spatie-laravel-pdf)[codewithdennis/filament-select-tree

The multi-level select field enables you to make single selections from a predefined list of options that are organized into multiple levels or depths.

329530.5k29](/packages/codewithdennis-filament-select-tree)[tarfin-labs/event-machine

Event-driven state machines for Laravel with event sourcing, type-safe context, and full audit trail.

199.4k](/packages/tarfin-labs-event-machine)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3914.6k](/packages/rawilk-profile-filament-plugin)[wulfheart/laravel-actions-ide-helper

Generate a new IDE Helper file for Laravel Actions.

21552.3k8](/packages/wulfheart-laravel-actions-ide-helper)[danestves/laravel-polar

A package to easily integrate your Laravel application with Polar.sh

8120.4k](/packages/danestves-laravel-polar)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
