{"id":50000532,"url":"https://github.com/bezhanSalleh/filament-exceptions","last_synced_at":"2026-06-05T01:00:41.053Z","repository":{"id":58568578,"uuid":"532449095","full_name":"bezhanSalleh/filament-exceptions","owner":"bezhanSalleh","description":"A Simple \u0026 Beautiful Pluggable Exception Viewer for FilamentPHP's Admin Panel","archived":false,"fork":false,"pushed_at":"2026-03-29T04:20:00.000Z","size":694,"stargazers_count":193,"open_issues_count":0,"forks_count":30,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-03-29T07:05:26.249Z","etag":null,"topics":["exception-reporter","exception-viewer","filamentadmin","filamentphp","laravel","plugin"],"latest_commit_sha":null,"homepage":"","language":"Blade","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bezhanSalleh.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"bezhanSalleh"}},"created_at":"2022-09-04T05:40:51.000Z","updated_at":"2026-03-29T04:13:30.000Z","dependencies_parsed_at":"2024-01-24T18:38:45.320Z","dependency_job_id":"f2c0506e-a6e9-453f-b1ad-679e9ab4e440","html_url":"https://github.com/bezhanSalleh/filament-exceptions","commit_stats":{"total_commits":106,"total_committers":16,"mean_commits":6.625,"dds":0.6698113207547169,"last_synced_commit":"a3a13d57518eddce30104e79fcd19cb2586994e7"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":"spatie/package-skeleton-laravel","purl":"pkg:github/bezhanSalleh/filament-exceptions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bezhanSalleh%2Ffilament-exceptions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bezhanSalleh%2Ffilament-exceptions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bezhanSalleh%2Ffilament-exceptions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bezhanSalleh%2Ffilament-exceptions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bezhanSalleh","download_url":"https://codeload.github.com/bezhanSalleh/filament-exceptions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bezhanSalleh%2Ffilament-exceptions/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33926275,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-04T02:00:06.755Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["exception-reporter","exception-viewer","filamentadmin","filamentphp","laravel","plugin"],"created_at":"2026-05-19T12:00:26.529Z","updated_at":"2026-06-05T01:00:41.046Z","avatar_url":"https://github.com/bezhanSalleh.png","language":"Blade","funding_links":["https://github.com/sponsors/bezhanSalleh"],"categories":["Plugins"],"sub_categories":["Administration \u0026 Management"],"readme":"\u003ca href=\"https://github.com/bezhanSalleh/filament-exceptions\" class=\"filament-hidden\"\u003e\n\u003cimg style=\"width: 100%; max-width: 100%;\" alt=\"filament-exceptions-art\" src=\"https://raw.githubusercontent.com/bezhanSalleh/filament-exceptions/refs/heads/main/art/filament-exceptions.png\" \u003e\n\u003c/a\u003e\n\n\u003cp align=\"center\" class=\"flex items-center justify-center\"\u003e\n    \u003ca href=\"https://filamentphp.com/docs/4.x/introduction/overview\"\u003e\n        \u003cimg alt=\"FILAMENT 4.x\" src=\"https://img.shields.io/badge/FILAMENT-4.x-EBB304?style=for-the-badge\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://filamentphp.com/docs/5.x/introduction/overview\"\u003e\n        \u003cimg alt=\"FILAMENT 5.x\" src=\"https://img.shields.io/badge/FILAMENT-5.x-EBB304?style=for-the-badge\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://packagist.org/packages/bezhansalleh/filament-exceptions\"\u003e\n        \u003cimg alt=\"Packagist\" src=\"https://img.shields.io/packagist/v/bezhansalleh/filament-exceptions.svg?style=for-the-badge\u0026logo=packagist\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/bezhansalleh/filament-exceptions/actions?query=workflow%3Arun-tests+branch%3Amain\" class=\"filament-hidden\"\u003e\n        \u003cimg alt=\"Tests Passing\" src=\"https://img.shields.io/github/actions/workflow/status/bezhansalleh/filament-exceptions/run-tests.yml?style=for-the-badge\u0026logo=github\u0026label=tests\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/bezhansalleh/filament-exceptions/actions?query=workflow%3A\"Check+%26+fix+styling\"+branch%3Amain\" class=\"filament-hidden\"\u003e\n        \u003cimg alt=\"Code Style Passing\" src=\"https://img.shields.io/github/actions/workflow/status/bezhansalleh/filament-exceptions/fix-php-code-style-issues.yml?style=for-the-badge\u0026logo=github\u0026label=code%20style\"\u003e\n    \u003c/a\u003e\n\n\u003ca href=\"https://packagist.org/packages/bezhansalleh/filament-exceptions\"\u003e\n    \u003cimg alt=\"Downloads\" src=\"https://img.shields.io/packagist/dt/bezhansalleh/filament-exceptions.svg?style=for-the-badge\" \u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n# Exception Viewer\n\nA Simple \u0026 Beautiful Exception Viewer for FilamentPHP's Admin Panel\n\n\u003e **Version Compatibility:**\n\u003e - Filament 4.x \u0026 5.x → use version 4.x \n\u003e - Filament 3.x → use version 3.x\n\u003e - Filament 2.x → use version 1.x\n\n## Installation\n\n1. You can install the package via composer:\n\n```bash\ncomposer require bezhansalleh/filament-exceptions\n```\n\n2. Publish and run the migration via:\n```bash\nphp artisan exceptions:install\n```\n\n3. Register the plugin for the Filament Panel\n\n```php\npublic function panel(Panel $panel): Panel\n{\n    return $panel\n        -\u003eplugins([\n            \\BezhanSalleh\\FilamentExceptions\\FilamentExceptionsPlugin::make()\n        ]);\n}\n```\n\nThat's it! The package automatically registers itself with Laravel's exception handler and starts recording exceptions.\n\n\n\u003e [!IMPORTANT]\n\u003e The plugin follows Filament's theming rules. So, to use the plugin create a custom theme if you haven't already, and add the following line to your `theme.css` file:\n\n```php\n@source '../../../../vendor/bezhansalleh/filament-exceptions/resources/views/**/*.blade.php';\n```\nNow build your theme using: \n```bash\nnpm run build\n```\n\n\n### Recording Control\n\nBy default, exceptions are recorded automatically. You can control this behavior in your `AppServiceProvider`'s `boot()` method:\n\n#### Stop/Start Recording\n```php\nuse BezhanSalleh\\FilamentExceptions\\FilamentExceptions;\n\npublic function boot(): void\n{\n    // Stop recording exceptions\n    FilamentExceptions::stopRecording();\n\n    // Resume recording\n    FilamentExceptions::startRecording();\n\n    // Check if recording is active\n    FilamentExceptions::isRecording();\n}\n```\n\n#### Conditional Recording\nUse `recordUsing()` to define custom logic for when exceptions should be recorded:\n\n```php\nuse BezhanSalleh\\FilamentExceptions\\FilamentExceptions;\n\npublic function boot(): void\n{\n    // Only record in production\n    FilamentExceptions::recordUsing(fn () =\u003e app()-\u003eisProduction());\n\n    // Skip specific exception types\n    FilamentExceptions::recordUsing(function (Throwable $e) {\n        return ! $e instanceof \\Illuminate\\Validation\\ValidationException\n            \u0026\u0026 ! $e instanceof \\Illuminate\\Auth\\AuthenticationException;\n    });\n\n    // Combine multiple conditions\n    FilamentExceptions::recordUsing(function (Throwable $e) {\n        if (! app()-\u003eisProduction()) {\n            return false;\n        }\n\n        // Skip 4xx HTTP exceptions\n        if ($e instanceof \\Symfony\\Component\\HttpKernel\\Exception\\HttpException\n            \u0026\u0026 $e-\u003egetStatusCode() \u003c 500) {\n            return false;\n        }\n\n        return true;\n    });\n}\n```\n\n### Configuration Options\n\nWhen registering the FilamentExceptions plugin, you can chain various methods to customize its behavior. Here are all available configuration options:\n\n#### Navigation\n```php\nFilamentExceptionsPlugin::make()\n    -\u003enavigationBadge(bool | Closure $condition = true)\n    -\u003enavigationBadgeColor(string | array | Closure $color)\n    -\u003enavigationGroup(string | Closure | null $group)\n    -\u003enavigationParentItem(string | Closure | null $item)\n    -\u003enavigationIcon(string | Closure | null $icon)\n    -\u003eactiveNavigationIcon(string | Closure | null $icon)\n    -\u003enavigationLabel(string | Closure | null $label)\n    -\u003enavigationSort(int | Closure | null $sort)\n    -\u003eregisterNavigation(bool | Closure $shouldRegisterNavigation)\n    -\u003esubNavigationPosition(SubNavigationPosition | Closure $position)\n```\n\n#### Labels and Search\n```php\nFilamentExceptionsPlugin::make()\n    -\u003emodelLabel(string | Closure | null $label)\n    -\u003epluralModelLabel(string | Closure | null $label)\n    -\u003etitleCaseModelLabel(bool | Closure $condition = true)\n    -\u003egloballySearchable(bool | Closure $condition = true)\n```\n\n#### Mass Pruning Settings\n```php\nFilamentExceptionsPlugin::make()\n    -\u003emodelPruneInterval(Carbon $interval)\n```\n\u003e **Note** This requires laravel scheduler to be setup and configured in order to work. You can see how to do that here  [Running The Scheduler](https://laravel.com/docs/10.x/scheduling#running-the-scheduler)\n\n#### Tenancy Configuration\n```php\nFilamentExceptionsPlugin::make()\n    -\u003escopeToTenant(bool | Closure $condition = true)\n    -\u003etenantOwnershipRelationshipName(string | Closure | null $ownershipRelationshipName)\n    -\u003etenantRelationshipName(string | Closure | null $relationshipName)\n```\n\n#### General Configuration\n```php\nFilamentExceptionsPlugin::make()\n    -\u003ecluster(string | Closure | null $cluster)\n    -\u003eslug(string | Closure | null $slug)\n```\n\nExample usage:\n```php\nreturn $panel\n    -\u003eplugins([\n        FilamentExceptionsPlugin::make()\n            -\u003enavigationLabel('Error Logs')\n            -\u003enavigationIcon('heroicon-o-bug-ant')\n            -\u003enavigationBadge()\n            -\u003enavigationGroup('System')\n            -\u003emodelPruneInterval(now()-\u003esubDays(7))\n    ]);\n```\n \n### Custom Exception Model\n1. Extend the base model as follow:\n```php\n\u003c?php\n\nnamespace App\\Models;\n\nuse BezhanSalleh\\FilamentExceptions\\Models\\Exception as BaseException;\n\nclass MyCustomException extends BaseException\n{\n    ...\n}\n```\n2. Then, in a service provider's `boot()` method for instance `AppServiceProvider`:\n```php\nuse App\\Models\\MyCustomException;\nuse BezhanSalleh\\FilamentExceptions\\FilamentExceptions;\n...\n   public function boot()\n   {\n       FilamentExceptions::model(MyCustomException::class);\n   }\n...\n```\n\n## Translations\nPublish the translations with\n```bash\nphp artisan vendor:publish --tag=filament-exceptions-translations\n```\n\n## Testing\n\n```bash\ncomposer test\n```\n\n## Changelog\n\nPlease see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.\n\n## Contributing\n\nPlease see [CONTRIBUTING](CONTRIBUTING.md) for details.\n\n## Security Vulnerabilities\n\nPlease review [our security policy](../../security/policy) on how to report security vulnerabilities.\n\n## Credits\n\n- [Bezhan Salleh](https://github.com/bezhanSalleh)\n- [All Contributors](../../contributors)\n\n## License\n\nThe MIT License (MIT). Please see [License File](LICENSE.md) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FbezhanSalleh%2Ffilament-exceptions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FbezhanSalleh%2Ffilament-exceptions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FbezhanSalleh%2Ffilament-exceptions/lists"}