Guía paso a paso para dejar listo tu entorno local y crear tu primer componente con UI.
1) Requisitos y versión mínima
PHP 8.2+, extensiones: Ctype, cURL, DOM, Fileinfo, Filter, Hash, Mbstring, OpenSSL, PCRE, PDO, Session, Tokenizer, XML.
Composer 2+, Node.js (o Bun).
Laravel 12 introduce starter kits oficiales también para Livewire (además de React/Vue). Útil si luego quieres scaffolding de auth.
Si te faltan PHP/Composer, la doc oficial ofrece instaladores rápidos por SO y el Laravel Installer.
2) Crear el proyecto Laravel 12
Opción A — Laravel Installer
composer global require laravel/installer laravel new blog-livewire-mary cd blog-livewire-mary
El instalador puede preguntarte por DB, pruebas y starter kit; puedes iniciar sin kit para usar maryUI sin colisiones, y más tarde integrar auth.
Opción B — Composer (si no usas el Installer)
composer create-project laravel/laravel blog-livewire-mary "^12.0" cd blog-livewire-mary
3) Configuración inicial de entorno
Copia el
y genera APP_KEY:.env
cp .env.example .env php artisan key:generate
Base de datos
Laravel 12 arranca por defecto con SQLite ya preparado. Si prefieres MySQL/PostgreSQL, ajusta en
:.env
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=blog_livewire_mary DB_USERNAME=usuario DB_PASSWORD=secret
Luego:
php artisan migrate
(La doc explica SQLite por defecto y cómo cambiar a MySQL/Postgres).
Zona horaria e idioma
En
:config/app.php
'timezone' => 'America/Mexico_City', 'locale' => 'es', 'faker_locale' => 'es_MX',
Enlaces de storage
php artisan storage:link
4) Instalar Tailwind CSS 4 con Vite en Laravel 12
Tailwind 4 simplificó la instalación usando el plugin de Vite:
Instala dependencias:
npm i -D tailwindcss @tailwindcss/vite
Agrega el plugin en
:vite.config.ts
import { defineConfig } from 'vite' import laravel from 'laravel-vite-plugin' import tailwindcss from '@tailwindcss/vite' export default defineConfig({ plugins: [ laravel({ input: ['resources/css/app.css', 'resources/js/app.js'], refresh: true, }), tailwindcss(), ], })
Importa Tailwind y define fuentes de análisis en
:resources/css/app.css
@import 'tailwindcss'; /* Rutas que Tailwind debe escanear (v4 usa @source en CSS) */ @source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; @source '../../storage/framework/views/*.php'; @source '../**/*.blade.php'; @source '../**/*.js';
Incluye el CSS en tu layout (Blade):
@vite('resources/css/app.css')
Levanta el build en desarrollo:
npm run dev
(Guía oficial Tailwind para Laravel v4).
5) Instalar Livewire 3
composer require livewire/livewire
Livewire inyecta sus assets automáticamente cuando detecta componentes. Si quieres control manual, en tu layout añade:
@livewireStyles ... @livewireScripts
(Instalación y notas oficiales).
Tip: En Nginx muy personalizado podrías ver 404 en
. La guía documenta cómo resolverlo (endpoints o bundling manual)./livewire/livewire.js
6) Instalar maryUI (UI para Livewire basada en DaisyUI + Tailwind)
composer require robsontenorio/mary php artisan mary:install # luego arranca el dev server de Vite si no está corriendo npm run dev # o yarn dev
maryUI no trae CSS propio: se apoya en DaisyUI + Tailwind (lo que hace el instalador es “enchufar” todo y publicar config si corresponde).
Si usas Breeze/Jetstream/FluxUI, el instalador puede publicar
con un prefijo global para evitar choque de nombres; ej.config/mary.php
,x-mary-button
.x-mary-cardSi notas glitches, prueba remover
.@tailwindcss/forms
(Todo esto está en su página de instalación).
Cambiar prefijo global (opcional):
php artisan vendor:publish --tag mary.config php artisan view:clear
En
config/mary.php:'prefix' => 'mary-', // así usarás <x-mary-button />, etc.
7) Crea el layout base (Blade)
resources/views/layouts/app.blade.php<!doctype html> <html lang="es" data-theme="light"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>{{ $title ?? config('app.name') }}</title> @vite(['resources/css/app.css', 'resources/js/app.js']) @livewireStyles </head> <body class="min-h-dvh bg-base-200 text-base-content"> <div class="container mx-auto px-4 py-6"> {{ $slot }} </div> @livewireScripts </body> </html>
maryUI utiliza clases de DaisyUI y Tailwind. El atributo
te permite alternar temas (puedes añadir un toggler luego).data-theme
8) Tu primer componente Livewire + maryUI
Genera el componente:
php artisan make:livewire Contador
Lógica
:app/Livewire/Contador.php
<?php namespace App\Livewire; use Livewire\Component; class Contador extends Component { public int $valor = 0; public function inc() { $this->valor++; } public function dec() { $this->valor--; } public function render() { return view('livewire.contador'); } }
Vista
resources/views/livewire/contador.blade.php
(Usando maryUI: botón, card y badge)
<x-card class="max-w-md mx-auto"> <x-slot:heading> <x-badge>Demo Livewire + maryUI</x-badge> </x-slot:heading> <div class="flex items-center justify-center gap-4 py-4"> <x-button icon="minus" wire:click="dec" /> <span class="text-3xl font-bold">{{ $valor }}</span> <x-button icon="plus" wire:click="inc" /> </div> <x-slot:footer> <x-alert icon="info"> Este es tu primer componente con acciones reactivas. </x-alert> </x-slot:footer> </x-card>
Si publicaste el prefijo en
comoconfig/mary.php, cambia las etiquetas amary-,<x-mary-card>, etc.<x-mary-button>
Ruta y página para verlo
:routes/web.php
use Illuminate\Support\Facades\Route; use App\Livewire\Contador; Route::get('/', Contador::class);
Abre
http://localhost:8000.9) Servidores locales y script de desarrollo “todo en uno”
En Laravel 12 puedes usar un script que enciende servidor HTTP, Vite y el queue worker en conjunto (según doc de instalación).
Desde el folder del proyecto:
npm install && npm run build composer run dev
(Ver secciones de Creating an Application / Initial Configuration).
Alternativas de entorno: Herd (macOS/Windows) integra PHP, Nginx y DBs con UI; útil si no quieres configurar cada servicio manualmente.
10) Ajustes útiles para desarrollo
Mail local: usa
(simple) o Mailpit/SMTP local.MAIL_MAILER=logColas: pon
y ejecutaQUEUE_CONNECTION=database
.php artisan queue:table && php artisan migrateLogs y debug:
solo en local.APP_DEBUG=trueCache rutas/config/vistas (producción):
php artisan optimize # o granular: php artisan config:cache php artisan route:cache php artisan view:cache
(Optimizaciones de despliegue).
11) Despliegue (muy breve)
Sirve public/ como raíz del sitio.
Nginx típico (fastcgi a PHP 8.2) y permisos de
ystorage
.bootstrap/cache
12) Problemas frecuentes (y cómo resolverlos)
No se aplican estilos → confirma
, que@vite('resources/css/app.css')
esté activo y que Tailwind v4 esté configurado connpm run dev
y las directivas@tailwindcss/vite
en@source
.app.cssChoque de componentes con otro kit (Breeze/Jetstream/FluxUI) → usa el prefijo de maryUI (ej.
) o retira plugins conflictivos comomary-
.@tailwindcss/forms404 en
con Nginx custom → ver sección de instalación de Livewire y ajustar endpoint o bundling ESM./livewire/livewire.js
13) Siguiente paso sugerido
Si necesitas auth lista: usa el Starter Kit de Livewire para Laravel 12 y luego reemplaza/convive UI con maryUI (si hay colisiones, activa el prefijo).