Skip to content

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 serve boots 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, lastmod derives from real content changes, placeholder priority/changefreq dropped.
  • Deployment: destructive Envoy tasks (database:up, media:up, env:up) require target-name confirmation and write timestamped safety backups first.
  • Portability: MySQL-only FIELD() and REGEXP usage 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 productType in 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/mcp widened to ^0.6 || ^0.7 || ^0.8.

v2.3.1

2026-06-21

  • MCP: allow laravel/mcp ^0.7 and ^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 .env structure 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 main navigation (#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:confirm dialogs.
  • 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 parameters
  • wire:model.defer replaced with wire:model (deferred by default in LW3)
  • wire:submit.prevent replaced with wire:submit
  • @entangle().defer replaced with @entangle()
  • #[Url] and #[Computed] attributes replace $queryString and computed property methods
  • legacy_model_binding => true required in config/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 with isoFormat() and ICU date format strings
  • spatie/laravel-permission ^6.0, spatie/laravel-query-builder ^6.0
  • livewire:assets publish script removed from post-autoload-dump

Breaking Changes

  • Requires PHP 8.3+
  • Requires legacy_model_binding => true in config/livewire.php
  • Published Livewire components must update namespace from App\Http\Livewire to App\Livewire
  • Theme layouts must replace @livewireStyles / @livewireScripts with FrontendAssets calls
  • slince/shopify-api-php removed (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