PHPackages                             hpbxxtr/composer-upgrade-interactive - 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. hpbxxtr/composer-upgrade-interactive

ActiveComposer-plugin[CLI &amp; Console](/categories/cli)

hpbxxtr/composer-upgrade-interactive
====================================

Interactive TUI for selectively upgrading Composer dependencies (yarn upgrade-interactive for PHP)

v0.3.0(1mo ago)527↓60%[1 PRs](https://github.com/hpbxxtr/composer-upgrade-interactive/pulls)MITPHPPHP ^8.3CI passing

Since Mar 27Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/hpbxxtr/composer-upgrade-interactive)[ Packagist](https://packagist.org/packages/hpbxxtr/composer-upgrade-interactive)[ Docs](https://github.com/hpbxxtr/composer-upgrade-interactive)[ RSS](/packages/hpbxxtr-composer-upgrade-interactive/feed)WikiDiscussions dev/0.3 Synced 3w ago

READMEChangelog (3)Dependencies (44)Versions (12)Used By (0)

[![composer upgrade-interactive](./.readme/composer_hui.png)](./.readme/composer_hui.png)

[![Packagist Version](https://camo.githubusercontent.com/422d4b70eb19de0d65e82e9988799f1e05dc7d3f04e48d7bd9d524b7fca5af7a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f687062787874722f636f6d706f7365722d757067726164652d696e7465726163746976653f7374796c653d666c61742d737175617265266c6f676f3d7061636b6167697374266c6f676f436f6c6f723d666630306666266c6162656c436f6c6f723d30643064316126636f6c6f723d666630306666)](https://packagist.org/packages/hpbxxtr/composer-upgrade-interactive)[![PHP](https://camo.githubusercontent.com/90b569b183def9fc36383c3cfdc417888a301559edc0aeaf3c4f61473ae49175/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253545382e332d3430653566663f7374796c653d666c61742d737175617265266c6f676f3d706870266c6f676f436f6c6f723d343065356666266c6162656c436f6c6f723d306430643161)](https://www.php.net)[![License](https://camo.githubusercontent.com/a8c32efb1b72a8131bb44c6a5638dea0e39d2c08efdfe7f3b83f87e00cea8eee/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f687062787874722f636f6d706f7365722d757067726164652d696e7465726163746976653f7374796c653d666c61742d737175617265266c6f676f3d676974687562266c6f676f436f6c6f723d626630306666266c6162656c436f6c6f723d30643064316126636f6c6f723d626630306666)](LICENSE)[![Codecov](https://camo.githubusercontent.com/07fbedd035e7937607b8376464b993c2c51559af4455f9a6f1fce30b0b6c60b2/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f687062787874722f636f6d706f7365722d757067726164652d696e7465726163746976653f7374796c653d666c61742d737175617265266c6f676f3d636f6465636f76266c6f676f436f6c6f723d323066666137266c6162656c436f6c6f723d30643064316126636f6c6f723d323066666137)](https://codecov.io/gh/hpbxxtr/composer-upgrade-interactive)[![PHPStan](https://camo.githubusercontent.com/f72b6445627525bc63da7455740b4c32437651f7c953bdce80c070d672b792f6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d6c6576656c25323031302d6666303039303f7374796c653d666c61742d737175617265266c6162656c436f6c6f723d306430643161)](https://phpstan.org)[![PHP-CS-Fixer](https://camo.githubusercontent.com/dd4d263ea555fa872ad8a4a31a92c58018a51fce5513d3787526860103b60889/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d2d43532d2d46697865722d656e61626c65642d6666366233353f7374796c653d666c61742d737175617265266c6162656c436f6c6f723d306430643161)](https://cs.symfony.com)[![Rector](https://camo.githubusercontent.com/afff92e48d34d2e1a087c583aeb06b4e02b3d6e426369d38ef5171b708ae1294/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f526563746f722d656e61626c65642d6363666630303f7374796c653d666c61742d737175617265266c6162656c436f6c6f723d306430643161)](https://getrector.com)[![brnshkr/config](https://camo.githubusercontent.com/a3025e19f9255d9e654f63ab955fd3898bb2918b84a1d88ab55c6d9c04ed3f75/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f25463025394625413725413025323062726e73686b722d636f6e6669672d6363666630303f7374796c653d666c61742d737175617265266c6f676f436f6c6f723d666630306666266c6162656c436f6c6f723d30643064316126636f6c6f723d666630306666)](https://github.com/brnshkr/config)

 [Features](#-features) | [Requirements](#-requirements) | [Installation](#-installation) | [Usage](#-usage) | [Key bindings](#️-key-bindings) | [How it works](#️-how-it-works)

---

### An interactive TUI for selectively upgrading Composer dependencies

[](#an-interactive-tui-for-selectively-upgrading-composer-dependencies)

#### `yarn upgrade-interactive` for PHP!

[](#yarn-upgrade-interactive-for-php)

[![demo](./.readme/demo.gif)](./.readme/demo.gif)

---

✨ Features
----------

[](#-features)

- **Patch / minor / major** columns per package — choose exactly how far to upgrade each one
- **Full version picker** — press `v` on any cell to browse all available stable versions in an inline multi-column list and pin an exact release
- **Live compatibility checking** — conflicting versions are marked with `!` as you navigate; the footer explains which dependency chain is broken and whether it originates from the current upgrade selection or from an already-installed package
- **require and require-dev** sections rendered separately
- **Abandoned package warnings** with replacement suggestions
- **Comparison and release URLs** in the footer for whichever bump type or version is focused (GitHub, GitLab, Packagist)
- **Full keyboard navigation** — arrow keys, vim (`hjkl`), and Emacs (`Ctrl+P/N/B/F`) bindings

---

📋 Requirements
--------------

[](#-requirements)

- PHP **8.3+**
- Composer **2.x**

---

📦 Installation
--------------

[](#-installation)

```
composer global require hpbxxtr/composer-upgrade-interactive
```

Or as a project dev dependency:

```
composer require --dev hpbxxtr/composer-upgrade-interactive
```

> **Trust prompt** — Composer will ask you to allow the plugin to execute code. Answer `y` to enable it:
>
> ```
> Do you trust "hpbxxtr/composer-upgrade-interactive" to execute code and wish to enable it now?
> (writes "allow-plugins" to composer.json) [y,n,d,?] y
>
> ```

---

🚀 Usage
-------

[](#-usage)

```
composer h:ui
```

Aliases: `composer hpbxxtr:upgrade-interactive` · `composer upgrade-interactive`

Navigate to a package, move across the patch/minor/major columns with the arrow keys, press `space` to select the latest version for that bump level, or press `v` to open an inline picker and choose any specific stable release. Press `enter` to confirm and apply.

### Options

[](#options)

OptionDescription`--caret`Write a caret range constraint (e.g. `^1.2.3`) instead of an exact version (`1.2.3`)**Example — pin exact versions (default):**

```
composer h:ui
# writes: "vendor/pkg": "1.2.3"
```

**Example — allow future minor/patch updates:**

```
composer h:ui --caret
# writes: "vendor/pkg": "^1.2.3"
```

---

⌨️ Key bindings
---------------

[](#️-key-bindings)

**Normal mode**

KeyAction`↑` / `k` / `Ctrl+P`Move up`↓` / `j` / `Ctrl+N`Move down`←` / `h` / `Ctrl+B`Move left (previous bump column)`→` / `l` / `Ctrl+F`Move right (next bump column)`space`Toggle selection (latest version for focused bump)`v`Open version picker for the focused cell`enter`Confirm and apply upgrades`Ctrl+C`Cancel**Version picker**

KeyAction`↑` / `↓`Navigate versions within the current column`←` / `→`Switch between version columns (oldest left, newest right)`space`Select the highlighted version and close picker`esc` / `←` at first columnClose picker without changing selection---

⚙️ How it works
---------------

[](#️-how-it-works)

1. **Resolution** — iterates the local Composer repository via internal Composer APIs and finds the best available patch, minor, and major target for every direct dependency.
2. **Initial compatibility check** — before the TUI opens, every candidate version is checked against the currently installed package set. Conflicting versions are pre-marked with `!` when the table first renders.
3. **Table** — one row per outdated package, three columns for patch / minor / major. Cells marked `!` indicate conflicts with the current state; the footer explains the broken dependency chain.
4. **Version picker** — pressing `v` on any cell fetches all stable releases for that bump level from Packagist and renders them as a side-by-side column picker, grouped by series (e.g. `1.4.x`, `1.3.x`). Each version is checked for compatibility before the picker opens.
5. **Live conflict recheck** — every time a selection changes, all visible versions are re-evaluated against the updated effective world (see below).
6. **Apply** — writes updated constraints to `composer.json` (exact version by default, caret range with `--caret`) then runs `composer update --with-all-dependencies` for all selected packages in one pass.

### Conflict detection

[](#conflict-detection)

Compatibility is checked against an **effective world** that combines three layers:

LayerDescriptionInstalled baseAll currently installed direct dependencies and their versionsSelection overridesAny packages you have already selected for upgrade in this session — their selected version replaces the installed oneCandidate overrideThe specific version being evaluated replaces the installed version of that package in the worldA conflict is reported when:

- **Forward** — the candidate version declares a `require` that is not satisfied by another package's version in the effective world (e.g. `vendor/pkg 2.0` requires `vendor/dep ^3.0` but `vendor/dep 2.8` is installed)
- **Backward** — another package in the effective world declares a `require` on the candidate package that the candidate's version does not satisfy (e.g. `vendor/other 1.5` requires `vendor/pkg ^1.0` but you are upgrading to `vendor/pkg 2.0`)

The conflict footer shows up to five conflicts at a time. Each line identifies the dependent package, the constraint it declares, and whether the conflicting dependency comes from a **selected upgrade** (`selected: X`) — meaning you can potentially resolve it by also upgrading that package — or from an **installed package** (`installed: X` / `update available`) that is not part of the current upgrade set.

---

📄 License
---------

[](#-license)

MIT — see [LICENSE](LICENSE).

###  Health Score

42

—

FairBetter than 89% of packages

Maintenance91

Actively maintained with recent releases

Popularity15

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 92.2% 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.

###  Release Activity

Cadence

Every ~12 days

Total

4

Last Release

52d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/7f4821b20e8573a1de52bb1c6bbd098019db9a132a96d855abb9b213ff50d19e?d=identicon)[hpbxxtr](/maintainers/hpbxxtr)

---

Top Contributors

[![hpbxxtr](https://avatars.githubusercontent.com/u/268039251?v=4)](https://github.com/hpbxxtr "hpbxxtr (47 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (4 commits)")

---

Tags

phpcomposercliinteractivesemverupgradecomposer-plugindependenciesupdatepackagisttuiyarnoutdatedlaravel-prompts

###  Code Quality

TestsPest

Static AnalysisPHPStan, Rector

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/hpbxxtr-composer-upgrade-interactive/health.svg)

```
[![Health](https://phpackages.com/badges/hpbxxtr-composer-upgrade-interactive/health.svg)](https://phpackages.com/packages/hpbxxtr-composer-upgrade-interactive)
```

###  Alternatives

[nunomaduro/patrol

An elegant command-line tool that keeps your PHP Project's dependencies in check

275130.3k3](/packages/nunomaduro-patrol)[mwguerra/interactive-upgrader

A CLI tool that handles both Composer and npm dependencies for Laravel projects.

2115.1k](/packages/mwguerra-interactive-upgrader)

PHPackages © 2026

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