v1.5.1 Latest

Upgrade guide

This guide covers upgrade-sensitive behavior exposed by the current source. For release-by-release notes, also read the repository CHANGELOG.

Check platform requirements

The current package supports PHP ^8.3, Laravel ^12.0 || ^13.0, and Filament ^5.0.

composer why-not crumbls/layup:^1
composer update crumbls/layup --with-dependencies

Publish and run migrations

Layup ships migrations for pages, page revisions, nesting, authors, scheduled publishing, and featured images.

php artisan migrate

The scheduled publishing migration backfills published_at for existing published rows. The nesting migration backfills path from slug for existing pages.

Review config changes

Republish the config to a temporary branch or review the published diff before merging it into your application:

php artisan vendor:publish --tag=layup-config --force

Review pages.model, pages.table, frontend.prefix, frontend.excluded_paths, scheduling.auto_publish, safelist.path, safelist.auto_sync, and page_layout.templates.

Regenerate the safelist

php artisan layup:safelist

Then rebuild your frontend assets.

Audit pages and widgets

php artisan layup:doctor
php artisan layup:audit
php artisan layup:list-widgets
php artisan layup:search --unused

Livewire-rendered widgets

Blade-rendered widgets remain the default path. If your application has custom widgets extending Crumbls\Layup\View\BaseLivewireWidget, make sure the referenced Livewire components still exist and accept a data prop. See Livewire-rendered widgets.

Custom page models

Custom page models should continue extending Crumbls\Layup\Models\Page unless the application only uses Layup as a field. The base model owns path generation, published scopes, revisions, SEO helpers, and scheduled publishing behavior.

If your content model has a different workflow, use field-only mode instead of subclassing the Page model. See Embedding the field.