Release History
The changelog of record is GitHub Releases on racerfish/evolve-cms. This page is a condensed copy, updated as part of each release (see RELEASING.md in the package repo).
Unless noted otherwise, upgrading within v2.x is composer update racerfish/evolve.
v2.5.0 latest
2026-07-19
Minor release: the package becomes its own development environment, plus locale, sitemap, and deployment hardening fixes. First release cut through the automated release flow (semver labels, drafted notes, tag on publish).
New
- Standalone development workbench.
vendor/bin/testbench serveboots a full demo installation from the package repo alone: admin panel, a Kitchen Sink page covering every block blueprint, demo content for all modules, and module overview pages. See Local Development. Blueprint discovery now supports multiple paths per namespace.
Fixes
- Blocks: empty repeatable fields fall back to the fallback locale on the frontend (empty lists no longer render blank in secondary languages).
- Sitemap: noindex routes excluded,
lastmodderives from real content changes, placeholderpriority/changefreqdropped. - Deployment: destructive Envoy tasks (
database:up,media:up,env:up) require target-name confirmation and write timestamped safety backups first. - Portability: MySQL-only
FIELD()andREGEXPusage removed, so the package runs on sqlite and Postgres. module_index_url()no longer fatals without a locale or a configured overview page.- Module list views (blog, company, events, FAQ, projects, locator) ported to the current card component API; they rendered without titles, images, and buttons before.
- Redirects honor
is_active; tagless saves no longer wipe tags; refreshed prebuilt panel assets.
v2.4.3
2026-06-30
Bugfixes for the Shopify collection block:
- Guard optional
productTypein the product card and list, so products without a product type no longer break the collection and products block (#33). - Add an empty option to the collection select so a nullable category can be saved (#34).
v2.4.2
2026-06-30
Bugfix: Block editor no longer bleeds translations across locales (#32). Translatable block fields stay independent per language. Previously a value entered for one locale could leak into others and be persisted across all languages on save, because the field container was not keyed by the active locale and Livewire's DOM morphing reused stale input nodes when switching language tabs.
v2.4.1
2026-06-29
Bugfixes for dangling resource references (Field::resource(...) values whose target row no longer exists):
Block::hydrateProps()now nulls a reference whose target row is missing instead of leaving the raw reference array, which broke consumers expecting a model or null.- A single resource picker now replaces its selection on pick instead of appending, which previously kept a stale id in place and silently discarded the new pick.
- The theme form block scaffold only renders the form component when a form is present.
v2.4.0
2026-06-23
Minor release. Adds a cart-store extension API and ships the first batch of security-audit fixes.
New
- Shopify cart post-mutation hook API.
Alpine.store('cart').addPostMutationHook(fn)runs after every successful cart mutation (add, update, remove), so projects extend cart behaviour instead of forking the store. Store registration is now idempotent.
Security
- Shopify webhook no longer logs the shared secret or the raw request body on HMAC mismatch.
- Locator block escapes CMS-editable fields before unescaped output (stored XSS).
- MediaManager gains a config-driven upload allowlist (
evolve.media-manager.allowed-extensions) that blocks active-content types while keeping documents like PDF. - FaviconController hardened against SSRF and arbitrary public-file writes.
Dependencies
laravel/mcpwidened to^0.6 || ^0.7 || ^0.8.
v2.3.1
2026-06-21
- MCP: allow
laravel/mcp^0.7and^0.8(#28). - MCP: test coverage for the Sanctum bearer-token auth path (#27).
v2.3.0
2026-06-21
Features
- MCP remote (HTTP) transport with automatic tiered access. Anonymous callers get read-only published content, token-bearing callers get the full tool set (#20).
- schema.org JobPosting JSON-LD plus structured job fields (#7).
- Shopify GraphQL Admin API behind a client interface, replacing the dead Admin client (#19).
Fixes
- Media: HTTP Range request support (#14), consistent attachment counts, and orphaned pivot cleanup (#15).
- Dotenv service no longer corrupts
.envstructure on writes (#16). - Theme: replaced the custom Vite integration with
laravel-vite-plugin(#13). - Analytics dashboard: graceful failures, stale-wiring cleanup (#12), and a Livewire 3 rendering fix (#26).
- Routes: fixed locale-prefix stacking on routeable collection saves (#11).
- Blocks: tolerate unresolvable resource values in
hydrateProps(#17). - Navigation: tolerate a routeable with no route (#23) and a missing
mainnavigation (#25).
v2.2.6
2026-06-05
Bugfix: Analytics dashboard now wraps its view in an unconditional root element. A conditional root broke Livewire 3 root detection and left the dashboard stuck on its loading skeleton.
v2.2.5
2026-05-27
Bugfix: Initialise nested fields for inline-array repeatable fieldsets.
v2.2.4
2026-05-26
Bugfix: Completed the incomplete Nitrous to Racerfish\Evolve namespace migration (#10).
v2.2.3
2026-05-24
MCP: New write tools: add-block-to-page, add-child-block, delete-block, delete-page (#9).
v2.2.2
2026-05-22
Fix: MCP module enabled by default and laravel/mcp bundled as a package dependency (#8).
v2.2.1
2026-05-08
Bugfix: Backported the remaining v1 fixes from the pre-monorepo package repos (#6).
v2.2.0
2026-05-06
New
- Health check cleanup (#3): config toggles per check, results DB pruning, a Health Checks settings tab with Oh Dear configuration, and native
wire:confirmdialogs. - Publishable Claude Code starter templates (#4): CLAUDE.md, blueprint skill, and MCP config for greenfield projects.
Fixes
- Theme: guard the Shopify cart on the module toggle instead of the config domain, and defer Shopify component resolution to runtime (#2).
- PHP 8.4 compatibility fixes.
- Company module integration cleanup (#5).
v2.1.2
2026-04-21
Bugfix: Fixed the deploy_exclude.txt fallback path for the monorepo layout.
v2.1.1
2026-04-09
Bugfix: Ensure route path uniqueness on update and improve path regeneration.
v2.1.0
2026-03-29
Minor release.
- Module toggle system. Modules can be enabled and disabled per installation.
- MCP server module. Exposes CMS content to AI agents over the Model Context Protocol.
- AI Chatbot module. Built on
laravel/ai ^0.4, which requires Laravel 12.
v2.0.2
2026-03-28
Bugfix: Fixed Livewire 3 backend layouts. @livewireScriptConfig was incorrectly used as a replacement for @livewireScripts, but it only outputs config JSON and suppresses auto-injection of livewire.js (which bundles Alpine.js). Replaced with FrontendAssets::scripts() and FrontendAssets::styles() calls in all three backend layouts (app.blade.php, blank.blade.php, guest.blade.php).
v2.0.1
2026-03-22
Bugfix: Fixed spatie/laravel-permission v6 middleware namespace (Middlewares to Middleware) causing BindingResolutionException for RoleMiddleware.
v2.0.0
2026-03-22
Major release combining three changes. Published under the git tag v2.0.
Monorepo
All 11 packages (core, blog, company, devtools, event, faq, locator, project, scout24, shopify, theme) consolidated into a single racerfish/evolve package. One composer require, one version, one update command.
Livewire 3 Migration
Full migration from Livewire 2 to 3 across all packages:
$this->emit()replaced with$this->dispatch()using named parameterswire:model.deferreplaced withwire:model(deferred by default in LW3)wire:submit.preventreplaced withwire:submit@entangle().deferreplaced with@entangle()#[Url]and#[Computed]attributes replace$queryStringand computed property methodslegacy_model_binding => truerequired inconfig/livewire.php
Laravel 11
Framework upgrade from Laravel 10 to 11:
laravel/framework ^11.0,nunomaduro/collision ^8.0,nunomaduro/larastan ^3.0- Carbon 3:
formatLocalized()replaced withisoFormat()and ICU date format strings spatie/laravel-permission ^6.0,spatie/laravel-query-builder ^6.0livewire:assetspublish script removed frompost-autoload-dump
Breaking Changes
- Requires PHP 8.3+
- Requires
legacy_model_binding => trueinconfig/livewire.php - Published Livewire components must update namespace from
App\Http\LivewiretoApp\Livewire - Theme layouts must replace
@livewireStyles/@livewireScriptswithFrontendAssetscalls slince/shopify-api-phpremoved (abandoned)- Date format strings in lang files changed from strftime (
%d. %B %Y) to ICU (DD. MMMM YYYY)
See the full upgrade guide for step-by-step instructions.
v1.99
2026-03-22
Last pre-Livewire 3 release. Monorepo structure with all packages consolidated, but running Livewire 2 and Laravel 10. Available for clients that cannot upgrade their frontend to LW3.
Install: composer require racerfish/evolve:v1.99