> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Cómo crear un starter kit de Laravel

> Flujo práctico para crear un starter kit de Laravel, publicarlo en Packagist y mantenerlo al día ante las actualizaciones de Laravel y del frontend.

## Introducción

Un starter kit es un proyecto plantilla que se despliega con `create-project` cuando ejecutas `laravel new`. Los starter kits oficiales de Laravel 13 son cuatro (React / Vue / Svelte / Livewire) e incluyen autenticación y la UI inicial.

Cuando creas un starter kit propio, el proceso es el mismo: partes de una aplicación Laravel, la preparas y la publicas como un paquete de Composer.

* Documentación oficial: [Starter Kits](https://laravel.com/docs/starter-kits)
* Ejemplo oficial: [laravel/react-starter-kit](https://github.com/laravel/react-starter-kit)
* Página de referencia: [Laravel Console Starter](/es/packages/laravel-console-starter/index)

## Crear el starter kit

### Inicializar el proyecto Laravel

Crea un proyecto Laravel base y limpia el código de ejemplo innecesario. Después, asigna un nombre de paquete único en el `name` de `composer.json`.

```json theme={null}
{
    "name": "example/starter-kit",
    "type": "project",
    "require": {
        "php": "^8.3",
        "laravel/framework": "^13.0"
    }
}
```

Este `name` es el identificador que se usará después con `laravel new my-app --using=example/starter-kit`.

### Configura los scripts de composer.json

Cuando el usuario ejecute `laravel new`, se usarán los Composer scripts del starter kit como flujo de inicialización. Como mínimo, deja preparados `post-root-package-install` y `post-create-project-cmd`.

```json theme={null}
"scripts": {
    "post-root-package-install": [
        "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
        "@php artisan key:generate --ansi",
        "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"",
        "@php artisan migrate --graceful --ansi"
    ]
}
```

Este ejemplo está basado en el [composer.json de laravel/react-starter-kit](https://github.com/laravel/react-starter-kit/blob/main/composer.json). Si tu kit usa base de datos, puedes reutilizarlo tal cual.

### Controla los archivos distribuidos con .gitattributes

Con `export-ignore` puedes excluir archivos que quieres tener en el repositorio del starter kit pero que no debería recibir el proyecto del usuario.

```gitattributes theme={null}
LICENSE export-ignore
composer.lock export-ignore
README.md export-ignore
```

Para más detalle, mira el [ejemplo oficial de .gitattributes](https://github.com/laravel/react-starter-kit/blob/main/.gitattributes).

## Registro en Packagist

Para que los usuarios puedan usar `--using`, hay que registrar el paquete en Packagist.

<Steps>
  <Step title="Prepara un repositorio público en GitHub">
    Publícalo alineando el `name` de `composer.json` con la URL del repositorio.
  </Step>

  <Step title="Regístralo en Packagist">
    Registra el repositorio en [Packagist](https://packagist.org/). Tras la publicación, `example/starter-kit` será resoluble.
  </Step>

  <Step title="Documenta el comando de uso en el README">
    Añade para los usuarios el siguiente comando de instalación.

    ```bash theme={null}
    laravel new my-app --using=example/starter-kit
    ```
  </Step>
</Steps>

## Flujo del comando laravel new

El `NewCommand` de `laravel/installer` cambia el destino de `create-project` cuando se especifica un starter kit y ejecuta secuencialmente los comandos de inicialización.

```mermaid theme={null}
flowchart TD
    A["laravel new my-app --using=example/starter-kit"] --> B["Determina el paquete con getStarterKit()"]
    B --> C["composer create-project example/starter-kit my-app"]
    C --> D["composer run post-root-package-install -d my-app"]
    D --> E["Inicialización: artisan key:generate, etc."]
    E --> F["Si procede, ejecuta migrate / npm install"]
```

Lugares interesantes en [NewCommand.php](https://github.com/laravel/installer/blob/master/src/NewCommand.php):

* [Definición de la opción --using](https://github.com/laravel/installer/blob/958a4e7c1386199a63d3c5e49a18b2e5c2ad1600/src/NewCommand.php#L119)
* [Ejecución de `create-project` y `post-root-package-install`](https://github.com/laravel/installer/blob/958a4e7c1386199a63d3c5e49a18b2e5c2ad1600/src/NewCommand.php#L521-L569)
* [Implementación de `getStarterKit()`](https://github.com/laravel/installer/blob/958a4e7c1386199a63d3c5e49a18b2e5c2ad1600/src/NewCommand.php#L1237-L1255)

## Elección de framework frontend

Los starter kits oficiales de Laravel 13 ofrecen React / Vue / Svelte / Livewire, pero tu starter kit propio no tiene por qué ceñirse a esa lista. Elige libremente CSS, librería de componentes y método de autenticación según tu objetivo.

| Opción                                    | Composición principal                                | Cuándo encaja                                                  |
| ----------------------------------------- | ---------------------------------------------------- | -------------------------------------------------------------- |
| React / Vue / Svelte / Livewire oficiales | Configuración oficial con Inertia 3 o Livewire 4     | Cuando quieres ofrecer una experiencia cercana a la oficial.   |
| Frontend propio                           | CSS y librería de componentes a elección             | Cuando quieres usar un design system o base CSS propios.       |
| Kit Blade sencillo                        | Centrado en Blade con mínimas dependencias front     | Cuando buscas un arranque ligero y rápido.                     |
| Kit de autenticación propio               | No obligado a Fortify (p. ej. centrado en Socialite) | Cuando te especializas en un método de autenticación concreto. |

<Info>
  Es habitual que los starter kits de la comunidad usen bases CSS distintas a la oficial. Tampoco es obligatorio partir de Fortify: diseña la autenticación según tus requisitos.
</Info>

## Mantenimiento de versiones

Un starter kit no acaba «al terminar de crearlo». Debe evolucionar con Laravel y PHP.

### Adaptación a nuevas versiones de Laravel/PHP

Actualiza primero los requisitos en `composer.json` y verifica la compatibilidad en CI.

```json theme={null}
"require": {
    "php": "^8.3",
    "laravel/framework": "^13.0"
}
```

En una versión mayor de Laravel, revisa a la vez `laravel/framework` y las dependencias colindantes.

### Actualización periódica de dependencias

Las dependencias del frontend cambian rápido, así que es seguro tener una tarea mensual de actualización.

* Tailwind
* Librerías de componentes (shadcn/ui, shadcn-vue, shadcn-svelte, Flux UI)
* Paquetes relacionados con Inertia / Livewire

### Tests de compatibilidad

Incluye al menos estas comprobaciones en CI:

* Que `composer install` funciona.
* Que `php artisan test` pasa.
* Que `npm install && npm run build` termina correctamente.

## Buenas prácticas

* **Fija el `name` cuanto antes**: cambiarlo después de publicar en Packagist es costoso.
* **Basa los scripts en el ejemplo oficial**: si rompes el flujo de inicialización, aumentan los problemas de instalación.
* **Configura `.gitattributes` desde el principio**: reduce el ruido en las plantillas distribuidas.
* **Automatiza las actualizaciones**: monta una operativa que te permita seguir a Laravel de inmediato tras cada release.
* **Lee guías relacionadas**: leer [Fundamentos del desarrollo de paquetes](/es/advanced/package-development) y [Gestión de la compatibilidad de versiones de paquetes](/es/advanced/package-versioning) hace que tu diseño sea más estable.


## Related topics

- [Laravel PAO — Herramienta de optimización de salida para agentes de IA](/es/blog/pao-introduction.md)
- [Construir una SPA con Inertia.js](/es/blog/inertia-introduction.md)
- [Laravel Maestro — Orquestador de desarrollo de starter kits](/es/blog/maestro-introduction.md)
- [Laravel Chisel — Biblioteca de scripts de post-instalación para starter kits](/es/blog/chisel-introduction.md)
- [Starter kits](/es/starter-kits.md)
