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

# Ein Laravel-Starter-Kit erstellen

> Ein praxisorientierter Workflow zum Erstellen eines Laravel-Starter-Kits, dessen Veröffentlichung auf Packagist und der laufenden Anpassung an Laravel- und Frontend-Aktualisierungen.

## Einleitung

Ein Starter-Kit ist ein Projekt-Template, das beim Erstellen einer Anwendung mit `laravel new` per `create-project` ausgerollt wird. Die offiziellen Starter-Kits von Laravel 13 gibt es in den vier Varianten React, Vue, Svelte und Livewire und enthalten Authentifizierung sowie ein initiales UI.

Wenn Sie ein eigenes Starter-Kit erstellen, funktioniert es genauso: Sie richten eine Laravel-Anwendung als Basis ein und veröffentlichen sie als Composer-Paket.

* Offizielle Dokumentation: [Starter Kits](https://laravel.com/docs/starter-kits)
* Offizielle Referenzimplementierung: [laravel/react-starter-kit](https://github.com/laravel/react-starter-kit)
* Zugehörige Seite: [Laravel Console Starter](/de/packages/laravel-console-starter/index)

## Ein Starter-Kit erstellen

### Ein Laravel-Projekt initialisieren

Erstellen Sie zunächst das Laravel-Projekt, das als Template dienen soll, und räumen Sie überflüssigen Beispielcode auf. Vergeben Sie anschließend in der `composer.json` unter `name` einen eindeutigen Paketnamen.

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

Dieser `name` ist der Bezeichner, den Sie später bei `laravel new my-app --using=example/starter-kit` verwenden.

### Die scripts in composer.json konfigurieren

Nach der Ausführung von `laravel new` werden die Composer-Scripts des Starter-Kits für die Initialisierung verwendet. Bereiten Sie mindestens `post-root-package-install` und `post-create-project-cmd` vor.

```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"
    ]
}
```

Dieses Beispiel basiert auf der [composer.json von laravel/react-starter-kit](https://github.com/laravel/react-starter-kit/blob/main/composer.json). Wenn Sie eine Datenbank verwenden, können Sie es unverändert übernehmen.

### Verteilung über .gitattributes steuern

Dateien, die zwar im Starter-Kit-Repository liegen sollen, aber nicht in das generierte Projekt der Nutzer gehören, schließen Sie mit `export-ignore` aus.

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

Details finden Sie im [offiziellen .gitattributes-Beispiel](https://github.com/laravel/react-starter-kit/blob/main/.gitattributes).

## Auf Packagist veröffentlichen

Damit Nutzer Ihr Kit über `--using` verwenden können, muss es auf Packagist registriert sein.

<Steps>
  <Step title="Öffentliches GitHub-Repository vorbereiten">
    Stellen Sie sicher, dass der `name` in `composer.json` und die Repository-URL zueinander passen, und veröffentlichen Sie das Repository.
  </Step>

  <Step title="Auf Packagist registrieren">
    Registrieren Sie das Repository auf [Packagist](https://packagist.org/). Danach ist `example/starter-kit` auflösbar.
  </Step>

  <Step title="Nutzungsbefehl in der README dokumentieren">
    Führen Sie folgenden Einführungs-Befehl für Nutzer auf.

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

## Ablauf des Befehls `laravel new`

Der `NewCommand` in `laravel/installer` wechselt bei Angabe eines Starter-Kits das Ziel von `create-project` und führt die Initialisierungsbefehle der Reihe nach aus.

```mermaid theme={null}
flowchart TD
    A["laravel new my-app --using=example/starter-kit"] --> B["Paketname über getStarterKit() bestimmen"]
    B --> C["composer create-project example/starter-kit my-app"]
    C --> D["composer run post-root-package-install -d my-app"]
    D --> E["Initialisierung wie artisan key:generate"]
    E --> F["Bei Bedarf migrate / npm install ausführen"]
```

Interessante Stellen in [NewCommand.php](https://github.com/laravel/installer/blob/master/src/NewCommand.php):

* [Definition der Option --using](https://github.com/laravel/installer/blob/958a4e7c1386199a63d3c5e49a18b2e5c2ad1600/src/NewCommand.php#L119)
* [Aufruf von `create-project` und `post-root-package-install`](https://github.com/laravel/installer/blob/958a4e7c1386199a63d3c5e49a18b2e5c2ad1600/src/NewCommand.php#L521-L569)
* [Implementierung von `getStarterKit()`](https://github.com/laravel/installer/blob/958a4e7c1386199a63d3c5e49a18b2e5c2ad1600/src/NewCommand.php#L1237-L1255)

## Wahl des Frontend-Frameworks

Die offiziellen Starter-Kits von Laravel 13 bieten React, Vue, Svelte und Livewire. Ihr eigenes Starter-Kit muss sich aber nicht daran orientieren. Sie können CSS, Component Library und Authentifizierungsverfahren frei nach Ziel wählen.

| Option                                      | Wesentliche Bausteine                                    | Geeignet für                                                               |
| ------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------------------------- |
| Offizielles React / Vue / Svelte / Livewire | Offizieller Aufbau mit Inertia 3 oder Livewire 4         | Sie wollen eine offiziellsnahe Entwicklererfahrung anbieten                |
| Eigenes Frontend                            | Beliebige CSS- oder Component-Library                    | Sie wollen ein bestehendes Design-System oder eine andere CSS-Basis nutzen |
| Schlankes Blade-Kit                         | Blade-zentriert mit minimalen Frontend-Abhängigkeiten    | Sie wollen einen leichtgewichtigen Aufbau schnell bereitstellen            |
| Eigenes Auth-Kit                            | Nicht auf Fortify beschränkt (z. B. Socialite-zentriert) | Sie wollen auf ein bestimmtes Authentifizierungsverfahren fokussieren      |

<Info>
  Community-Starter-Kits setzen üblicherweise andere CSS-Grundlagen als die offiziellen ein. Machen Sie auch bei der Authentifizierung Fortify nicht zur Pflichtannahme, sondern entwerfen Sie sie passend zu Ihren Anforderungen.
</Info>

## Wartung bei Versionsaktualisierungen

Ein Starter-Kit ist nicht mit dem Erstellen erledigt. Es muss den Aktualisierungen von Laravel und PHP fortlaufend folgen.

### Umgang mit Laravel- und PHP-Upgrades

Aktualisieren Sie zunächst die Anforderungen in `composer.json` und prüfen Sie die Kompatibilität in der CI.

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

Prüfen Sie bei Laravel-Major-Upgrades gleichzeitig `laravel/framework` und die umliegenden Abhängigkeiten.

### Regelmäßige Aktualisierung der Abhängigkeiten

Frontend-Abhängigkeiten ändern sich schnell — es ist sicherer, monatlich einen Update-Task einzuplanen.

* Tailwind
* Component Libraries (shadcn/ui, shadcn-vue, shadcn-svelte, Flux UI)
* Inertia- / Livewire-bezogene Pakete

### Kompatibilitätstests

Mindestens diese Prüfungen sollten Teil Ihrer CI sein:

* `composer install` läuft erfolgreich durch.
* `php artisan test` besteht.
* `npm install && npm run build` läuft erfolgreich durch.

## Best Practices

* **Legen Sie den `name` früh fest**: Änderungen nach der Packagist-Veröffentlichung sind teuer.
* **Orientieren Sie die scripts an den offiziellen Beispielen**: Ein zerbrochener Initialisierungsfluss führt häufig zu fehlgeschlagenen Installationen.
* **Bereiten Sie `.gitattributes` gleich zu Beginn auf**: So reduzieren Sie Störmüll bei der Template-Verteilung.
* **Institutionalisieren Sie Upgrades**: Etablieren Sie einen Betriebsablauf, der Laravel-Releases zeitnah nachzieht.
* **Lesen Sie ergänzende Guides**: [Grundlagen der Paketentwicklung](/de/advanced/package-development) und [Versionskompatibilität von Paketen verwalten](/de/advanced/package-versioning) machen Ihr Design stabiler.


## Related topics

- [Laravel Fortify und Starter-Kits](/de/advanced/fortify.md)
- [Starter Kits](/de/starter-kits.md)
- [Tutorial - Laravel Console Starter](/de/packages/laravel-console-starter/tutorial.md)
- [Einführung in die Authentifizierung](/de/authentication.md)
- [Laravel Maestro – Orchestrator für die Entwicklung von Starterkits](/de/blog/maestro-introduction.md)
