PHPackages                             sbuerk/packwright - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [CLI &amp; Console](/categories/cli)
4. /
5. sbuerk/packwright

ActiveProject[CLI &amp; Console](/categories/cli)

sbuerk/packwright
=================

packwright — a PHP CLI tool for Composer package version handling and release publishing, with optional TYPO3 ext\_emconf.php support

00PHPCI passing

Since May 2Pushed 3mo agoCompare

[ Source](https://github.com/sbuerk/packwright)[ Packagist](https://packagist.org/packages/sbuerk/packwright)[ RSS](/packages/sbuerk-packwright/feed)WikiDiscussions main Synced 2w ago

READMEChangelogDependenciesVersions (1)Used By (0)

packwright
==========

[](#packwright)

> The wright that crafts your package releases.

`packwright` is a PHP command-line tool for managing Composer package releases. It is designed to cover:

- version updates across `composer.json` sub-keys and any other files that need to stay in sync,
- release publishing with pre-release, release, and post-release hooks,
- monorepository workflows where sub-packages are split out at release time,
- semver bump suggestions (patch / minor / major) that you can accept or override,
- manual and development releases, and
- TYPO3-specific `ext_emconf.php` files (optional, for projects that need it).

For everyday use the binary also installs as **`pkw`** — same tool, fewer keystrokes (`P`ac`K` `W`right). Both names are interchangeable.

About the name
--------------

[](#about-the-name)

A *wright* is an old English word for a craftsman or maker, preserved today in compound nouns like *shipwright*, *playwright*, and *wheelwright*. `packwright` is the wright that crafts your *pack*age releases: it knows how to read, validate, and update the files that describe a package, so a release goes out the way you intended.

The 3-character alias `pkw` is the initials of the full name and is designed to stay out of the way of common Linux/PHP CLI binaries — it does not collide with `pkg`, `pw`, `pwn`, or the PipeWire `pw-*`family.

Status
------

[](#status)

Early development. The following `ext_emconf.php` commands are functional today; the broader Composer release workflow is on the roadmap.

- `extemconf:validate` — validate one or more `ext_emconf.php` files.
- `extemconf:normalize` — normalize and rewrite files (drops deprecated keys, fills mandatory defaults).
- `extemconf:get` — read selected scalar fields (table or JSON).
- `extemconf:set` — set one or more scalar fields with up-front validation.
- `extemconf:constraints:set` — add or update an entry under `constraints.{depends|suggests|conflicts}` with cross-key collision detection. Pass `--update-only` to skip files where the key is not already present (idempotent batch updates).
- `extemconf:constraints:unset` — remove an entry from `constraints.{depends|suggests|conflicts}` (idempotent).

See [`docs/ext-emconf-commands.md`](docs/ext-emconf-commands.md) for the full command reference, including JSON output shapes and exit code semantics.

Requirements
------------

[](#requirements)

- PHP 8.2+

Installation
------------

[](#installation)

### Standalone PHAR

[](#standalone-phar)

Download a `packwright` (or `pkw`) PHAR build, make it executable, and place it on your `PATH`:

```
chmod +x packwright
mv packwright /usr/local/bin/   # or wherever your local bin lives
```

Both binaries are shipped from the same build (byte-identical contents); pick the name you prefer, or install both.

### Composer dependency

[](#composer-dependency)

```
composer require --dev sbuerk/packwright
```

After install, both `vendor/bin/packwright` and `vendor/bin/pkw` are available.

Usage
-----

[](#usage)

List all available commands:

```
packwright list
# or, identically:
pkw list
```

Validate, normalize, inspect, or edit a TYPO3 extension's `ext_emconf.php`:

```
packwright extemconf:validate path/to/ext_emconf.php
packwright extemconf:normalize path/to/ext_emconf.php
packwright extemconf:get path/to/ext_emconf.php --field=version
packwright extemconf:set path/to/ext_emconf.php --ext-version=2.0.0 --state=stable
packwright extemconf:constraints:set depends typo3 path/to/ext_emconf.php \
    --constraint='13.4.0-13.4.99'
packwright extemconf:constraints:unset depends php path/to/ext_emconf.php
```

Use `--fail-on-warning` with `extemconf:validate` to also fail on `WARNING`-state files (useful in CI). All mutating commands accept `--dry-run` and `--json`.

Contributing
------------

[](#contributing)

See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, the test suite, and build instructions.

###  Health Score

18

—

LowBetter than 7% of packages

Maintenance54

Moderate activity, may be stable

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity12

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1453466?v=4)[Stefan Bürk](/maintainers/sbuerk)[@sbuerk](https://github.com/sbuerk)

---

Top Contributors

[![sbuerk](https://avatars.githubusercontent.com/u/1453466?v=4)](https://github.com/sbuerk "sbuerk (85 commits)")

### Embed Badge

![Health badge](/badges/sbuerk-packwright/health.svg)

```
[![Health](https://phpackages.com/badges/sbuerk-packwright/health.svg)](https://phpackages.com/packages/sbuerk-packwright)
```

###  Alternatives

[illuminate/console

The Illuminate Console package.

13046.6M7.3k](/packages/illuminate-console)[styleci/cli

The CLI tool for StyleCI

71477.7k9](/packages/styleci-cli)[winbox/args

Windows command-line formatter

20722.5k21](/packages/winbox-args)[mallardduck/laravel-traits

A collection of useful Laravel snippets in the form of easy to use traits.

136.2k2](/packages/mallardduck-laravel-traits)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
