Tooling for Livewire 4 component development. Helps with reactive UI creation, testing, and managing wire directives.
Install
mkdir -p .claude/skills/livewire-development && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/2026" && unzip -o skill.zip -d .claude/skills/livewire-development && rm skill.zipInstalls to .claude/skills/livewire-development
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Develops reactive Livewire 4 components. Activates when creating, updating, or modifying Livewire components; working with wire:model, wire:click, wire:loading, or any wire: directives; adding real-time updates, loading states, or reactivity; debugging component behavior; writing Livewire tests; or when the user mentions Livewire, component, counter, or reactive UI.Key capabilities
- →Create Livewire 4 components in SFC or MFC formats
- →Implement real-time reactivity with wire directives
- →Convert between class-based and single-file components
- →Write component tests using Livewire testing utilities
- →Manage async actions and loading states
How it works
It utilizes Livewire 4 specific directives and architecture to build reactive UI components, providing commands for scaffolding and conversion.
Inputs & outputs
When to use livewire-development
- →Create a new Livewire component
- →Convert a class-based component to single-file
- →Implement real-time loading states
- →Write a component test in Livewire 4
About this skill
Livewire Development
When to Apply
Activate this skill when:
- Creating or modifying Livewire components
- Using wire: directives (model, click, loading, sort, intersect)
- Implementing islands or async actions
- Writing Livewire component tests
Documentation
Use search-docs for detailed Livewire 4 patterns and documentation.
Basic Usage
Creating Components
<code-snippet name="Component Creation Commands" lang="bash">Single-file component (default in v4)
{{ $assist->artisanCommand('make:livewire create-post') }}
Multi-file component
{{ $assist->artisanCommand('make:livewire create-post --mfc') }}
Class-based component (v3 style)
{{ $assist->artisanCommand('make:livewire create-post --class') }}
With namespace
{{ $assist->artisanCommand('make:livewire Posts/CreatePost') }}
</code-snippet>Converting Between Formats
Use php artisan livewire:convert create-post to convert between single-file, multi-file, and class-based formats.
Component Format Reference
| Format | Flag | Structure |
|---|---|---|
| Single-file (SFC) | default | PHP + Blade in one file |
| Multi-file (MFC) | --mfc | Separate PHP class, Blade, JS, tests |
| Class-based | --class | Traditional v3 style class |
| View-based | ⚡ prefix | Blade-only with functional state |
Single-File Component Example
<code-snippet name="Single-File Component Example" lang="php"> <?php use Livewire\Component; new class extends Component { public int $count = 0; public function increment(): void { $this->count++; } } ?> <div> <button wire:click="increment">Count: @{{ $count }}</button> </div> </code-snippet>Livewire 4 Specifics
Key Changes From Livewire 3
These things changed in Livewire 4, but may not have been updated in this application. Verify this application's setup to ensure you follow existing conventions.
- Use
Route::livewire()for full-page components; config keys renamed:layout→component_layout,lazy_placeholder→component_placeholder. wire:modelnow ignores child events by default (usewire:model.deepfor old behavior);wire:scrollrenamed towire:navigate:scroll.- Component tags must be properly closed;
wire:transitionnow uses View Transitions API (modifiers removed). - JavaScript:
$wire.$js('name', fn)→$wire.$js.name = fn;commit/requesthooks →interceptMessage()/interceptRequest().
New Features
- Component formats: single-file (SFC), multi-file (MFC), view-based components.
- Islands (
@island) for isolated updates; async actions (wire:click.async,#[Async]) for parallel execution. - Deferred/bundled loading:
defer,lazy.bundlefor optimized component loading.
| Feature | Usage | Purpose |
|---|---|---|
| Islands | @island(name: 'stats') | Isolated update regions |
| Async | wire:click.async or #[Async] | Non-blocking actions |
| Deferred | defer attribute | Load after page render |
| Bundled | lazy.bundle | Load multiple together |
New Directives
wire:sort,wire:intersect,wire:ref,.renderless,.preserve-scrollare available for use.data-loadingattribute automatically added to elements triggering network requests.
| Directive | Purpose |
|---|---|
wire:sort | Drag-and-drop sorting |
wire:intersect | Viewport intersection detection |
wire:ref | Element references for JS |
.renderless | Component without rendering |
.preserve-scroll | Preserve scroll position |
Best Practices
- Always use
wire:keyin loops - Use
wire:loadingfor loading states - Use
wire:model.livefor instant updates (default is debounced) - Validate and authorize in actions (treat like HTTP requests)
Configuration
smart_wire_keysdefaults totrue; new configs:component_locations,component_namespaces,make_command,csp_safe.
Alpine & JavaScript
wire:transitionuses browser View Transitions API;$errorsand$interceptmagic properties available.- Non-blocking
wire:polland parallelwire:model.liveupdates improve performance.
For interceptors and hooks, see reference/javascript-hooks.md.
Testing
<code-snippet name="Testing Example" lang="php">Livewire::test(Counter::class) ->assertSet('count', 0) ->call('increment') ->assertSet('count', 1);
</code-snippet>Verification
- Browser console: Check for JS errors
- Network tab: Verify Livewire requests return 200
- Ensure
wire:keyon all@foreachloops
Common Pitfalls
- Missing
wire:keyin loops → unexpected re-rendering - Expecting
wire:modelreal-time → usewire:model.live - Unclosed component tags → syntax errors in v4
- Using deprecated config keys or JS hooks
- Including Alpine.js separately (already bundled in Livewire 4)
When not to use it
- →When working with non-Livewire frameworks
Limitations
- →Requires Livewire 4 environment
- →Does not support legacy Livewire 3 features without migration
How it compares
It provides framework-specific guidance for Livewire 4, including new features like islands and async actions that generic UI tools lack.
Compared to similar skills
livewire-development side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| livewire-development (this skill) | 25 | 6mo | No flags | Intermediate |
| e2e | 0 | 1mo | Caution | Intermediate |
| wp-testing-core | 6 | 9mo | Review | Intermediate |
| woocommerce-backend-dev | 7 | 3mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by spatie
View all by spatie →You might also like
e2e
wp-media
Run E2E smoke tests (basic) or full acceptance + regression suite (extended).
wp-testing-core
mikkelkrogsholm
Core WordPress testing procedures and patterns for browser-based plugin testing. Use when testing WordPress plugins, logging into WordPress admin, verifying plugin activation, or navigating WordPress UI.
woocommerce-backend-dev
woocommerce
Add or modify WooCommerce backend PHP code following project conventions. Use when creating new classes, methods, hooks, or modifying existing backend code. **MUST be invoked before writing any PHP unit tests.**
php-testing
HoangNguyen0403
Unit and integration testing standards for PHP applications.
woocommerce-dev-cycle
woocommerce
Run tests, linting, and quality checks for WooCommerce development. Use when running tests, fixing code style, or following the development workflow.
woocommerce-email-editor
woocommerce
Setup and develop the WooCommerce block email editor. Use when working on email templates, transactional emails, or the email editor feature.