> ## 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 — the official starter template for packages

> Initial research into laravel/package-skeleton. An official starter template that collects Laravel package development best practices. Includes Pest, Larastan, Pint, Workbench, and GitHub Actions CI in a batteries-included setup.

<Info>
  This article is based on source-code research. The repository is under development as of July 2026.
</Info>

## What is Laravel Package Skeleton?

[Laravel Package Skeleton](https://github.com/laravel/package-skeleton) is a starter template for creating Laravel packages.

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

Running `composer install` automatically launches an interactive configuration script (`configure.php`) that lets you set the package name, vendor name, namespace, and which features to include, question by question. Once configured, you can start development immediately.

```mermaid theme={null}
graph TD
    A["Use this template<br>on GitHub"] --> B["composer install"]
    B --> C["configure.php runs automatically"]
    C --> D{"Interactive configuration"}
    D --> E["Package name, vendor, namespace"]
    D --> F["Select features to use"]
    E --> G["Configuration complete"]
    F --> G
    G --> H["Verify with composer test"]
```

## Why this skeleton exists

If you start building a Laravel package "your own way," a lot of time is spent on things unrelated to the package logic itself: test environment setup, static analysis, code formatting, GitHub Actions configuration, and so on.

Laravel Package Skeleton consolidates the best practices the Laravel team uses in real package development into a single template. It lets you skip environment setup and jump straight to implementing package logic.

## Included tools

| Tool                                                     | Role                          |
| -------------------------------------------------------- | ----------------------------- |
| [Pest](https://pestphp.com/)                             | Test framework                |
| [Larastan](https://github.com/larastan/larastan)         | Laravel-aware static analysis |
| [Pint](https://laravel.com/docs/pint)                    | Code formatter                |
| [Orchestra Testbench](https://packages.tools/testbench/) | Package testing environment   |
| Workbench                                                | End-to-end development app    |

## Configurable package features

The `composer install` prompt lets you select only the features you need. Scaffolding for unselected features is removed.

| Feature      | Description                            |
| ------------ | -------------------------------------- |
| Config file  | Adds a configuration file to `config/` |
| Routes       | Adds a routes file                     |
| Views        | Adds Blade views                       |
| Translations | Adds language files                    |
| Migrations   | Adds migration files                   |
| Assets       | Adds public assets                     |
| Commands     | Adds Artisan commands                  |
| Facade       | Adds a facade class                    |
| Boost Skill  | Adds an AI agent skill                 |

## Configurable tools

Similarly, tools can be toggled on/off per project.

| Tool            | Description                             |
| --------------- | --------------------------------------- |
| Dependabot      | Automated dependency update PRs         |
| Issue Template  | GitHub Issue templates                  |
| Changelog       | Auto-updates `CHANGELOG.md` on release  |
| Funding         | GitHub Sponsors sponsor links           |
| Security Policy | Security vulnerability reporting policy |

## Setup flow

<Steps>
  <Step title="Create a repository from the template">
    Click the **Use this template** button on GitHub to create a new repository, or clone directly.

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

  <Step title="Install dependencies">
    Running `composer install` automatically launches `configure.php`.

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

    To run the script manually, use the `--no-scripts` option.

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

  <Step title="Answer the prompts">
    Configure the following items via prompts:

    * Author Name / Email
    * Vendor name (e.g. `kawax`)
    * Package name (e.g. `my-package`)
    * Package description
    * Class name (e.g. `MyPackage`)
    * Multi-select for which features to use
    * Multi-select for which tools to use
    * Auto-create a GitHub repository (if the `gh` CLI is authenticated)
  </Step>

  <Step title="Verify it works">
    ```bash theme={null}
    composer test
    ```

    Runs PHPStan → Pint → type coverage → Pest in sequence.
  </Step>

  <Step title="End-to-end testing with Workbench">
    ```bash theme={null}
    composer serve
    ```

    A minimal Laravel app for verifying the package starts at `http://localhost:8000`.
  </Step>
</Steps>

## Non-interactive mode

For setups from CI or scripts, use the `--no-interaction` flag.

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

Specifying feature flags includes only those features. Omitting the flags includes all features.

## GitHub Actions CI

The bundled `tests.yml` is a matrix build that runs tests across multiple PHP versions, Laravel versions, and OSes.

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

What each job runs:

1. **PHPStan** (`composer analyse`) — static analysis
2. **Pint** (`composer lint:check`) — style check
3. **Type coverage** (`composer test:types`) — verify 100% type coverage (Ubuntu only)
4. **Pest** (`composer test:unit`) — unit tests (Ubuntu only)

## Changelog automation

`update-changelog.yml` is triggered by GitHub Releases and auto-updates `CHANGELOG.md`. `release.yml` classifies changes by PR label and generates release notes.

Release note labels:

| Label            | Category                  |
| ---------------- | ------------------------- |
| `breaking`       | Breaking changes          |
| `enhancement`    | New features              |
| `bug`            | Bug fixes                 |
| `documentation`  | Documentation             |
| `dependencies`   | Dependencies              |
| `maintenance`    | Maintenance               |
| `skip-changelog` | Not included in changelog |

## What configure.php does

`configure.php` is a one-shot bootstrap script. It's deleted after execution.

```mermaid theme={null}
graph LR
    A["Run configure.php"] --> B["Replace placeholders<br>:vendor_slug/:package_slug<br>:author_name, etc."]
    B --> C["Delete unused feature files"]
    C --> D["Rename README_PACKAGE.md → README.md<br>AGENTS_PACKAGE.md → AGENTS.md"]
    D --> E["Symlink CLAUDE.md to AGENTS.md<br>Symlink .claude to .agents"]
    E --> F["Delete the script itself"]
```

## Recommended GitHub setup after installation

Recommended post-install settings from the README:

* **Manually review Dependabot PRs** — auto-merge workflows are not included
* **Create release note labels** — `breaking`, `enhancement`, `bug`, `documentation`, `dependencies`, `maintenance`, `skip-changelog`, `duplicate`
* **Configure `main` branch protection** — because changelog automation commits to `CHANGELOG.md` via GitHub Actions, branch protection rules need to be adjusted

No additional repository secrets are needed. The included workflows use the built-in `GITHUB_TOKEN`.

## Current development status

* **GitHub repository**: [laravel/package-skeleton](https://github.com/laravel/package-skeleton)
* **Publication timing**: July 2026 (actively developed)
* **Note**: because it's early in development, the API and structure may change

If you're starting a new Laravel package, it's better to begin from this template than to assemble your own skeleton from scratch. It packs in the best practices the Laravel team has developed over years of package work.

<Card title="laravel/package-skeleton repository" icon="github" href="https://github.com/laravel/package-skeleton">
  Source code and latest updates.
</Card>

<Card title="Package development official docs" icon="book-open" href="https://laravel.com/docs/packages">
  See the official documentation for the basics of Laravel package development.
</Card>


## Related topics

- [Creating a Laravel Starter Kit](/en/advanced/starter-kit-creation.md)
- [Migration Guide: Old Structure to Slim Application Skeleton](/en/advanced/app-structure-migration.md)
- [Tutorial - Laravel Console Starter](/en/packages/laravel-console-starter/tutorial.md)
- [Laravel Chisel — a post-install script library for starter kits](/en/blog/chisel-introduction.md)
- [Laravel Maestro — the starter kit orchestrator](/en/blog/maestro-introduction.md)
