PHPackages                             devuni/notifier-agent - 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. [Mail &amp; Notifications](/categories/mail)
4. /
5. devuni/notifier-agent

ActiveLibrary[Mail &amp; Notifications](/categories/mail)

devuni/notifier-agent
=====================

Laravel agent for the Devuni Notifier platform — encrypted backups and announcements.

v3.0.0(today)00[1 PRs](https://github.com/devuni-cz/notifier-agent/pulls)MITPHPPHP ^8.4CI passing

Since Jun 9Pushed todayCompare

[ Source](https://github.com/devuni-cz/notifier-agent)[ Packagist](https://packagist.org/packages/devuni/notifier-agent)[ Docs](https://github.com/devuni-cz/notifier-agent)[ RSS](/packages/devuni-notifier-agent/feed)WikiDiscussions main Synced today

READMEChangelog (1)Dependencies (16)Versions (4)Used By (0)

Devuni Notifier Agent
=====================

[](#devuni-notifier-agent)

[![Latest Version on Packagist](https://camo.githubusercontent.com/8af1dee4bbcea9e15cb51c7335b3809364f7fb6518dbc05c548fafa8237a0d89/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f646576756e692f6e6f7469666965722d6167656e742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/devuni/notifier-agent)[![Tests](https://github.com/devuni-cz/notifier-agent/actions/workflows/ci.yml/badge.svg)](https://github.com/devuni-cz/notifier-agent/actions/workflows/ci.yml)[![PHP 8.4](https://camo.githubusercontent.com/d072d1f17b6a8dc799e782e39d676d25cab3e73854efe49206d6ffcb6473abd4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e342d3737374242343f7374796c653d666c61742d737175617265266c6f676f3d706870266c6f676f436f6c6f723d7768697465)](https://www.php.net)[![Laravel 12](https://camo.githubusercontent.com/06ea735703a9f1df04eafc3035859ba230f5b3396114bb712770feb5eb1ded4f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d31322d4646324432303f7374796c653d666c61742d737175617265266c6f676f3d6c61726176656c266c6f676f436f6c6f723d7768697465)](https://laravel.com)[![License: MIT](https://camo.githubusercontent.com/422db9fd40f5831c765cf6530b6750c081b696bd18d904cf89554df98c676277/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e3f7374796c653d666c61742d737175617265)](LICENSE.md)

Encrypted database &amp; storage backups for Laravel apps, shipped to the [Devuni Notifier](https://notifier.devuni.cz) central server. AES-256 ZIPs, chunked HTTPS upload, token auth, queue support. Supports **MySQL**, **MariaDB**, **PostgreSQL**, and **YugabyteDB** (via YSQL).

How it works
------------

[](#how-it-works)

```
┌─────────────────────┐        encrypted ZIP         ┌─────────────────────┐
│  Your Laravel app   │  ───── chunked upload ─────▶ │  notifier.devuni.cz │
│  (this package)     │        (X-Notifier-Token)    │  (central server)   │
└─────────────────────┘                              └─────────────────────┘
         │                                                     │
         │ mysqldump + storage/app/public                      │ stores + monitors
         │ → AES-256 ZIP                                       │ → sends alerts
         ▼                                                     ▼
    local temp file                                     long-term backup archive
    (cleaned up after upload)

```

> **Heads up:** This is the **client side** of the Devuni Notifier platform. Without a central server configured via `NOTIFIER_URL`, there's nowhere to send backups. If you don't have it, try [spatie/laravel-backup](https://github.com/spatie/laravel-backup) instead.

Install
-------

[](#install)

```
composer require devuni/notifier-agent
php artisan vendor:publish --tag="notifier-config"
php artisan notifier:install   # interactive .env wizard
php artisan notifier:check     # verify setup (env, DB, 7z, mysqldump, URL)
```

**Requirements:** PHP 8.4+, Laravel 12+, the right dump tool for your DB (`mysqldump` / `mariadb-dump` for MySQL &amp; MariaDB, `pg_dump` or `ysql_dump` for PostgreSQL &amp; YugabyteDB), and `p7zip-full` (recommended) or PHP `zip` extension.

Usage
-----

[](#usage)

### Scheduled backups (recommended)

[](#scheduled-backups-recommended)

Add to `routes/console.php`:

```
use Illuminate\Support\Facades\Schedule;

Schedule::command('notifier:database-backup')->dailyAt('02:00')->onOneServer();
Schedule::command('notifier:storage-backup')->weeklyOn(0, '03:00')->onOneServer();
```

### On demand

[](#on-demand)

```
php artisan notifier:database-backup
php artisan notifier:storage-backup
```

### HTTP API

[](#http-api)

Trigger backups from an external scheduler. Rate-limited to 10 req/min.

```
curl -X POST https://your-app.com/api/notifier/backup \
  -H "X-Notifier-Token: your-token" \
  -d "type=backup_database"   # or backup_storage
```

On failure the response returns an opaque `error_id` (UUID) - the full detail (stack trace, `mysqldump`/7z stderr) stays in your `backup` log channel. Grep logs for the UUID to correlate.

### Announcements

[](#announcements)

Pull this site's maintenance/announcement notices from the central server and show them in your dashboard. **On by default** - it costs nothing until `NOTIFIER_URL` is set (the service no-ops without a target). Disable with `NOTIFIER_ANNOUNCEMENTS_ENABLED=false`.

**Filament hosts** (the common case): when Filament is installed, the notices are **auto-injected** as a banner into every panel page via a render hook - nothing to place. Move the spot with `NOTIFIER_ANNOUNCEMENTS_FILAMENT_HOOK` (default `panels::content.start`; also `panels::body.start`, `panels::topbar.end`), or turn the auto-injection off with `NOTIFIER_ANNOUNCEMENTS_FILAMENT=false`. Works across Filament v3/v4/v5.

**Blade hosts:** drop the component anywhere:

```

```

**Inertia / Vue / React hosts:** the service is framework-agnostic - render it yourself:

```
app(\Devuni\Notifier\Services\AnnouncementsService::class)->activeAnnouncements();
// e.g. share as an Inertia prop, then render it in your own component.
```

Requests are **per-repository** and reuse your existing `NOTIFIER_URL` + `X-Notifier-Token` (`GET {NOTIFIER_URL}/announcements`), so the server returns only this site's announcements - no other repositories are disclosed. Responses are cached (`NOTIFIER_ANNOUNCEMENTS_CACHE_TTL`, default 900 s) so the dashboard never blocks on a live request, and any fetch failure renders nothing rather than breaking your dashboard. Customize the Blade markup with `vendor:publish --tag="notifier-views"`.

Configure
---------

[](#configure)

Minimum `.env`:

```
NOTIFIER_BACKUP_CODE=...                                        # auth token
NOTIFIER_URL=https://notifier.devuni.cz/api/v1/repositories/123 # your endpoint
NOTIFIER_BACKUP_PASSWORD=...                                    # ZIP password
```

Optional: `NOTIFIER_LOGGING_CHANNEL`, `NOTIFIER_ROUTES_ENABLED`, `NOTIFIER_ROUTE_PREFIX`, `NOTIFIER_ZIP_STRATEGY` (`auto`/`cli`/`php`), `NOTIFIER_CHUNK_SIZE`, `NOTIFIER_QUEUE_CONNECTION`, `NOTIFIER_DATABASE_CONNECTION`, `NOTIFIER_POSTGRES_DUMP_BINARY`, `NOTIFIER_POSTGRES_SCHEMA`. See [`config/notifier.php`](config/notifier.php) for defaults and descriptions.

### Database engine

[](#database-engine)

The package auto-detects which dump tool to use from your Laravel connection driver:

DriverTool usedInstall`mysql`, `mariadb``mysqldump``apt install mysql-client` or `mariadb-client``pgsql` (PostgreSQL)`pg_dump``apt install postgresql-client``pgsql` (YugabyteDB)`ysql_dump` if installed, else `pg_dump`[YugabyteDB tools](https://docs.yugabyte.com)By default the package backs up your app's **default** Laravel connection (`config('database.default')`). Override with `NOTIFIER_DATABASE_CONNECTION=pgsql` if you want a different one.

For PostgreSQL/Yugabyte, force a specific binary via `NOTIFIER_POSTGRES_DUMP_BINARY=ysql_dump` (or `pg_dump`). Non-`public` schemas: set `NOTIFIER_POSTGRES_SCHEMA=myschema`.

### Exclusions

[](#exclusions)

Arrays - edit `config/notifier.php`:

```
'excluded_tables' => ['telescope_entries', 'sessions', 'cache', 'jobs', 'failed_jobs'],
'excluded_files'  => ['.gitignore', 'temp', 'logs/debug.log'],
```

### Queue offloading

[](#queue-offloading)

API-triggered backups can be offloaded to avoid PHP timeouts:

```
NOTIFIER_QUEUE_CONNECTION=redis   # or database, sqs, beanstalkd
```

Artisan commands always run synchronously regardless of this setting.

Security
--------

[](#security)

- **At rest:** AES-256 encrypted archives with `0600` permissions, cleaned up after upload
- **In transit:** HTTPS-only, `hash_equals` token comparison, per-chunk + full-file SHA-256 verification
- **No leaks:** ZIP password passed via stdin (not argv - invisible to `ps` / `/proc/*/cmdline`); API errors return opaque UUIDs, not raw exception messages
- **Report vulnerabilities:** see [security policy](../../security/policy) - don't open public issues

Links
-----

[](#links)

- [Changelog](CHANGELOG.md) - see what's new in each release
- [Contributing](CONTRIBUTING.md)
- [Full config reference](config/notifier.php)

Credits
-------

[](#credits)

- [Ludwig Tomas](https://github.com/ludwigtomas)
- [All contributors](../../contributors)

License
-------

[](#license)

MIT - see [LICENSE.md](LICENSE.md).

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance100

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 65.1% 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

Unknown

Total

1

Last Release

0d ago

### Community

Maintainers

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

---

Top Contributors

[![ludwigtomas](https://avatars.githubusercontent.com/u/44323251?v=4)](https://github.com/ludwigtomas "ludwigtomas (97 commits)")[![DavidJanec](https://avatars.githubusercontent.com/u/172018795?v=4)](https://github.com/DavidJanec "DavidJanec (42 commits)")[![Braincode-sro](https://avatars.githubusercontent.com/u/258863615?v=4)](https://github.com/Braincode-sro "Braincode-sro (5 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (5 commits)")

---

Tags

laravelbackupnotifierAgentannouncementsdevuni

###  Code Quality

TestsPest

Static AnalysisPHPStan, Rector

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/devuni-notifier-agent/health.svg)

```
[![Health](https://phpackages.com/badges/devuni-notifier-agent/health.svg)](https://phpackages.com/packages/devuni-notifier-agent)
```

###  Alternatives

[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9732.3M121](/packages/roots-acorn)[psalm/plugin-laravel

Psalm plugin for Laravel

3325.1M337](/packages/psalm-plugin-laravel)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

76318.2M110](/packages/laravel-mcp)[laravel/boost

Laravel Boost accelerates AI-assisted development by providing the essential context and structure that AI needs to generate high-quality, Laravel-specific code.

3.5k17.6M507](/packages/laravel-boost)[laravel/ai

The official AI SDK for Laravel.

9782.1M153](/packages/laravel-ai)[laravel/pulse

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

1.7k14.1M120](/packages/laravel-pulse)

PHPackages © 2026

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