Skip to content

Upgrade to Filament 4/5, Laravel 12/13 and PHP 8.3+ - #28

Open
jyrkidn wants to merge 3 commits into
masterfrom
feature/laravel-13-filament-5
Open

Upgrade to Filament 4/5, Laravel 12/13 and PHP 8.3+#28
jyrkidn wants to merge 3 commits into
masterfrom
feature/laravel-13-filament-5

Conversation

@jyrkidn

@jyrkidn jyrkidn commented Aug 21, 2026

Copy link
Copy Markdown
Member

Summary

Brings the package to the current wotz stack: Filament ^4|^5, Laravel 12/13, PHP 8.3+ (tested on 8.5), Livewire 4, Pest 4, and renames it to wotz/filament-form-architect for the move to the wotzebra organisation. All 8 tests pass on PHP 8.5.8 / Laravel 13.26 / Filament 5.7.6, and PHPStan (larastan 3, level 4) is clean.

Package rename (org move)

  • Codedor\FormArchitectWotz\FormArchitect throughout src, tests, config, database and docs.
  • composer name codedor/filament-form-architectwotz/filament-form-architect; homepage, issue templates and branding point at the wotzebra org. CHANGELOG history left untouched.

Dependencies

  • All codedor/* deps swapped for their wotz/* successors: filament-architect ^3, laravel-livewire-forms ^5, filament-mail-templates ^2, filament-translatable-strings ^3, laravel-locale-collection ^2, and filament-translatable-tabs ^3 + filament-media-library ^4 now declared explicitly (both were used directly but only pulled in transitively before).
  • awcodes/filament-tiptap-editor replaced by Filament's native RichEditor (Tiptap-based since v4). The checkbox-tiptap-profile config key became checkbox-toolbar-buttons (array of toolbar buttons).
  • guava/filament-drafts dropped: it has no Filament 4/5 release and was an unused dependency — only referenced in the test TestCase, never in src/.
  • maatwebsite/excel ^4.0 (required by translatable-strings v3; v3.1 caps below PHP 8.5).

Code

  • Resources migrated to the schema API: form(Schema $schema), infolist(Schema $schema), components(), Filament\Schemas\Components\{Grid,Section}, unified Filament\Actions\*, recordActions()/toolbarActions(), Filament\Schemas\Components\Utilities\Get.
  • HasTranslations page trait removed from Create/Edit pages — translatable-tabs v3 handles translations in the schema lifecycle.
  • TranslatableTabs::persistInQueryString(false)persistTabInQueryString(null).
  • RenderedForm is now null-safe when mounted without a form (previously fataled on the non-nullable anonymous-class constructor).

Tests / tooling

  • TestCase provider order matters now: Filament 5's SupportServiceProvider re-binds Livewire's DataStore to DataStoreOverride via a transient bind(), which drops Livewire's instance() binding if Livewire registers first — every store() call then gets a fresh store and validation error bags break (ViewErrorBag::put(): Argument #2 must be MessageBag, null given). LivewireServiceProvider is now registered after the Filament providers, mirroring production package-discovery (alphabetical) order.
  • phpunit.xml.dist refreshed for PHPUnit 12 (the old 10.3-schema <coverage> block made Pest exit 1 silently without a coverage driver).
  • Pest 4, testbench ^10|^11, larastan ^3, collision ^8; removed retired PHPStan options.
  • CI: test matrix PHP 8.3/8.4/8.5 × Laravel 12/13; PHPStan job on PHP 8.4.
  • UPGRADING.md documents the v1 → v2 steps for consuming projects.

Breaking changes for consumers

See UPGRADING.md — new package name wotz/filament-form-architect, namespace swap to Wotz\FormArchitect (and Wotz\* for direct references to the underlying packages), RichEditor config key rename, and the dropped drafts dependency.

Vue renderer: dropped

The Vue 2 renderer (@codedor/form-architect npm, repo codedor/cod519) targets the old laravel-form-architect data shape and will not get a Vue 3 version. Public-site rendering happens through this package's Livewire RenderedForm component; the npm package can be deprecated and cod519 archived once consumers have migrated.

Release/infra checklist (outside this PR)

  • Transfer the repo to the wotzebra org (GitHub redirects old URLs).
  • Submit wotz/filament-form-architect to Packagist and mark codedor/filament-form-architect as abandoned with the new name as replacement.
  • Tag as v2.0.0.

- Swap codedor/* dependencies for their wotz/* successors
  (filament-architect v3, laravel-livewire-forms v5, filament-mail-templates v2,
  filament-translatable-strings v3, filament-translatable-tabs v3,
  laravel-locale-collection v2, filament-media-library v4)
- Replace awcodes/filament-tiptap-editor with Filament's native RichEditor
  (checkbox-tiptap-profile config renamed to checkbox-toolbar-buttons)
- Drop unused guava/filament-drafts dependency (blocked Filament 4/5, only
  referenced in the test TestCase)
- Migrate resources to the Filament 4/5 schema API (Schema signatures,
  unified Filament\Actions namespace, recordActions/toolbarActions)
- Remove the removed HasTranslations page trait (translatable-tabs v3 handles
  translations in the schema lifecycle)
- Make RenderedForm null-safe when mounted without a form
- Register LivewireServiceProvider after the Filament providers in tests, so
  Livewire's DataStore instance binding wins over Filament's DataStoreOverride
  bind (mirrors production package discovery order)
- Pest 4 / PHPUnit 12 / larastan 3 / testbench 10-11; refresh phpunit.xml.dist
  and phpstan config; CI matrix to PHP 8.3-8.5 x Laravel 12-13
- Codedor\FormArchitect namespace becomes Wotz\FormArchitect
- composer name codedor/filament-form-architect -> wotz/filament-form-architect
- Repo/branding references point to the wotzebra organisation
- UPGRADING.md documents the rename for consuming projects
The page's $record property was never assigned in mount() and the typed
property blew up on direct visits to the submissions index. Assign the
optionally-bound record and only scope the query when one is present.

Claude-Session: https://claude.ai/code/session_01RiAkKQ4ZMzoRPkTms5Bi1i
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant