pushery/wirekit
WireKit is a free, open-source UI component library for Laravel Livewire. Build dashboards and marketing pages with Tailwind CSS v4 and Alpine.js using clean, themeable, accessible components with dark mode support and no utility-class soup.
composer require pushery/wirekit
<head>
@wirekitStyles
@vite(['resources/css/app.css', 'resources/js/app.js'])
</head>
<body>
{{ $slot }}
@wirekitScripts
</body>
resources/css/app.css:
@source '../../vendor/pushery/wirekit/resources/views/**/*.blade.php';
php artisan wirekit:verify
Replace a basic Livewire form with WireKit components:
<x-wirekit::form wire:submit="save">
<x-wirekit::field label="Email" name="email">
<x-wirekit::input type="email" wire:model="email" />
</x-wirekit::field>
<x-wirekit::button type="submit" intent="primary">Save</x-wirekit::button>
</x-wirekit::form>
Categorical Usage:
<x-wirekit::input>, <x-wirekit::select>, <x-wirekit::button><x-wirekit::container>, <x-wirekit::grid>, <x-wirekit::section><x-wirekit::modal>, <x-wirekit::dropdown>, <x-wirekit::alert-dialog><x-wirekit::table>, <x-wirekit::card>, <x-wirekit::stat>Slot-Based Composition:
<x-wirekit::card>
<x-slot:header>
<x-wirekit::heading>Title</x-wirekit::heading>
</x-slot:header>
<x-slot:body>
<x-wirekit::text>Content</x-wirekit::text>
</x-slot:body>
</x-wirekit::card>
Livewire Integration:
wire:model on form inputs:
<x-wirekit::input wire:model="email" />
<x-wirekit::range-slider>, declare array properties:
public array $priceRange = ['min' => 20, 'max' => 80];
<x-wirekit::range-slider wire:model="priceRange" />
Theming:
Override CSS variables in app.css:
@layer base {
:root {
--color-wk-accent: var(--color-blue-600);
}
}
CLI Workflows:
php artisan wirekit:make page:dashboard
php artisan wirekit:component my-button --base=button
php artisan wirekit:export-json
Orphaned Overlay Triggers:
<x-wirekit::modal.trigger> outside <x-wirekit::modal> causes silent failures.<x-wirekit::modal>
<x-slot:trigger>
<x-wirekit::button>Open</x-wirekit::button>
</x-slot:trigger>
</x-wirekit::modal>
Livewire Model Binding:
<x-wirekit::range-slider> requires array properties for wire:model (e.g., $priceRange = ['min' => X, 'max' => Y]).Dark Mode:
dark: classes to WireKit components breaks auto-switching..dark class; avoid dark: prefixes.Icon Usage:
class="h-N w-N" on <x-wirekit::icon> overrides the size prop.size="sm|md|lg|xl" props instead.Chart Re-rendering:
<x-wirekit::chart> re-creates instances on every data change, causing flickering.$wire->set() for updates and debounce triggers:
$this->dispatch('chart-update', data: $newData)->unless($this->chartData === $newData);
Verify Installation:
php artisan wirekit:verify
@wirekitStyles/@wirekitScripts and Blade source paths.Inspect Components:
php artisan wirekit:show button
Component List:
php artisan wirekit:list
Schema Export:
php artisan wirekit:export-json
Custom Components: Fork existing components:
php artisan wirekit:component my-custom-button --base=button
resources/views/vendor/wirekit/.Theming Presets: Apply pre-built themes:
php artisan wirekit:theme cupertino
Icon Presets: Publish additional icon sets:
php artisan wirekit:publish-icons lucide --force
Liquid Glass Extension: Enable experimental glassmorphism effects:
php artisan wirekit:glass install
Recipes: Scaffold complex layouts:
php artisan wirekit:make recipe:marketing-landing-page
How can I help you explore Laravel packages today?