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

# cpx 2.0 — Der Composer Package Executor wird vollständig neu geschrieben

> Einführung in laravel/cpx: ein Tool, mit dem sich Composer-Pakete – ähnlich wie mit npx – ohne Installation ausführen lassen. In v2.0 wurde es als eigenständige PHAR komplett neu geschrieben und um Funktionen wie bevorzugte Ausführung lokaler Binaries, Gist-Ausführung und Aliasse erweitert.

<Info>
  Dieser Artikel basiert auf der README.md und UPGRADE.md von [laravel/cpx](https://github.com/laravel/cpx). Er bezieht sich auf den Stand von v2.0.0 (veröffentlicht am 24. Juli 2026).
</Info>

## Was ist cpx?

[cpx](https://github.com/laravel/cpx) ist ein Tool, mit dem sich in Composer-Paketen enthaltene Befehle ausführen lassen, ohne sie zu installieren. Am einfachsten lässt es sich als das Composer-Pendant zu `npx` aus der npm-Welt beschreiben.

```bash theme={null}
composer global require cpx/cpx
cpx friendsofphp/php-cs-fixer fix ./src
```

Intern installiert cpx die Pakete in ein isoliertes Verzeichnis und führt sie von dort aus. Dadurch entstehen keine Konflikte mit Composer-Abhängigkeiten im Projekt oder in der globalen Installation. Ab dem zweiten Aufruf wird dieselbe Installation wiederverwendet, was die Ausführung beschleunigt.

## Warum wird das benötigt?

Die Installation einzelner Tools über `composer global require` bringt folgende Probleme mit sich:

* Globale Abhängigkeiten kollidieren miteinander (besonders häufig bei Tools mit gemeinsamen Abhängigkeiten wie `nikic/php-parser` oder `symfony/console`).
* Wechsel zwischen unterschiedlichen Versionen desselben Tools je nach Projekt.
* Im Dauerbetrieb wird das Aktualisieren globaler Pakete oft vergessen.
* Einmalig benötigte Tools sollen nicht global installiert werden.

cpx selbst ist als eigenständige PHAR ausgelegt und hat zur Laufzeit keine Composer-Abhängigkeiten. Auch eine globale Installation verursacht daher keine Konflikte.

## Vollständige Neuimplementierung in v2.0

cpx wurde in v2.0 vollständig neu geschrieben und wird jetzt als **eigenständige PHAR** ausgeliefert. Die grundlegende Verwendung (`cpx <package-name> <command> [arguments]`) und das Cache-Verzeichnis `~/.cpx` bleiben unverändert. Die Entwicklung von 1.x ist eingestellt; es wird keine weiteren Releases geben – auch keine Bugfixes oder Sicherheitsupdates.

Für das Upgrade genügt eine erneute globale Installation.

```bash theme={null}
composer global require cpx/cpx:^2.0
```

v2.0 erfordert PHP 8.3 oder höher.

## Neue Funktionen in v2.0

### Bevorzugte Ausführung lokaler Binaries

Analog zu npx wird eine bereits im Projekt installierte Binary bevorzugt ausgeführt, bevor eine isolierte Kopie installiert wird. cpx sucht vom aktuellen Verzeichnis aufwärts nach dem nächstgelegenen Composer-Projekt und führt die passende Binary in `vendor/bin` (das Standard-`bin-dir`) aus.

```bash theme={null}
cpx pint                 # Führt vendor/bin/pint aus, falls vorhanden
cpx phpunit --filter=Foo # Führt vendor/bin/phpunit aus, falls vorhanden
cpx laravel/pint:^2.0    # Nutzt die lokale Version nur, wenn sie den Constraint erfüllt
```

Wenn Sie eine isolierte Kopie erzwingen möchten, verwenden Sie `--skip-local`.

```bash theme={null}
cpx --skip-local laravel/pint --version
```

### Direkte Ausführung eines lokalen Paketverzeichnisses

Sie können ein in Entwicklung befindliches Paketverzeichnis direkt angeben, um dessen Binary auszuführen.

```bash theme={null}
cpx /absolute/path/to/package --version
cpx ../path/to/package --version
```

Das Zielverzeichnis muss eine gültige `composer.json` enthalten, und die Abhängigkeiten müssen zuvor in `vendor/autoload.php` installiert worden sein. cpx führt in diesem Fall weder Composer aus noch kopiert oder cached es das Paket.

### cpx exec und cpx tinker

Für die schnelle Ausführung von PHP-Code stehen mehrere Möglichkeiten zur Verfügung.

| Befehl                | Beschreibung                                                       |
| --------------------- | ------------------------------------------------------------------ |
| `cpx exec <file.php>` | Führt eine PHP-Datei aus (der einzige Weg, eine Datei auszuführen) |
| `cpx exec -r <code>`  | Führt PHP-Code direkt aus                                          |
| `cpx exec <gist url>` | Lädt einen GitHub-Gist herunter und führt ihn aus                  |
| `cpx tinker`          | Öffnet eine interaktive REPL                                       |

Innerhalb eines Laravel-Projekts bootet `cpx exec` die Anwendung vollständig einschließlich Config, Facades und `.env` (`$app` steht zur Verfügung), während `cpx tinker` das projekteigene `php artisan tinker` ausführt (sofern `laravel/tinker` installiert ist). Außerhalb wird eine PsySH-Shell gestartet.

Innerhalb von Skripten können Pakete mit `cpx_require('vendor/package')` (in 1.x hieß es `composer_require()`) direkt autoloadbar gemacht werden.

### Aliase

Damit Sie sich keine langen Paketnamen merken müssen, können Sie eigene Kürzel definieren.

```bash theme={null}
cpx alias laravel/pint pint
cpx aliases      # Liste der definierten Aliase
cpx unalias pint # Alias entfernen
```

Die in 1.x eingebaute Liste populärer Paket-Aliase wurde entfernt; falls Sie sie benötigen, müssen Sie diese selbst definieren.

### Nicht-interaktiver Modus und JSON-Ausgabe

cpx erkennt nicht-interaktive Umgebungen automatisch über [laravel/agent-detector](https://github.com/laravel/agent-detector) (Erkennung von KI-Agenten), Umleitung der Standardeingabe sowie die Flags `--no-interaction`/`-n`. Im nicht-interaktiven Modus geben Managementbefehle wie `installed`, `aliases`, `alias`, `unalias`, `clean` und `update` anstelle von formatiertem Text eine einzeilige JSON-Antwort zurück. Auch von einem interaktiven Terminal aus erhalten Sie dieselbe Ausgabe, indem Sie `--json` übergeben.

## Wichtige Änderungen gegenüber v1.x (Befehle)

| 1.x                                        | 2.x                                                                    |
| ------------------------------------------ | ---------------------------------------------------------------------- |
| `cpx list` (Liste installierter Pakete)    | Zu `cpx installed` geändert (`list` zeigt die Befehlsliste an)         |
| Eingebaute Alias-Liste                     | Entfernt. Selbst definieren mit `cpx alias`                            |
| `cpx check` / `cpx format` / `cpx test`    | Entfernt. Direkte Ausführung wie `cpx pint`, `cpx phpstan`, `cpx pest` |
| `cpx version` / `-v`                       | Entfernt. Verwenden Sie `cpx --version`                                |
| `cpx script.php` (direkte Dateiausführung) | Entfernt. `cpx exec script.php` erforderlich                           |
| `composer_require()`                       | Zu `cpx_require()` umbenannt                                           |

## Verwandte Seiten

Cache und ältere Paketversionen im Verzeichnis `~/.cpx` werden automatisch in das neue Format migriert. Pakete, die mit Versions-Constraints ausgeführt wurden, werden unter neuen Verzeichnisnamen verwaltet und daher nur einmalig neu installiert. Nicht mehr benötigte Kopien aus der 1.x-Ära können Sie mit `cpx clean` entfernen.

<Card title="laravel/cpx Repository" icon="github" href="https://github.com/laravel/cpx">
  Quellcode und aktuelle README hier.
</Card>

<Card title="cpx 2.0 Upgrade-Guide" icon="arrow-up" href="https://github.com/laravel/cpx/blob/main/UPGRADE.md">
  Detaillierte Migrationsschritte von 1.x zu 2.x.
</Card>


## Related topics

- [Interne Struktur der automatischen Paket-Erkennung](/de/advanced/package-discovery.md)
- [Laravels neues Ökosystem zur Code-Analyse – surveyor / ranger / roster](/de/blog/laravel-ecosystem-analysis.md)
- [Laravel Sentinel – Analyse der Route-Schutz-Middleware](/de/blog/sentinel-introduction.md)
- [FAQ zur neuen App-Struktur ab Laravel 11](/de/advanced/app-structure-faq.md)
- [PHP, Composer und Node.js mit WSL installieren (Windows)](/de/blog/windows-setup.md)
