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

# Laravel Package Skeleton — Plantilla oficial para paquetes

> Investigación inicial de laravel/package-skeleton. Plantilla oficial que reúne las mejores prácticas para desarrollar paquetes de Laravel. Configuración completa que incluye Pest, Larastan, Pint, Workbench y CI de GitHub Actions.

<Info>
  Este artículo se basa en la investigación del código fuente. A fecha de julio de 2026 es un repositorio en desarrollo.
</Info>

## ¿Qué es Laravel Package Skeleton?

[Laravel Package Skeleton](https://github.com/laravel/package-skeleton) es una plantilla de inicio para crear paquetes de Laravel.

```bash theme={null}
git clone https://github.com/laravel/package-skeleton.git my-package
cd my-package
composer install
```

Al ejecutar `composer install`, se lanza automáticamente el script de configuración interactivo (`configure.php`), que te pregunta uno a uno el nombre del paquete, el vendor, el namespace y las funcionalidades a utilizar. Al terminar la configuración, ya puedes empezar a desarrollar de inmediato.

```mermaid theme={null}
graph TD
    A["En GitHub<br>Use this template"] --> B["composer install"]
    B --> C["Se ejecuta configure.php"]
    C --> D{"Configuración interactiva"}
    D --> E["Nombre del paquete, vendor, namespace"]
    D --> F["Selección de funcionalidades"]
    E --> G["Configuración completa"]
    F --> G
    G --> H["Comprobación con composer test"]
```

## ¿Por qué es necesario este skeleton?

Si empiezas a crear un paquete de Laravel "a tu manera", pasarás mucho tiempo en tareas ajenas a la lógica del propio paquete: preparar el entorno de tests, análisis estático, formateo de código, configuración de GitHub Actions, etc.

Laravel Package Skeleton reúne en una única plantilla las mejores prácticas que utiliza el equipo de Laravel en el desarrollo real de paquetes. Con la plantilla te saltas el "montaje del entorno" y puedes empezar directamente por la implementación de la lógica del paquete.

## Herramientas incluidas

| Herramienta                                              | Rol                            |
| -------------------------------------------------------- | ------------------------------ |
| [Pest](https://pestphp.com/)                             | Framework de testing           |
| [Larastan](https://github.com/larastan/larastan)         | Análisis estático para Laravel |
| [Pint](https://laravel.com/docs/pint)                    | Formateador de código          |
| [Orchestra Testbench](https://packages.tools/testbench/) | Entorno de tests para paquetes |
| Workbench                                                | App para desarrollo end-to-end |

## Funcionalidades configurables

En el prompt de `composer install` puedes elegir solo las funcionalidades que necesites. Los scaffolds de funcionalidades no seleccionadas se eliminan.

| Funcionalidad | Descripción                                 |
| ------------- | ------------------------------------------- |
| Config file   | Añade archivo de configuración en `config/` |
| Routes        | Añade archivos de rutas                     |
| Views         | Añade vistas Blade                          |
| Translations  | Añade archivos de idioma                    |
| Migrations    | Añade archivos de migración                 |
| Assets        | Añade assets públicos                       |
| Commands      | Añade comandos Artisan                      |
| Facade        | Añade una clase facade                      |
| Boost Skill   | Añade una skill para agentes de IA          |

## Herramientas configurables

Al igual que con las funcionalidades, puedes activar o desactivar herramientas según el proyecto.

| Herramienta     | Descripción                                          |
| --------------- | ---------------------------------------------------- |
| Dependabot      | PR de actualización automática de dependencias       |
| Issue Template  | Plantillas de issues de GitHub                       |
| Changelog       | Actualización automática de CHANGELOG.md en releases |
| Funding         | Enlaces de patrocinio de GitHub Sponsors             |
| Security Policy | Política de reporte de vulnerabilidades de seguridad |

## Flujo de configuración

<Steps>
  <Step title="Crea el repositorio desde la plantilla">
    Pulsa el botón **Use this template** en GitHub para crear un nuevo repositorio, o clónalo directamente.

    ```bash theme={null}
    git clone https://github.com/laravel/package-skeleton.git my-package
    cd my-package
    ```
  </Step>

  <Step title="Instala las dependencias">
    Al ejecutar `composer install`, se lanza `configure.php` automáticamente.

    ```bash theme={null}
    composer install
    ```

    Si quieres ejecutar el script manualmente, usa la opción `--no-scripts`.

    ```bash theme={null}
    composer install --no-scripts
    php configure.php
    ```
  </Step>

  <Step title="Responde al prompt">
    Se configuran uno a uno los siguientes puntos.

    * Author Name / Email
    * Nombre del vendor (p. ej. `kawax`)
    * Nombre del paquete (p. ej. `my-package`)
    * Descripción del paquete
    * Nombre de la clase (p. ej. `MyPackage`)
    * Multi-select de funcionalidades
    * Multi-select de herramientas
    * Creación automática del repositorio de GitHub (si el CLI `gh` está autenticado)
  </Step>

  <Step title="Comprobación del funcionamiento">
    ```bash theme={null}
    composer test
    ```

    Ejecuta todas las comprobaciones en orden: PHPStan → Pint → cobertura de tipos → Pest.
  </Step>

  <Step title="Test end-to-end con Workbench">
    ```bash theme={null}
    composer serve
    ```

    En `http://localhost:8000` arranca una app Laravel sencilla para verificar el paquete.
  </Step>
</Steps>

## Modo no interactivo

Si configuras desde CI o desde un script, usa la flag `--no-interaction`.

```bash theme={null}
php configure.php --no-interaction --config --routes
```

Al indicar flags de funcionalidad, solo se incluyen las funcionalidades indicadas. Si omites las flags, se incluyen todas las funcionalidades.

## CI con GitHub Actions

El `tests.yml` incluido en el skeleton es un build matricial que ejecuta los tests con combinaciones de múltiples versiones de PHP, Laravel y OS.

```yaml theme={null}
matrix:
  os: [ubuntu-latest, windows-latest]
  php: [8.3, 8.4, 8.5]
  laravel: [12.*, 13.*]
  stability: [prefer-lowest, prefer-stable]
```

Contenido que se ejecuta en cada job:

1. **PHPStan** (`composer analyse`): análisis estático
2. **Pint** (`composer lint:check`): comprobación de estilo
3. **Cobertura de tipos** (`composer test:types`): comprobación de cobertura de tipos al 100 % (solo Ubuntu)
4. **Pest** (`composer test:unit`): tests unitarios (solo Ubuntu)

## Automatización del Changelog

`update-changelog.yml` actualiza automáticamente `CHANGELOG.md` cuando se dispara una GitHub Release. En `release.yml` se generan release notes clasificadas por etiquetas de PR.

Etiquetas de release notes:

| Etiqueta         | Clasificación              |
| ---------------- | -------------------------- |
| `breaking`       | Cambios disruptivos        |
| `enhancement`    | Nuevas funcionalidades     |
| `bug`            | Corrección de bugs         |
| `documentation`  | Documentación              |
| `dependencies`   | Dependencias               |
| `maintenance`    | Mantenimiento              |
| `skip-changelog` | No incluir en el changelog |

## Lo que hace configure.php

`configure.php` es un script de configuración que actúa como bootstrap y se ejecuta una única vez. Tras su ejecución se elimina.

```mermaid theme={null}
graph LR
    A["Ejecutar configure.php"] --> B["Sustituir placeholders<br>:vendor_slug/:package_slug<br>:author_name, etc."]
    B --> C["Eliminar archivos de funcionalidades no usadas"]
    C --> D["README_PACKAGE.md → README.md<br>AGENTS_PACKAGE.md → AGENTS.md"]
    D --> E["Enlazar CLAUDE.md a AGENTS.md<br>Enlazar .claude a .agents"]
    E --> F["Eliminar el propio script"]
```

## Configuración de GitHub tras la instalación

Configuraciones recomendadas tras la instalación indicadas en el README:

* **Revisar manualmente los PR de Dependabot**: no se incluye workflow de merge automático
* **Crear etiquetas de release notes**: `breaking`, `enhancement`, `bug`, `documentation`, `dependencies`, `maintenance`, `skip-changelog`, `duplicate`
* **Configurar la protección de la rama `main`**: como la automatización del Changelog hace que GitHub Actions comitee en `CHANGELOG.md`, hay que ajustar las reglas de protección de rama

No se necesitan secrets adicionales en el repositorio. Los workflows incluidos usan el `GITHUB_TOKEN` integrado de GitHub.

## Estado actual de desarrollo

* **Repositorio de GitHub**: [laravel/package-skeleton](https://github.com/laravel/package-skeleton)
* **Fecha de publicación**: julio de 2026 (en desarrollo activo)
* **Nota**: al estar en fase inicial de desarrollo, la API y la estructura pueden cambiar

Si estás a punto de crear un paquete de Laravel, mejor que montar tu propio skeleton desde cero, empieza a partir de esta plantilla. Contiene las mejores prácticas que el equipo de Laravel ha ido acumulando durante años de desarrollo de paquetes.

<Card title="Repositorio laravel/package-skeleton" icon="github" href="https://github.com/laravel/package-skeleton">
  Aquí puedes ver el código fuente y la información más reciente.
</Card>

<Card title="Documentación oficial de desarrollo de paquetes" icon="book-open" href="https://laravel.com/docs/packages">
  Para los fundamentos del desarrollo de paquetes de Laravel, consulta la documentación oficial.
</Card>


## Related topics

- [Introducción a React — Fundamentos para usarlo con Inertia × Laravel](/es/blog/react-introduction.md)
- [Cómo crear un starter kit de Laravel](/es/advanced/starter-kit-creation.md)
- [Introducción a Vue.js — Fundamentos para usarlo con Inertia × Laravel](/es/blog/vue-introduction.md)
- [Instalación](/es/installation.md)
- [Plantillas Blade](/es/blade.md)
