PHPackages                             slava-basko/saga-php - 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. slava-basko/saga-php

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

slava-basko/saga-php
====================

Saga — transactions for distributed system

1.0.1(9mo ago)00MITPHPPHP &gt;=5.5|^7|^8CI passing

Since Sep 16Pushed 9mo agoCompare

[ Source](https://github.com/slava-basko/saga-php)[ Packagist](https://packagist.org/packages/slava-basko/saga-php)[ RSS](/packages/slava-basko-saga-php/feed)WikiDiscussions main Synced today

READMEChangelog (2)Dependencies (2)Versions (3)Used By (0)

Saga PHP
========

[](#saga-php)

Transactions for distributed system.

Read it if you are not familiar with Saga pattern \[\].

This library has no dependencies on any external libs and works on PHP 5.5+.

Install
-------

[](#install)

```
composer require slava-basko/saga-php
```

Usage
-----

[](#usage)

Create a class that implements `Basko\Saga\StageInterface` and add it to the pipeline. Simple as that. For example:

```
class OrderFlight implements StageInterface
{
    /**
     * @param Booking $payload
     * @return Booking
     */
    public function execute($payload)
    {
        // Logic related to flight order.
        // Call external API and then $payload->setFlightId($flightId);
        return $payload;
    }

    /**
     * @param Booking $payload
     * @return Booking
     */
    public function rollback($payload)
    {
        // Logic related to flight cancellation
        // Call external API with $payload->getFlightId(); and then $payload->resetFlightId();
        return $payload;
    }
}
```

The pipeline:

```
try {
    $pipe = new Pipeline();
    $pipe->addStage(new OrderFlight());
    $pipe->addStage(new OrderCar());
    $pipe->addStage(new OrderHotel());

    $pipe->execute($booking);
} catch (\Exception $e) {
    // Log
}
```

All stages will be executed sequentially: `OrderFlight::execute()`, `OrderCar::execute()`, `OrderHotel::execute()`.

Rollback also called sequentially but in reverse order: `OrderHotel::rollback()`, `OrderCar::rollback()`, `OrderFlight::rollback()`.

###  Health Score

25

—

LowBetter than 35% of packages

Maintenance57

Moderate activity, may be stable

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity32

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% 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 ~10 days

Total

2

Last Release

280d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/6a8e37b4c52b1cfe4f5d64f420d21875ebdeb53954d6859d6d663038b95ef3cc?d=identicon)[slava-basko](/maintainers/slava-basko)

---

Top Contributors

[![slava-basko](https://avatars.githubusercontent.com/u/4376953?v=4)](https://github.com/slava-basko "slava-basko (4 commits)")

---

Tags

patternsaga

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/slava-basko-saga-php/health.svg)

```
[![Health](https://phpackages.com/badges/slava-basko-saga-php/health.svg)](https://phpackages.com/packages/slava-basko-saga-php)
```

###  Alternatives

[league/pipeline

A plug and play pipeline implementation.

1.0k17.2M88](/packages/league-pipeline)[redeyeventures/geopattern

Generate beautiful SVG patterns.

112140.1k4](/packages/redeyeventures-geopattern)[getsolaris/laravel-make-service

A MVCS pattern create a service command for Laravel 5+

81173.8k](/packages/getsolaris-laravel-make-service)[functional-php/pattern-matching

Pattern matching for PHP with automatic destructuring.

8280.1k](/packages/functional-php-pattern-matching)[lezhnev74/pasvl

Array Validator (regular expressions for nested array, sort of)

5258.3k3](/packages/lezhnev74-pasvl)[ptrofimov/matchmaker

Ultra-fresh PHP matching functions

28170.0k](/packages/ptrofimov-matchmaker)

PHPackages © 2026

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