PHPackages                             ahmednour1430464/laravel-stream-backup - 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. [Database &amp; ORM](/categories/database)
4. /
5. ahmednour1430464/laravel-stream-backup

ActiveLibrary[Database &amp; ORM](/categories/database)

ahmednour1430464/laravel-stream-backup
======================================

Streaming database backup for Laravel: dump → compress → S3 multipart upload with constant memory use. Supports MySQL, PostgreSQL, SQLite, and custom drivers.

1.4.1(3w ago)023MITPHPPHP ^8.1CI passing

Since Jun 9Pushed 3w agoCompare

[ Source](https://github.com/ahmednour1430464/laravel-stream-backup)[ Packagist](https://packagist.org/packages/ahmednour1430464/laravel-stream-backup)[ RSS](/packages/ahmednour1430464-laravel-stream-backup/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (2)Dependencies (19)Versions (15)Used By (0)

laravel-stream-backup
=====================

[](#laravel-stream-backup)

[![Latest Version on Packagist](https://camo.githubusercontent.com/eb1073dc056baff3be2f83e3f4a92168c9d4a52873d3dd6fcff2dd27460d4e9d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f61686d65646e6f7572313433303436342f6c61726176656c2d73747265616d2d6261636b75702e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/ahmednour1430464/laravel-stream-backup)[![Total Downloads](https://camo.githubusercontent.com/4ada0d55964d017cf7d538358c42e32a4b1aac6e84d85b0a5498593566d638a6/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f61686d65646e6f7572313433303436342f6c61726176656c2d73747265616d2d6261636b75702e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/ahmednour1430464/laravel-stream-backup)[![License](https://camo.githubusercontent.com/56048a5009799b3b0e95d6ad44aa0f197c4471259cc1af72c30074350951a80b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f61686d65646e6f7572313433303436342f6c61726176656c2d73747265616d2d6261636b75702e7376673f7374796c653d666c61742d737175617265)](https://github.com/ahmednour1430464/laravel-stream-backup/blob/main/LICENSE.md)[![GitHub Tests Action Status](https://camo.githubusercontent.com/a065ddd5629638773c343f1f3f21eb68c60a8721896776d267108d41b2ff2263/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f61686d65646e6f7572313433303436342f6c61726176656c2d73747265616d2d6261636b75702f74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/ahmednour1430464/laravel-stream-backup/actions?query=workflow%3Atests+branch%3Amain)

> Streaming database → compress → (optional encrypt) → multipart backups **AND** streaming download → decrypt → decompress → transaction restores for Laravel 10+, with **constant memory use** regardless of database size.

Supports **MySQL**, **PostgreSQL**, **SQLite**, and **custom drivers** via the extensible `DumperFactory`.

**Backup**: The dump process is piped to a compressor (auto-detected: pigz/gzip) which is optionally encrypted, then streamed directly into S3 multipart uploads, SFTP chunked uploads, or local disk. Nothing is ever buffered to disk and nothing exceeds the 32 MB part buffer in RAM, so a 300 GB database and a 3 GB database use roughly the same amount of memory.

**Restore**: Backup files are downloaded as a stream from S3, SFTP, or local disk, decrypted (if encrypted), decompressed on the fly, and parsed to restore either full databases or specific tables directly into a database transaction, without buffering the backup file to disk.

This package is the productised form of the proof-of-concept script [`backup.php`](./backup.php).

---

Comparison with `spatie/laravel-backup`
---------------------------------------

[](#comparison-with-spatielaravel-backup)

While `spatie/laravel-backup` is an excellent and widely used package, it has a fundamental limitation when dealing with large databases: **it requires significant local disk space**.

Feature`spatie/laravel-backup``laravel-stream-backup`**Backup Process**Dumps to local disk → Zips on disk → Uploads to S3Streams dump to compressor → Streams directly to destination**Destination Drivers**S3, local**S3, SFTP, Local disk****Local Disk Required**Yes (&gt;100% of DB size)**No (Zero bytes)****Memory Usage**Variable**Constant (~32 MB buffer)****Encryption**❌ No built-in encryption**AES-256-GCM or XChaCha20-Poly1305****Restore Process**❌ No built-in restoreStreams from any driver → Decrypts → Decompresses → Imports**Best For**Small to medium databasesLarge databases &amp; multi-tenant setups---

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

[](#requirements)

- PHP `^8.1` with the `pcntl` and `hash` extensions (PHP `^8.2` required when running on Laravel 11+)
- Laravel `^10.0`, `^11.0`, `^12.0`, or `^13.0`
- A supported destination: S3-compatible bucket, SFTP server, or local disk
- One of the following dump tools on `PATH`:
    - **MySQL**: `mysqldump`
    - **PostgreSQL**: `pg_dump`
    - **SQLite**: `sqlite3`
- `pigz` on `PATH` for optimal performance (auto-falls back to built-in `gzip` if unavailable)
- *Optional*: `ext-openssl` for AES-256-GCM encryption, or `ext-sodium` for XChaCha20-Poly1305

### Compatibility matrix

[](#compatibility-matrix)

PackagePHPLaravelTestbenchPHPUnit`ahmednour1430464/laravel-stream-backup``8.1 / 8.2 / 8.3 / 8.4``10.*``8.*``10.*``ahmednour1430464/laravel-stream-backup``8.2 / 8.3 / 8.4``11.*``9.*``10.* / 11.*``ahmednour1430464/laravel-stream-backup``8.2 / 8.3 / 8.4``12.*``10.*``11.* / 12.*``ahmednour1430464/laravel-stream-backup``8.3 / 8.4``13.*``11.*``11.* / 12.*`Supported Databases
-------------------

[](#supported-databases)

DatabaseDump ToolCredential HandlingNotesMySQL`mysqldump`Temp credential file (`--defaults-extra-file`)Default; backward compatiblePostgreSQL`pg_dump``PGPASSWORD` environment variablePassword never on CLISQLite`sqlite3`N/A (file-based, no auth)Reads path from Laravel configCustomYour choiceYour choiceRegister via `DumperFactory::extend()`Supported Destinations
----------------------

[](#supported-destinations)

DriverUploadDownload (Restore)Notes**S3**`S3MultipartUploader``S3DownloadDriver`AWS S3, DigitalOcean Spaces, MinIO, etc.**SFTP**`SftpChunkedUploader``SftpDownloadDriver`Requires `phpseclib/phpseclib ^3.0`; supports key-based auth**Local**`LocalDiskUploader``LocalDownloadDriver`Any local/mounted filesystemInstallation
------------

[](#installation)

```
composer require ahmednour1430464/laravel-stream-backup
php artisan vendor:publish --tag=stream-backup
php artisan migrate
```

The unified `stream-backup` tag publishes both the configuration file and database migrations in a single command.

The service provider is auto-discovered.

Environment
-----------

[](#environment)

Add these to `.env` (see [`.env.example`](./.env.example) for the full list):

```
STREAM_BACKUP_DISK=spaces
STREAM_BACKUP_DESTINATION_DRIVER=s3          # s3 | sftp | local
STREAM_BACKUP_COMPRESSION_DRIVER=auto        # auto | pigz | gzip
STREAM_BACKUP_COMPRESSION_LEVEL=4
STREAM_BACKUP_MAX_CONCURRENT=2
STREAM_BACKUP_QUEUE_CONNECTION=redis
STREAM_BACKUP_QUEUE=backups

# Database dump driver: 'auto' (default), 'mysql', 'pgsql', 'sqlite'
STREAM_BACKUP_DUMP_DRIVER=auto

# Encryption (optional)
STREAM_BACKUP_ENCRYPTION_DRIVER=none         # none | openssl-aes-256-gcm | sodium
STREAM_BACKUP_ENCRYPTION_KEY=                # base64-encoded 32-byte key

# SFTP destination (when STREAM_BACKUP_DESTINATION_DRIVER=sftp)
STREAM_BACKUP_SFTP_HOST=
STREAM_BACKUP_SFTP_PORT=22
STREAM_BACKUP_SFTP_USERNAME=
STREAM_BACKUP_SFTP_PASSWORD=
STREAM_BACKUP_SFTP_PRIVATE_KEY=              # absolute path to .pem
STREAM_BACKUP_SFTP_ROOT=

# Schedule customisation
STREAM_BACKUP_AUTO_SCHEDULE=true
STREAM_BACKUP_SCHEDULE_TZ=UTC
STREAM_BACKUP_CLEANUP_FREQUENCY=daily        # daily | hourly | weekly | monthly | cron
STREAM_BACKUP_CLEANUP_TIME=03:15
STREAM_BACKUP_STALE_FREQUENCY=hourly         # hourly | everyMinutes | cron
```

### Auto-detect compression

[](#auto-detect-compression)

When `STREAM_BACKUP_COMPRESSION_DRIVER` is set to `auto` (the default), the package probes for `pigz` on `PATH` and uses it for multi-core parallel compression. If `pigz` is not installed, it gracefully falls back to `gzip` with a log notice.

### Auto-detect dump driver

[](#auto-detect-dump-driver)

When `STREAM_BACKUP_DUMP_DRIVER` is set to `auto` (the default), the dump driver is detected from your default Laravel database connection (`database.default`).

### DigitalOcean Spaces compatibility

[](#digitalocean-spaces-compatibility)

The bundled S3 client is configured with:

```
'request_checksum_calculation' => 'when_required',
'response_checksum_validation' => 'when_required',
```

These two flags are **mandatory** for Spaces — without them `completeMultipartUpload` fails with `MalformedXML` because Spaces does not implement the SDK's new default checksum headers.

Usage
-----

[](#usage)

### Single database backup

[](#single-database-backup)

Leave `stream-backup.tenants` empty to fall back to the configured default connection:

```
php artisan backup:all
```

### Multiple databases / multi-tenant

[](#multiple-databases--multi-tenant)

Populate `config/stream-backup.php`:

```
'tenants' => [
    ['connection' => 'tenant_1', 'database' => 'company_1', 'tenant_id' => 1],
    ['connection' => 'tenant_2', 'database' => 'company_2', 'tenant_id' => 2],
    // Mixed database engines: override the driver per-tenant
    ['connection' => 'pg_tenant', 'database' => 'orders', 'tenant_id' => 3, 'driver' => 'pgsql'],
],
```

Then:

```
php artisan backup:all                     # enqueue every tenant
php artisan backup:tenant 1                # single tenant by id
php artisan backup:cleanup                 # apply retention policy
```

### Restore

[](#restore)

You can restore a backup directly from any configured storage driver without downloading the entire file to disk.

```
# Full restore
php artisan backup:restore 123

# Restore specific tables only
php artisan backup:restore 123 --tables=users,posts

# Restore into a different connection (e.g. staging)
php artisan backup:restore 123 --connection=staging
```

Encrypted backups are automatically decrypted during restore using the configured encryption key.

### Custom Dump Drivers

[](#custom-dump-drivers)

Register custom drivers in your `AppServiceProvider` or a package service provider:

```
use Ahmednour\StreamBackup\Dumpers\DumperFactory;

public function boot(): void
{
    $this->app->make(DumperFactory::class)->extend('mongodb', function ($app) {
        return new MongoDBDumper(/* ... */);
    });
}
```

Then reference the driver in config or per-tenant:

```
// Global
'dump' => ['driver' => 'mongodb'],

// Per-tenant
['connection' => 'mongo', 'database' => 'analytics', 'driver' => 'mongodb'],
```

### Custom Encryption Drivers

[](#custom-encryption-drivers)

Register custom encryption drivers via `EncryptionFactory::extend()`:

```
use Ahmednour\StreamBackup\Encryption\EncryptionFactory;

public function boot(): void
{
    $this->app->make(EncryptionFactory::class)->extend('age', function ($app) {
        return new AgeEncryptionDriver(/* ... */);
    });
}
```

### Scheduling

[](#scheduling)

`auto_schedule` (enabled by default) registers:

- `stream-backup:abort-stale-multipart` — aborts orphaned multipart uploads on the bucket
- `stream-backup:cleanup` — prunes old backups per retention tier

Both jobs support configurable frequencies via config or env vars:

JobSupported FrequenciesDefault`cleanup``daily`, `hourly`, `weekly`, `monthly`, `cron``daily` at `03:15``stale_multipart``hourly`, `everyMinutes`, `cron``hourly`Invalid frequency values throw `InvalidConfigException` at boot time so typos surface immediately.

Add your own `backup:all` cadence to your app's scheduler.

Encryption
----------

[](#encryption)

Backups can be encrypted at rest using either of two built-in drivers:

DriverAlgorithmExtensionNotes`none`——Default, zero overhead`openssl-aes-256-gcm`AES-256-GCM`ext-openssl`Industry-standard, hardware-accelerated on most CPUs`sodium`XChaCha20-Poly1305`ext-sodium`Modern AEAD, constant-time, no AES-NI dependencyPipeline with encryption enabled: `mysqldump → pigz → encrypt → SHA-256 → S3`

Generate a key:

```
php -r "echo base64_encode(random_bytes(32));"
```

> ⚠️ **WARNING**: Losing the encryption key makes ALL encrypted backups permanently unrecoverable. Store it in AWS Secrets Manager, HashiCorp Vault, or an equivalent secrets manager. This package will never generate, store, or log key material.

Configuration overview
----------------------

[](#configuration-overview)

KeyDefaultPurpose`default_disk``spaces`Filesystem disk; must be S3-compatible when using S3 driver`destination.driver``s3``s3`, `sftp`, or `local``dump.driver``auto``auto`, `mysql`, `pgsql`, `sqlite`, or custom`dump.drivers.mysql.binary``mysqldump`Path/name of the mysqldump binary`dump.drivers.pgsql.binary``pg_dump`Path/name of the pg\_dump binary`dump.drivers.sqlite.binary``sqlite3`Path/name of the sqlite3 binary`compression.driver``auto``auto` (prefers pigz, falls back to gzip), `pigz`, or `gzip``compression.level``4`Level 4 trades ~20% ratio for ~50% less CPU vs level 6`encryption.driver``none``none`, `openssl-aes-256-gcm`, `sodium`, or custom`encryption.key`—Base64-encoded 32-byte raw key`encryption.key_file`—Path to file containing raw binary key (32 bytes)`multipart.part_size`32 MBMust be ≥ 5 MB; keeps part count &lt; 10 000 even at 300 GB`read_chunk`64 KBBytes pulled per `stream_select` iteration`retention.daily`7Daily backups kept`retention.weekly`4Weekly (non-last-Sunday) backups kept`retention.monthly`6Monthly (last Sunday of month) backups kept`queue.max_concurrent`2Atomic semaphore cap across all workers`queue.slot_ttl`21 600 sPer-slot lease; a crashed worker's slot auto-expires (6 h)`verify_after_upload``true`Validates object size + gzip magic bytes after completion`auto_schedule``true`Auto-register cleanup/stale-abort on Laravel scheduler`schedule.cleanup.frequency``daily`Cleanup job cadence`schedule.cleanup.time``03:15`HH:MM (24h) for daily/weekly/monthly cleanup`schedule.stale_multipart.frequency``hourly`Stale multipart abort cadence`schedule.stale_multipart.stale_hours``6`Hours before a multipart upload is considered staleArchitecture
------------

[](#architecture)

### Backup Pipeline

[](#backup-pipeline)

```
dump process (mysqldump / pg_dump / sqlite3)
   │ stdout (non-blocking)
   ▼
  compressor (pigz / gzip — auto-detected)
   │ stdout (non-blocking)
   ▼
 encryption (AES-256-GCM / XChaCha20 / none)
   │
   ▼
 ChecksumStream (SHA-256 tee)
   │
   ▼
 destination driver (S3 multipart / SFTP chunked / local disk)

```

### Restore Pipeline

[](#restore-pipeline)

```
destination driver (S3 GetObject / SFTP read / local file)
   │ stream
   ▼
decrypt (if encrypted — auto-detected from backup record)
   │
   ▼
decompressor (pigz -d / gzip -d)
   │ stdout (non-blocking)
   ▼
SqlDumpParser (extracts requested tables)
   │
   ▼
TableRestorer (runs inside a DB transaction)

```

### Design Patterns

[](#design-patterns)

PatternWherePurpose**Strategy**`DatabaseDumper` / `CompressionDriver` / `EncryptionDriver` / `UploadDriver` / `DownloadDriver` interfacesSwappable algorithms across all pipeline stages**Template Method**`AbstractProcessDumper`Shared proc\_open boilerplate**Abstract Factory**`DumperFactory` / `EncryptionFactory` with `extend()`Driver resolution + extensibility**Polymorphic Sessions**`WriteSession` subclasses per upload driverDriver-specific upload state without leaking internals**Dependency Inversion**`StreamPipeline` / `RestorePipeline` depend on contracts, not concrete driversDecoupled pipeline**Open/Closed**New drivers = new class + `extend()` call, zero edits to existing codeExtensibility### Key design points

[](#key-design-points)

- **Write-side `stream_select`** with a `$pendingChunk` buffer — never busy-waits on blocked pipes.
- **Exit-code validation before `completeMultipartUpload`** — refuses to commit objects when the dump or compression process exited non-zero or printed recognisable errors to stderr.
- **Driver-specific preflight checks** — each upload driver performs a write+delete test using its own transport (S3, SFTP, local FS) before starting the backup.
- **`php://temp` part buffer** — zero copy, spills to disk past 2 MB.
- **Secure credential handling** — MySQL: temp file with `chmod 0600`; PostgreSQL: `PGPASSWORD` env var; SQLite: no credentials needed.
- **Encryption key isolation** — raw key material is resolved just-in-time by `EncryptionKeyResolver`, passed to the driver, and wiped from memory on `close()`.
- **Redis-backed semaphore** via `Cache::lock()` prevents dozens of simultaneous dumps.
- **State-machine enum** (`BackupStatus`) with explicit `canTransitionTo()` guards every model transition.
- **SIGTERM handling** with `pcntl_async_signals(true)` inside `RunBackupJob` — in-flight multipart uploads are aborted on graceful shutdown.
- **Queue `$timeout = 0`** because backup runtime is determined by the DB, not by the worker.

Contracts / extension points
----------------------------

[](#contracts--extension-points)

All of these are resolved from the container and can be swapped:

- `DatabaseDumper` — default resolved by `DumperFactory` based on config
- `DumperFactory` — singleton with `extend()` for custom drivers
- `CompressionDriver` — `AutoCompressionDriver` (default), `PigzDriver`, or `GzipDriver`
- `EncryptionDriver` — `NullEncryptionDriver`, `OpenSslAes256GcmDriver`, `SodiumDriver`, or custom via `EncryptionFactory::extend()`
- `EncryptionFactory` — singleton with `extend()` for custom encryption drivers
- `UploadDriver` — `S3MultipartUploader`, `SftpChunkedUploader`, or `LocalDiskUploader`
- `DownloadDriver` — `S3DownloadDriver`, `SftpDownloadDriver`, or `LocalDownloadDriver`
- `TenantResolver` — `ConfigTenantResolver` when `tenants` is populated, `SingleDatabaseResolver` otherwise
- `BackupStream` — chunked non-blocking stream abstraction

Testing
-------

[](#testing)

```
composer install
./vendor/bin/phpunit
```

Unit tests cover:

- `DumperFactory` (driver resolution, auto-detection, extend API, error handling)
- `PostgreSQLDumper` (CLI args, PGPASSWORD env, password not in command)
- `SQLiteDumper` (database path, file validation, .dump invocation)
- `AutoCompressionDriver` (pigz preference, gzip fallback, binary detection)
- `RetentionClassifier` (daily / weekly / monthly Sunday logic)
- `BackupPathBuilder` (tenant-scoped and `_global` paths)
- `BackupStatus` transitions (state-machine integrity)
- `ChecksumStream` (SHA-256 equivalence to `hash('sha256', $payload)`)
- `BackupSemaphore` (acquire / release / over-limit)
- `BackupVerifier` (post-upload validation across S3, SFTP, local drivers)
- `EncryptionFactory` (driver resolution, extend API, error handling)
- `EncryptionKeyResolver` (env key, file key, validation)
- `NullEncryptionDriver` (passthrough behaviour)
- `OpenSslAes256GcmDriver` (encrypt / decrypt round-trip, key length, tamper detection)
- `SodiumDriver` (encrypt / decrypt round-trip, key length, tamper detection)

The feature test `StreamPipelineSmokeTest` is auto-skipped unless a dump tool + compressor are on `PATH` and `STREAM_BACKUP_TEST_*` env vars are set.

Changelog
---------

[](#changelog)

### v1.3.1

[](#v131)

- Dispatch cleanup jobs to configured queue and connection
- Consolidated config + migration publish tags into unified `stream-backup` tag

### v1.3.0

[](#v130)

- Auto-detect compression driver: prefers `pigz`, falls back to `gzip` with log notice
- Compression default changed from `pigz` to `auto`

### v1.2.1

[](#v121)

- Driver-specific preflight checks replace filesystem-based verification
- Updated dependency constraints

### v1.2.0

[](#v120)

- Multi-driver restore support (S3, SFTP, Local)
- Download logic abstracted into driver-based architecture

### v1.1.3

[](#v113)

- `LocalDiskUploader` resolves backup path against disk root directory

### v1.1.2

[](#v112)

- `BackupVerifier` expanded to support local and SFTP storage drivers

### v1.1.1

[](#v111)

- SFTP root path support, customizable file/directory permissions, automatic directory creation

### v1.1.0

[](#v110)

- Polymorphic `WriteSession` architecture
- `SftpChunkedUploader` and `LocalDiskUploader` support
- Encryption: AES-256-GCM (`ext-openssl`) and XChaCha20-Poly1305 (`ext-sodium`)
- `EncryptionFactory` with `extend()` for custom encryption drivers

### v1.0.0

[](#v100)

- Initial release: streaming backup &amp; restore for MySQL, PostgreSQL, SQLite
- S3 multipart upload with constant memory
- Multi-tenant support, retention policies, configurable scheduling

License
-------

[](#license)

MIT. See [`composer.json`](./composer.json) for author info.

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance95

Actively maintained with recent releases

Popularity9

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

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

Total

11

Last Release

22d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/bdc277030be30e7901f417d018ebba6d6ca0a3b333ec42b8f4cb4b878c1d8211?d=identicon)[ahmednour1430464](/maintainers/ahmednour1430464)

---

Top Contributors

[![ahmednour1430464](https://avatars.githubusercontent.com/u/24294510?v=4)](https://github.com/ahmednour1430464 "ahmednour1430464 (67 commits)")

---

Tags

laravels3backupmysqlsqlitepostgresqlstreamingmysqldumppg\_dumpmulti-driverdigitalocean-spacespigz

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/ahmednour1430464-laravel-stream-backup/health.svg)

```
[![Health](https://phpackages.com/badges/ahmednour1430464-laravel-stream-backup/health.svg)](https://phpackages.com/packages/ahmednour1430464-laravel-stream-backup)
```

###  Alternatives

[laravel/ai

The official AI SDK for Laravel.

1.0k3.2M246](/packages/laravel-ai)[laravel/scout

Laravel Scout provides a driver based solution to searching your Eloquent models.

1.7k55.0M632](/packages/laravel-scout)[laravel/pulse

Laravel Pulse is a real-time application performance monitoring tool and dashboard for your Laravel application.

1.7k15.1M136](/packages/laravel-pulse)[psalm/plugin-laravel

Psalm plugin for Laravel

3345.3M347](/packages/psalm-plugin-laravel)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9762.4M133](/packages/roots-acorn)[flarum/core

Delightfully simple forum software.

211.4M2.4k](/packages/flarum-core)

PHPackages © 2026

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