PHPackages                             codenzia/filament-system-tools - 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. [Caching](/categories/caching)
4. /
5. codenzia/filament-system-tools

ActiveLibrary[Caching](/categories/caching)

codenzia/filament-system-tools
==============================

System administration pages for Filament v4: logs viewer, cache management, database backup &amp; restore, and system info.

v0.1.0(1mo ago)078MITPHPPHP ^8.3CI passing

Since May 29Pushed 1mo agoCompare

[ Source](https://github.com/Codenzia/filament-system-tools)[ Packagist](https://packagist.org/packages/codenzia/filament-system-tools)[ Docs](https://github.com/codenzia/filament-system-tools)[ RSS](/packages/codenzia-filament-system-tools/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (9)Versions (3)Used By (0)

Filament System Tools — Logs, cache, backups, health, queue &amp; scheduler
===========================================================================

[](#filament-system-tools--logs-cache-backups-health-queue--scheduler)

[![Latest Version](https://camo.githubusercontent.com/6b89a2be98dc26b62d521f69c93971b2d7806cce603970def5a3b0863f598ac9/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f636f64656e7a69612f66696c616d656e742d73797374656d2d746f6f6c732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/codenzia/filament-system-tools)[![PHP Version](https://camo.githubusercontent.com/f7aec363a5c8df92b5254d23ac6c60fddb53a71aa0d2ebee62e73567a141bda5/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f636f64656e7a69612f66696c616d656e742d73797374656d2d746f6f6c732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/codenzia/filament-system-tools)[![Filament](https://camo.githubusercontent.com/a4590ecd31837ed0b59c24f0e88d92d9da4b077f18d050fe8aa87d3d95154a57/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f46696c616d656e742d763425323025374325323076352d6635396530623f7374796c653d666c61742d737175617265)](https://filamentphp.com)[![Tests](https://camo.githubusercontent.com/6c642fd9f53ed0bb1f6640cf8e2c39326f4113af6954f8def767f2701edf08af/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f74657374732d5065737425323076332d3862356366363f7374796c653d666c61742d737175617265)](https://pestphp.com)[![License](https://camo.githubusercontent.com/48345c67b909401f9f97937527459191431d8eb30758e8665c299d6069cc12c5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d495425323025374325323050726f70726965746172792d626c75653f7374796c653d666c61742d737175617265)](LICENSE.md)

A **complete system administration toolkit for [Filament v4 and v5](https://filamentphp.com)** — health dashboard, cache management, log viewer, database backup/restore, queue + scheduler monitoring, and a schema-aware data-migration wizard. Replaces Adminer, custom artisan scripts, and a stack of one-off SSH helpers with first-class Filament pages.

> **Why this exists.** Most Laravel admin panels stop at CRUD. Once your app is in production, you spend half your time outside the panel — `tail`ing logs over SSH, clearing caches via artisan, restoring backups by hand, and copy-pasting `php artisan about` into support tickets. This package brings all of that into Filament where you (and your team) already live.

> **Try it live:** A working integration is included in the [Codenzia plugins demo](https://github.com/Codenzia/plugins-demo) at `/admin/demo/system-tools`.

---

Features
--------

[](#features)

- **System Health** — live checks (DB / cache / queue / mail / HTTPS / storage symlink), production-readiness checklist, environment table, **cache management** (clear application / config / route / view / event caches, `optimize`, `clear-compiled`, on-disk footprint), one-click `storage:link` with native `ln -s` / `mklink` fallback for hosts where PHP `symlink()` is disabled.
- **System Logs** — real-time log viewer with level filtering, auto-refresh, clear, and download.
- **Database &amp; Backups** — full table browser, SQL runner, and multi-driver backup / restore (SQLite / MySQL / MariaDB / PostgreSQL) with optional gzip and table filtering.
- **Smart Data Migration** — schema-aware export/import wizard. Bundles your data with schema metadata, diffs against the current DB, suggests column renames, runs FK-ordered batch imports with automatic ID remapping, deferred self-references, and circular-FK handling. Survives renamed / added / dropped columns between source and target.
- **Queue &amp; Scheduler** — live counts (pending / processing / failed), per-queue breakdown, recent failed jobs with per-job retry / delete, recent batches with progress, list of scheduled tasks with next-run time, one-click `queue:restart` / `schedule:run`. **Background-worker cron detection**: at the top of the page, two cards flag whether the app *needs* a scheduler / queue worker (by inspecting registered `Schedule::` events and `ShouldQueue` jobs) and whether cron is *actually running* on the host (heartbeat-file detection); when missing, the exact cron line to paste into hPanel / cPanel is shown.
- **About** — release info, comprehensive system snapshot (environment, server, database, drivers, disk), and a "Copy support snapshot" button that exports a markdown summary ready to paste into a support ticket.

Ships with `db:export` and `db:import` Artisan commands so the same migration logic is available from the CLI.

---

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

[](#requirements)

DependencyVersionPHP`^8.3`Filament`^4.0 || ^5.0`---

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

[](#installation)

```
composer require codenzia/filament-system-tools
```

Publish the config file:

```
php artisan vendor:publish --tag="filament-system-tools-config"
```

Setup
-----

[](#setup)

Register the plugin in your Filament panel provider:

```
use Codenzia\FilamentSystemTools\FilamentSystemToolsPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            FilamentSystemToolsPlugin::make()
                ->navigationGroup('System'),
        ]);
}
```

Custom Theme (Tailwind v4)
--------------------------

[](#custom-theme-tailwind-v4)

If your panel uses a custom Filament theme with `->viteTheme()`, add `@source` directives so Tailwind compiles the classes used by this package:

```
/* resources/css/filament/admin/theme.css */
@source '../../../../vendor/codenzia/filament-system-tools/src/**/*.php';
@source '../../../../vendor/codenzia/filament-system-tools/resources/views/**/*.blade.php';
```

Then rebuild assets with `npm run build`.

Pages
-----

[](#pages)

### System Health

[](#system-health)

The operational dashboard. Five panels in one page:

- **Health Checks** — DB / cache / storage / queue / mail / environment / HTTPS / storage symlink / scheduler. Each check is green / yellow / red with a one-line detail.
- **Production Readiness** — checklist of items to fix before going live (`APP_ENV=production`, `APP_DEBUG=false`, real queue / mail driver, HTTPS, storage symlink, real DB driver).
- **Quick Actions** — one-click `storage:link` (with fallback), `optimize`, clear-all-caches, and an optional `migrate --force` button.
- **Cache Management** — current on-disk cache footprint plus per-cache buttons: clear application / config / route / view / event caches and remove the compiled class file. The `Quick Actions › Clear all caches` button runs `optimize:clear` for everything in one shot.
- **Environment** — comprehensive table with PHP / Laravel / server / drivers / memory / disk / etc.

The **storage symlink** action first tries `php artisan storage:link`. When PHP's `symlink()` is in `disable_functions` (common on shared PHP-FPM hosting) it falls back to `ln -s` on Linux/macOS and `mklink /D` on Windows. If both fail it surfaces a clear "create the link manually" message.

The "Run Migrations" button is **off by default** because applying migrations from a UI is a production-affecting operation. Enable it explicitly:

```
// config/filament-system-tools.php
'health' => [
    'allow_run_migrations' => env('FILAMENT_SYSTEM_TOOLS_ALLOW_MIGRATE', true),
],
```

### System Logs

[](#system-logs)

Real-time log viewer with level filtering, auto-refresh, clear, and download capabilities. Parses Laravel daily log files into structured entries with timestamps, levels, messages, and stack traces.

**Permission:** Clearing logs requires the `clear_system_logs` permission.

### Database &amp; Backups

[](#database--backups)

Full database table browser with row counts and sizes. Supports:

- **Table Schema Viewer** — inspect column definitions
- **Table Data Viewer** — browse table rows with pagination
- **SQL Query Runner** — execute raw `SELECT` queries against any table
- **Bulk Export** — download selected tables as `.sql` or `.json`
- **Bulk Import** — upload a `.sql` or `.json` file and restore data
- **Full Backup / Restore** — create, download, restore, and delete full database backups via the backup-creation modal:
    - Pick the source connection (SQLite / MySQL / MariaDB / PostgreSQL)
    - Optional gzip compression (`.sql.gz`)
    - Optional per-table filtering (SQLite &amp; MySQL only)

Backups for SQLite without gzip use a fast file-copy path (no `sqlite3` binary required); everything else routes through the `DatabaseSqlTool` service which shells out to the appropriate native CLI tool (`sqlite3`, `mysqldump`/`mysql`, `pg_dump`/`psql`). **Database passwords are passed via environment variables** (`MYSQL_PWD`, `PGPASSWORD`) — never on the command line.

Restore auto-detects the source connection from the backup filename, falls back to `database.default` for legacy backups, and uses file-copy when the backup is a raw SQLite database file.

### Smart Data Migration

[](#smart-data-migration)

A schema-aware export / import wizard for moving data between databases that may have **diverged schemas** (renamed columns, added columns, restructured tables). Five steps:

1. **Upload** — pick a Smart Export `.json` file produced from another instance, or click **Smart Export** to generate one from this instance.
2. **Schema Analysis** — the page diffs the exported schema against the live DB and shows per-table:
    - Matched / dropped / added columns
    - Type-mismatch warnings
    - Suggested column renames (Levenshtein distance ≤ 3 + compatible types)
    - Tables that exist in the export but not in this DB (will be skipped)
3. **Configure** — review and accept / reject rename suggestions, pick which tables to import, choose **Skip** vs. **Update** on duplicates, toggle timestamp preservation, optionally apply a configured row-level scope.
4. **Importing** — runs inside a transaction with FK checks temporarily disabled. Tables are sorted topologically by FK dependency. Self-references and circular FKs are deferred and patched after the main pass. Auto-increment IDs are remapped so foreign keys land on the correct new IDs. Per-row errors stop after 100 to keep big imports moving. Per-table progress is streamed to the UI.
5. **Complete** — summary cards (records imported, tables, skipped, errors) and an expandable list of warnings and errors.

**Tenant scoping (optional).** If your app is multi-tenant, point the importer at the active tenant by setting a scope resolver in config — Smart Migration will filter exports to that tenant and stamp imported rows with the target tenant's id:

```
// config/filament-system-tools.php
'smart_migration' => [
    'scope_resolver' => fn () => Filament::getTenant()
        ? ['column' => 'team_id', 'value' => Filament::getTenant()->id]
        : null,
],
```

Leave it as `null` to operate on the entire database.

The `Codenzia\FilamentSystemTools\Services\SmartMigration\` namespace exposes `SmartExporter`, `SmartImporter`, `SchemaIntrospector`, `SchemaDiffer`, `TableSorter`, `IdRemapper`, `SchemaDiffResult`, and `ImportResult` for direct use in code, jobs, or custom commands.

### Queue &amp; Scheduler

[](#queue--scheduler)

A real-time view of your job queue and scheduler:

- **Summary cards** — driver, pending, processing, failed.
- **Per-queue breakdown** — total / waiting / processing for each queue name.
- **Recent pending jobs** — last 10 with display name, queue, and attempts.
- **Failed jobs** — last 20 with one-click **Retry** and **Delete** per UUID, plus bulk **Retry all failed** and **Flush failed jobs**.
- **Job batches** — last 10 with progress percent.
- **Scheduled tasks** — every event registered via the Laravel Scheduler with its cron expression and the **next run time** (computed via `Cron\CronExpression`).
- **Worker controls** — `queue:restart` and `schedule:run` buttons.

The page reads from `jobs`, `failed_jobs`, and `job_batches` directly via `DB`, so it works regardless of queue driver as long as those tables exist. When they don't, the page degrades gracefully and shows zeros.

### About

[](#about)

A comprehensive system snapshot for support tickets and audit logs:

- **Release info** — version, name, and date pulled from `config/filament-system-tools.php` or `APP_VERSION` / `APP_RELEASE_NAME` / `APP_RELEASE_DATE` env vars.
- **Environment** — PHP, Laravel, Filament, app env, debug, URL, timezone, locale.
- **Server** — OS, architecture, SAPI, memory limit, max upload / post / execution time.
- **Database** — driver, host, name, version, table count, size.
- **Drivers** — cache / session / queue / mail / filesystem / broadcasting / log channel.
- **Storage** — disk total / used / free / usage percent + logs directory size.

A **"Copy support snapshot"** button at the top of the page generates a markdown-formatted summary of all of the above and copies it to the clipboard with one click — paste it into a Slack thread, GitHub issue, or support ticket.

System Health is for "is anything broken right now"; About is for "give me a comprehensive snapshot to send to support."

Artisan Commands
----------------

[](#artisan-commands)

The same export/import logic is available from the CLI for cron jobs, deploys, and CI:

```
# Export the default connection to storage/app/backups
php artisan db:export

# Export a specific connection, gzipped, to a custom path
php artisan db:export --connection=mysql --path=/srv/dumps/app.sql --gzip

# Export only specific tables (SQLite / MySQL only)
php artisan db:export --connection=mysql --table=users --table=orders

# Import a SQL file (refuses to run without --force)
php artisan db:import /srv/dumps/app.sql.gz --connection=mysql --force
```

Both commands return non-zero exit codes on failure with a human-readable error message.

Configuration
-------------

[](#configuration)

```
// config/filament-system-tools.php

return [
    // Used in database export filenames and SQL comments
    'app_name' => env('APP_NAME', 'Laravel'),

    // Displayed on the About page
    'release' => [
        'version' => env('APP_VERSION', '1.0.0'),
        'name'    => env('APP_RELEASE_NAME', ''),
        'date'    => env('APP_RELEASE_DATE', ''),
    ],

    // Navigation group for all system tool pages
    'navigation_group' => 'System',

    // Directory where database backups and CLI exports are written
    'backup_path' => storage_path('app/backups'),

    // Tables excluded from the database browser and exports
    'excluded_tables' => [
        'migrations', 'personal_access_tokens', 'sessions',
        'cache', 'cache_locks', 'jobs', 'job_batches',
        'failed_jobs', 'password_reset_tokens',
        // ... see config file for the full list
    ],

    // Override binary paths when they're not on PATH (common on shared hosting
    // and inside PHP-FPM with restricted PATH).
    'dump' => [
        'sqlite'      => ['sqlite3'   => env('DB_DUMP_SQLITE3',   'sqlite3')],
        'mysql'       => [
            'mysqldump' => env('DB_DUMP_MYSQLDUMP', 'mysqldump'),
            'mysql'     => env('DB_DUMP_MYSQL',     'mysql'),
        ],
        'pgsql'       => [
            'pg_dump' => env('DB_DUMP_PG_DUMP', 'pg_dump'),
            'psql'    => env('DB_DUMP_PSQL',    'psql'),
        ],
        'compression' => [
            'gzip'   => env('DB_DUMP_GZIP',   'gzip'),
            'gunzip' => env('DB_DUMP_GUNZIP', 'gunzip'),
        ],
    ],
];
```

### Binary Path Overrides

[](#binary-path-overrides)

When the CLI tools aren't on `PATH` (typical on macOS with Homebrew and on shared hosting where PHP-FPM's `PATH` is minimal), set absolute paths in `.env`:

```
DB_DUMP_MYSQLDUMP="/opt/homebrew/opt/mysql-client/bin/mysqldump"
DB_DUMP_MYSQL="/opt/homebrew/opt/mysql-client/bin/mysql"
DB_DUMP_PG_DUMP="/opt/homebrew/opt/postgresql@16/bin/pg_dump"
DB_DUMP_PSQL="/opt/homebrew/opt/postgresql@16/bin/psql"
```

When a binary is missing, the plugin surfaces an installation hint with the original error, instead of silently failing.

Plugin API
----------

[](#plugin-api)

Toggle individual pages on or off:

```
FilamentSystemToolsPlugin::make()
    ->enableHealth(true)
    ->enableLogs(true)
    ->enableBackups(true)
    ->enableSmartMigration(true)
    ->enableQueueMonitor(true)
    ->enableAbout(true)
    ->navigationGroup('System')
```

All pages are enabled by default — pass `false` to any of the toggles to hide that page.

### Breaking change: `enableCache()` removed

[](#breaking-change-enablecache-removed)

The standalone **Cache Management** page has been folded into **System Health** as a panel. The `->enableCache(true|false)` toggle no longer exists — calling it will throw `BadMethodCallException`. Remove the call from your panel provider:

```
 FilamentSystemToolsPlugin::make()
     ->enableHealth(true)
-    ->enableCache(true)
     ->enableBackups(true)
```

If you were toggling the cache page off, use `->enableHealth(false)` instead. All cache-clearing actions now live on the System Health page.

Migrating from `codenzia/filament-db-flow`
------------------------------------------

[](#migrating-from-codenziafilament-db-flow)

`filament-db-flow` is **deprecated** in favor of this package — `filament-system-tools` now contains everything `filament-db-flow` offered (multi-driver dumps, gzip, table filtering, `db:export` / `db:import`) plus the table browser, SQL runner, log viewer, and About page.

To migrate:

1. Replace the dependency: ```
    composer remove codenzia/filament-db-flow
    composer require codenzia/filament-system-tools
    ```
2. Swap the plugin registration in your panel provider: ```
    // Before
    FilamentDbFlowPlugin::make()
    // After
    FilamentSystemToolsPlugin::make()
    ```
3. The `DB_DUMP_*` environment variables work identically — no changes needed.
4. The `db:export` and `db:import` Artisan commands have the same signatures.

Existing `filament-db-flow` JSON-tracked backup metadata is **not** migrated automatically; the new page lists files directly from disk under `filament-system-tools.backup_path`. Move any existing backup files into that directory and they will appear in the UI.

Service: `DatabaseSqlTool`
--------------------------

[](#service-databasesqltool)

If you want to use the export/import logic outside the UI/CLI:

```
use Codenzia\FilamentSystemTools\Services\DatabaseSqlTool;

$path = app(DatabaseSqlTool::class)->export(
    connection: 'mysql',
    path: '/srv/dumps/snapshot.sql.gz',
    gzip: true,
    tables: ['users', 'orders'],
);

app(DatabaseSqlTool::class)->import(
    path: '/srv/dumps/snapshot.sql.gz',
    connection: 'mysql',
);
```

Throws `RuntimeException` with a helpful, driver-specific message when binaries are missing or the underlying process fails.

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

[](#requirements-1)

- PHP 8.3+
- Laravel 12+
- Filament v4 or v5
- For MySQL/MariaDB backups: `mysqldump` and `mysql` CLI tools (ship with the MySQL Server / `mysql-client` package)
- For PostgreSQL backups: `pg_dump` and `psql` CLI tools
- For SQLite backups with gzip or table filtering: `sqlite3` CLI (file-copy fast path doesn't require it)

License
-------

[](#license)

This package is dual-licensed:

- **MIT License** — Free for open source projects under an OSI-approved license.
- **Commercial License** — Required for proprietary/commercial projects. Visit [codenzia.com](https://codenzia.com) for details.

See [LICENSE.md](LICENSE.md) for full terms.

###  Health Score

39

—

LowBetter than 84% of packages

Maintenance93

Actively maintained with recent releases

Popularity10

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity39

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

Unknown

Total

1

Last Release

34d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/10361843?v=4)[Mohammad El-Haj](/maintainers/mh2x)[@mh2x](https://github.com/mh2x)

---

Top Contributors

[![mh2x](https://avatars.githubusercontent.com/u/10361843?v=4)](https://github.com/mh2x "mh2x (11 commits)")

---

Tags

laravellogscachefilamentdatabase backupcodenziasystem-tools

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/codenzia-filament-system-tools/health.svg)

```
[![Health](https://phpackages.com/badges/codenzia-filament-system-tools/health.svg)](https://phpackages.com/packages/codenzia-filament-system-tools)
```

###  Alternatives

[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3914.6k](/packages/rawilk-profile-filament-plugin)[ysfkaya/filament-phone-input

A phone input component for Laravel Filament

3161.3M25](/packages/ysfkaya-filament-phone-input)[stephenjude/filament-jetstream

A Laravel starter kit built with Filament inspired by Jetstream.

17760.2k3](/packages/stephenjude-filament-jetstream)[stephenjude/filament-two-factor-authentication

Filament Two Factor Authentication: Google 2FA + Passkey Authentication

84215.9k9](/packages/stephenjude-filament-two-factor-authentication)[croustibat/filament-jobs-monitor

Background Jobs monitoring like Horizon for all drivers for FilamentPHP

274325.8k8](/packages/croustibat-filament-jobs-monitor)[marcelweidum/filament-passkeys

Use passkeys in your filamentphp app

6649.5k1](/packages/marcelweidum-filament-passkeys)

PHPackages © 2026

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