PHPackages                             rapide-software/sync-stack - 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. [Queues &amp; Workers](/categories/queues)
4. /
5. rapide-software/sync-stack

ActiveLibrary[Queues &amp; Workers](/categories/queues)

rapide-software/sync-stack
==========================

A package for creating and running synchronisations after a deploy, running only those which have not run yet, akin to migrations. Useful for CI/CD integration or multidatabase solutions where what has run before is not necessarily in sync across databases.

V0.1.12(1mo ago)0605↓13.3%[1 PRs](https://github.com/rapideinternet/SyncStack/pulls)MITPHPPHP ^8.0.0

Since Mar 7Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/rapideinternet/SyncStack)[ Packagist](https://packagist.org/packages/rapide-software/sync-stack)[ RSS](/packages/rapide-software-sync-stack/feed)WikiDiscussions main Synced 2w ago

READMEChangelog (10)Dependencies (10)Versions (15)Used By (0)

Sync Stack
==========

[](#sync-stack)

A lightweight layer for running post-deploy synchronisations, similar to migrations but kept separate. It only executes sync files that have not been run before, making it handy for CI/CD pipelines or multi-database setups where environments may be out of sync.

Requirements
------------

[](#requirements)

- PHP ^8.0
- Laravel 11.41.3^/12^

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

[](#installation)

```
composer require rapide-software/sync-stack
```

The service provider is auto-discovered.

Setup
-----

[](#setup)

1. Create the tracking table migration (defaults to `synchronisations`):

```
php artisan sync:migrate
php artisan migrate
```

Use `--path` to place the migration elsewhere or `--realpath` for absolute paths.

2. (Optional) Choose where your sync files live. By default they sit in `app/Synchronisations` using StudlyCase folders. Pass `--location` to any sync command to override, or `--fromBasePath` to target an absolute path under `base_path()`.

Creating synchronisations
-------------------------

[](#creating-synchronisations)

Generate a new sync file (timestamped automatically):

```
php artisan sync:create --name="update_permissions" --location=Synchronisations
```

`--abstractClass` lets you extend your own base class for shared helpers. As of yet, this feature is very barebones and simply writes the extends line for you.

Each sync is an anonymous class with two hooks:

```
return new class {
    public function sync(): void {
        // Synchronize what you want synchronized.
    }

    public function rollback(): void {
        // Rollback logic to undo your synchronization
    }
};
```

Running synchronisations
------------------------

[](#running-synchronisations)

Execute only the sync files that have not run yet:

```
php artisan sync:run --location=Synchronisations
```

- Files are discovered recursively under `--location` and keyed by their path in the `synchronisations` table.
- Each run uses the next batch number; `--continueOnFailure` keeps going after an error.

Rolling back
------------

[](#rolling-back)

Undo the most recent batch of syncs:

```
php artisan sync:rollback --location=Synchronisations
```

- By default only the latest batch is rolled back; earlier batches stay intact.
- Use `--batch=x` to rollback a specific batch number.
- Use `--path=x` to rollback using a like match on the path name, so partial paths are also allowed. Use with care!
- Use `--continueOnFailure` to attempt the rest even if one rollback fails.

License
-------

[](#license)

MIT

###  Health Score

44

—

FairBetter than 90% of packages

Maintenance90

Actively maintained with recent releases

Popularity17

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

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 ~40 days

Recently: every ~49 days

Total

13

Last Release

45d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/61463747?v=4)[JasperKrom](/maintainers/JasperKrom)[@JasperKrom](https://github.com/JasperKrom)

###  Code Quality

TestsPest

### Embed Badge

![Health badge](/badges/rapide-software-sync-stack/health.svg)

```
[![Health](https://phpackages.com/badges/rapide-software-sync-stack/health.svg)](https://phpackages.com/packages/rapide-software-sync-stack)
```

###  Alternatives

[illuminate/queue

The Illuminate Queue package.

20433.0M1.8k](/packages/illuminate-queue)[laravel/ai

The official AI SDK for Laravel.

1.1k4.6M319](/packages/laravel-ai)[mike-bronner/laravel-model-caching

Automatic caching for Eloquent models.

2.4k161.4k2](/packages/mike-bronner-laravel-model-caching)[psalm/plugin-laravel

Psalm plugin for Laravel

3345.4M354](/packages/psalm-plugin-laravel)[forjedio/inertia-table

Backend-driven dynamic tables for Laravel + Inertia.js

272.0k](/packages/forjedio-inertia-table)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

265.2k](/packages/aedart-athenaeum)

PHPackages © 2026

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