This was a productive train ride: I finally updated the Lambda Layer powering sidecar-browsershot to Puppeteer v24 and added automation to make maintenance much easier.
github.com/stefanzweife...
sidecar-browsershot was updated as wel.
github.com/stefanzweife...
07.03.2026 18:33
👍 3
🔁 1
💬 0
📌 0
❓iTerm2 or Ghostty or…?
Tell me why as well 🙂
07.03.2026 17:06
👍 0
🔁 0
💬 5
📌 0
Summary of the upgrade for spatie/crawler from v8 to v9 highlights major changes and improvements in the API functionality.
I just love how well Claude can do package upgrades.
(🕸️ in this case the spatie crawler)
05.03.2026 15:17
👍 3
🔁 0
💬 1
📌 0
I never write down migrations.
Down migrations are the least tested code in any Laravel app. They're written once and never run.
And when you do need to roll back, you don't know beforehand what you need to do with the data would already be stored in the updated schema.
05.03.2026 12:56
👍 7
🔁 0
💬 2
📌 0
Laravel Backup v10: serializable events, resilient multi-destination backups, and more
We just released v10 of [laravel-backup](https://spatie.be/docs/laravel-backup), our package that creates backups of your Laravel app. The backup is a zip file containing all files in the directories you specify, along with a dump of your database. You can store it on any of the filesystems Laravel supports, and you can even back up to multiple disks at once.
We originally created this package after [DigitalOcean lost one of our servers](https://freek.dev/374-today-digitalocean-lost-our-entire-server). That experience taught us the hard way that you should never rely solely on your hosting provider for backups. The package has been actively maintained ever since.
## Taking backups
With the package installed, taking a backup is as simple as running:
```bash
php artisan backup:run
```
This creates a zip of your configured files and databases and stores it on your configured disks. You can also back up just the database or just the files:
```bash
php artisan backup:run --only-db
php artisan backup:run --only-files
```
Or target a specific disk:
```bash
php artisan backup:run --only-to-disk=s3
```
In most setups you'll want to schedule this. In your `routes/console.php`:
```php
use Illuminate\Support\Facades\Schedule;
Schedule::command('backup:run')->daily()->at('01:00');
```
## Listing and monitoring backups
To see an overview of all your backups, run:
```bash
php artisan backup:list
```
This shows a table with the backup name, disk, date, and size for each backup.
The package also ships with a monitor that checks whether your backups are healthy. A backup is considered unhealthy when it's too old or when the total backup size exceeds a configured threshold.
```bash
php artisan backup:monitor
```
You'll typically schedule the monitor to run daily:
```php
Schedule::command('backup:monitor')->daily()->at('03:00');
```
When the monitor detects a problem, it fires an event that triggers notifications. Out of the box the package supports mail, Slack, Discord, and (new in v10) a generic webhook channel.
## Cleaning up old backups
Over time backups pile up. The package includes a cleanup command that removes old backups based on a configurable retention strategy:
```bash
php artisan backup:clean
```
The default strategy keeps all backups for a certain number of days, then keeps one daily backup, then one weekly backup, and so on. It will never delete the most recent backup. You'll want to schedule this alongside your backup command:
```php
Schedule::command('backup:clean')->daily()->at('02:00');
```
## What's new in v10
v10 is mostly about addressing long-standing community requests and cleaning up internals.
The biggest change is that all events now carry primitive data (`string $diskName`, `string $backupName`) instead of `BackupDestination` objects. This means events can now be used with queued listeners, which was previously impossible because those objects weren't serializable. If you have existing listeners, you'll need to update them to use `$event->diskName` instead of `$event->backupDestination->diskName()`.
Events and notifications are now decoupled. Events always fire, even when `--disable-notifications` is used. This fixes an issue where `BackupWasSuccessful` never fired when notifications were disabled, which also broke encryption since it depends on the `BackupZipWasCreated` event.
There's a new `continue_on_failure` config option for multi-destination backups. When enabled, a failure on one destination won't abort the entire backup. It fires a failure event for that destination and continues with the rest.
Other additions include a `verify_backup` config option that validates the zip archive after creation, a generic webhook notification channel for Mattermost/Teams/custom integrations, new command options (`--filename-suffix`, `--exclude`, `--destination-path`), and improved health checks that now report all failures instead of stopping at the first one.
On the internals side, the `ConsoleOutput` singleton has been replaced by a `backupLogger()` helper, encryption config now uses a proper enum, and `storage/framework` is excluded from backups by default.
The full list of breaking changes and migration instructions can be found in the [upgrade guide](https://github.com/spatie/laravel-backup/blob/main/UPGRADING.md).
## In closing
You can find the complete documentation at [spatie.be/docs/laravel-backup](https://spatie.be/docs/laravel-backup) and the source code [on GitHub](https://github.com/spatie/laravel-backup).
This is one of the many packages we've created at [Spatie](https://spatie.be). If you want to support our open source work, consider picking up one of [our paid products](https://spatie.be/products).
🌟 Laravel Backup v10: serializable events, resilient multi-destination backups, and more
#php #laravel #package #spatie #backups
04.03.2026 13:19
👍 2
🔁 0
💬 1
📌 0
Introduction | laravel-backup
laravel-backup
Check it out!
✍️ Blog post: freek.dev/3015-larave...
📦 Repo: github.com/spatie/lara...
📖 Docs: spatie.be/docs/larave...
04.03.2026 13:01
👍 0
🔁 0
💬 0
📌 0
v10 is mainly a clean up release, where we could make breaking changes to make the behavior better.
Multi-destination backups are more resilient. With continue_on_failure enabled, a failure on one disk won't abort the rest. It fires a failure event and moves on.
04.03.2026 13:01
👍 1
🔁 0
💬 1
📌 0
📦 A little while ago, we released v10 of Laravel Backup
This one can dump your database and put it in a zip file together with any files you want. It will copy over that zip to any external storage you want.
It can also monitor your backups and alert you if there isn't one after X days.
04.03.2026 13:01
👍 5
🔁 0
💬 1
📌 0
At Laracon EU, we took a quick picture of the awesome human beings who are part of Spatie’s story, past and present.
Feeling lucky to know every one of them 🙂
04.03.2026 11:55
👍 12
🔁 0
💬 0
📌 0
A search interface on a website displays results related to Laravel packages, including titles, dates, and tags for various articles.
I've updated the search on my blog to use the new major version of our spatie/laravel-site-search package (which can crawl a site and index all content)
I'll talk more about the package soon!
04.03.2026 10:48
👍 4
🔁 1
💬 1
📌 0
The Agent Skills Directory
Discover and install skills for AI agents.
Why a skill instead of MCP? One command vs. per-client server configuration. No separate process, no transport protocols. Just a file in your project.
Skills are portable too. They follow the skills.sh standard, so they work with any compatible agent. Switch tools tomorrow and the skill comes along
03.03.2026 16:01
👍 0
🔁 0
💬 1
📌 0
AI performance reviews for your app with the Flare CLI
The Flare CLI connects to your Flare performance monitoring data and uses AI to turn it into actionable insights, right from your terminal.In this video, you...
It also does AI-powered performance reviews. Ask it to create a performance report for your app, and it comes back with actionable suggestions based on your actual monitoring data. Slow routes, heavy queries, bottlenecks.
www.youtube.com/watch?v=eQR...
03.03.2026 16:01
👍 0
🔁 0
💬 1
📌 0
Fixing a production error with the Flare CLI and AI, from discovery to deploy
Using the Flare CLI and its agent skill to find, fix, and resolve a production error without leaving the terminal.The AI agent looks up the latest error on f...
The real power: the agent can go from error discovery to resolution without you leaving the terminal.
Find the error, analyze the stack trace against your local files, generate a fix, deploy it, and mark the error as resolved in Flare. All in one flow.https://www.youtube.com/watch?v=G3FxC2VDFYM
03.03.2026 16:01
👍 0
🔁 0
💬 1
📌 0
From there, just ask your agent things like:
"Show me the latest open errors"
"Investigate the most recent RuntimeException and suggest a fix"
"Show me the slowest routes in my app"
The agent fetches data from Flare, cross-references it with your local code, and proposes fixes.
03.03.2026 16:01
👍 0
🔁 0
💬 1
📌 0
Install the skill in your project:
flare install-skill
That's it. The skill file gets added to your project and any compatible agent (Claude Code, Cursor, Codex) picks it up automatically.
03.03.2026 16:01
👍 0
🔁 0
💬 1
📌 0
The Flare CLI now ships with an agent skill. One command and your AI coding agent can use Flare to triage errors, review performance, and even fix bugs for you.
Here's what that looks like 👇
03.03.2026 16:01
👍 1
🔁 0
💬 1
📌 0
Awesome developers/friends!
A group of people poses on stage, with a backdrop announcing lunch sponsorship by Algolia, at a Laracon event.
Picture 1: Ahmedabad, Laracon India, 2023
Picture 2: Amsterdam, Laracon EU, 2026
@LaraconIN @LaraconEU
03.03.2026 14:02
👍 2
🔁 0
💬 0
📌 0
Under the hood we've upgraded to spatie/crawler v9, removed guzzlehttp/guzzle and symfony/dom-crawler as direct dependencies, and modernized the test suite with Pest v4.
v8 requires PHP 8.4+ and Laravel 12+.
Read the full post here: freek.dev/3041-larave...
03.03.2026 11:25
👍 0
🔁 0
💬 0
📌 0
Also new: XSL stylesheet support. Sitemaps look rough in a browser. Attach a stylesheet with setStylesheet() to make them human-readable. Works on both Sitemap and SitemapIndex.
03.03.2026 11:25
👍 0
🔁 0
💬 1
📌 0
New in v8: automatic sitemap splitting. Large sites can exceed the 50,000 URL limit per file. Now you can call maxTagsPerSitemap() and the package splits into multiple files with a sitemap index automatically.
03.03.2026 11:25
👍 0
🔁 0
💬 1
📌 0
Your Eloquent models can implement the Sitemapable interface and be added to the sitemap directly, one at a time or as a collection.
03.03.2026 11:25
👍 0
🔁 0
💬 1
📌 0