michal78 / laravel-sms-catcher
A development-only inbox for inspecting Laravel SMS notifications.
Package info
github.com/michal78/laravel-sms-catcher
Language:Blade
pkg:composer/michal78/laravel-sms-catcher
Requires
- php: ^8.2
- illuminate/notifications: ^10.0|^11.0|^12.0|^13.0
- illuminate/support: ^10.0|^11.0|^12.0|^13.0
Requires (Dev)
- larastan/larastan: ^2.9|^3.0
- laravel/pint: ^1.18
- orchestra/testbench: ^8.0|^9.0|^10.0|^11.0
- phpunit/phpunit: ^10.5|^11.0|^12.0
This package is auto-updated.
Last update: 2026-07-02 14:35:12 UTC
README
Laravel SMS Catcher
A development-only Laravel package that captures SMS notifications and displays them in a beautiful, phone-inspired inbox – think Mailpit, but for your sms notification channel.
Screenshots
SMS Inbox Dashboard
The main inbox view displays all captured SMS messages with sender, recipient, and timestamp information, and supports light/dark themes.
Message Detail View
Click any message to see the full details alongside a phone-style preview (with a device selector), making it easy to verify how your SMS will appear to recipients.
Requirements
- PHP 8.2+
- Laravel (
illuminate/supportandilluminate/notifications) 10.x, 11.x, 12.x, or 13.x
Installation
Require the package in your application as a dev dependency. Until a tagged
release is published you will need to target the dev-main branch explicitly:
composer require --dev michal78/laravel-sms-catcher
The package is auto-discovered by Laravel, but you can manually register the service provider if you have discovery disabled:
// config/app.php 'providers' => [ // ... SmsCatcher\SmsCatcherServiceProvider::class, ];
Configuration
By default the dashboard is only enabled when your application is running in the local environment or when APP_DEBUG=true. You can override this behaviour via the SMS_CATCHER_ENABLED environment variable.
Publish the configuration file if you would like to customise the dashboard path or storage location:
php artisan vendor:publish --tag=sms-catcher-config
This will create config/sms-catcher.php with the following options:
enabled: Toggle the catcher on/off.route.prefix: URL prefix for the dashboard (defaults to/sms-catcher).route.middleware: Middleware stack wrapping the dashboard routes.storage_path: File that stores captured messages.
Usage
Trigger any Laravel notification that uses the sms channel and the payload will be recorded automatically. Visit the dashboard (default at http://your-app.test/sms-catcher) to see the inbox:
- Inbox view summarises each message.
- Click a message to view details and a phone-style preview.
- Clear individual messages or wipe the entire inbox.
Messages are stored as JSON within your application's storage folder (storage/logs/sms-catcher.json). The file is safe to delete; it will be recreated as new messages arrive. Since the storage/logs directory is typically excluded from version control in Laravel applications, the captured messages will not be committed to your repository.
Note: The catcher inspects notifications by invoking their
toSmsmethod. Ensure your notifications implement this method and return either a string, array, or object containing the text body.
Security
This package is intended for local development only. Do not enable it in production environments.
Development
Install dependencies and run the test suite, code style checks, and static analysis locally:
composer install composer test # PHPUnit composer format:test # Laravel Pint (--test) composer format # Laravel Pint (auto-fix) composer analyse # PHPStan / Larastan
These same checks run automatically on every push and pull request via GitHub Actions (see .github/workflows).
Changelog
Please see CHANGELOG.md for recent changes.
Contributing
Issues and pull requests are welcome. Please run composer test, composer format:test, and composer analyse before submitting a PR.
License
The MIT License (MIT). Please see LICENSE for more information.


