PHPackages                             webworkerjoshua/composer-check-updates - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. webworkerjoshua/composer-check-updates

ActiveComposer-plugin[Utility &amp; Helpers](/categories/utility)

webworkerjoshua/composer-check-updates
======================================

Interactive dependency update checker for Composer — shows updates within and beyond your version ranges, npm-check-updates style

v0.0.3(1mo ago)1101MITPHPPHP &gt;=8.3CI passing

Since Jun 12Pushed 1mo agoCompare

[ Source](https://github.com/webworkerJoshua/composer-check-updates)[ Packagist](https://packagist.org/packages/webworkerjoshua/composer-check-updates)[ RSS](/packages/webworkerjoshua-composer-check-updates/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (3)Dependencies (4)Versions (4)Used By (0)

composer-check-updates
======================

[](#composer-check-updates)

[![CI](https://github.com/webworkerJoshua/composer-check-updates/actions/workflows/ci.yml/badge.svg)](https://github.com/webworkerJoshua/composer-check-updates/actions/workflows/ci.yml)

Interactive dependency update checker for Composer, inspired by [npm-check-updates](https://github.com/raineorshine/npm-check-updates).

`composer outdated` tells you what's newer. `composer update` only moves you within your version ranges. This plugin shows **both kinds of updates at once** — those satisfying your `composer.json` constraints and those beyond them (new minors/majors) — lets you pick updates with the arrow keys and Space, rewrites `composer.json` where needed, and runs `composer update` for exactly what you selected.

```
? Choose which packages to update  ·  ↑/↓ move · Space select · a all · n none · Enter apply · q quit

In range  satisfies composer.json — plain `composer update` would pick these
 ❯ ◉ monolog/monolog   1.25.0  →  1.27.1   (or 3.10.0, see Major)

Minor  backwards-compatible features · composer.json will be updated
   ◯ phpunit/phpunit  (dev)   11.5.2  →  11.9.1

Major  potentially breaking changes · composer.json will be updated
   ◯ monolog/monolog   1.25.0  →  3.10.0   (or 1.27.1, see In range)
   ◯ psr/log            1.0.0  →  3.0.2

1 of 4 selected

```

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

[](#installation)

```
composer require --dev webworkerjoshua/composer-check-updates
```

Composer will ask you to trust the plugin (`allow-plugins`); confirm with yes.

### Global installation

[](#global-installation)

Install once, use in every project:

```
composer global require webworkerjoshua/composer-check-updates
```

Globally installed Composer plugins are loaded for every `composer`invocation, so `composer check-updates` / `composer ccu` then works in any project directory. The global install also provides a bare `ccu` command — make sure Composer's global bin directory is on your `PATH` (find it with `composer global config bin-dir --absolute`, typically `~/.composer/vendor/bin` on macOS):

```
cd /path/to/any/project
ccu              # same as: composer check-updates
ccu --dry-run
```

Usage
-----

[](#usage)

```
composer check-updates        # interactive picker (alias: composer ccu)
```

- **↑/↓** (or j/k) move, **Space** selects, **a** selects all, **n** selects none, **Enter** applies, **q**/Esc/Ctrl-C aborts without changing anything.
- Selecting an entry from *In range* leaves `composer.json` untouched and just runs `composer update `.
- Selecting an entry from *Patch/Minor/Major* first rewrites the constraint in `composer.json` (preserving your style: `^1.2` becomes `^3.10`, `1.2.*`becomes `3.10.*`, exact pins stay exact pins) and then runs `composer update  --with-all-dependencies`.

### Packages with updates both inside and outside the range

[](#packages-with-updates-both-inside-and-outside-the-range)

A package like `monolog/monolog` with constraint `^1.0`, installed at `1.25.0`, has two distinct upgrade paths: `1.27.1` (in range) and `3.10.0`(major). It therefore appears **twice** — once in *In range* and once in *Major* — and each entry cross-references the other (`or 3.10.0, see Major`). The two entries are mutually exclusive: selecting one automatically deselects the other, so you always make exactly one decision per package. **a** (select all) prefers the in-range entry — majors stay opt-in.

Below 1.0.0, a minor bump (`0.1.0 → 0.2.0`) is shown as **Major**: semver makes no compatibility promise for 0.x, and Composer's `^0.1.0` does not allow `0.2.0` either. Patch bumps within the same 0.x minor stay patches.

### Filtering

[](#filtering)

```
composer check-updates --filter "symfony/*"       # only matching packages (repeatable, -f)
composer check-updates --reject "phpunit/*"       # skip matching packages (repeatable, -x)
composer check-updates --dev-only                 # only require-dev
composer check-updates --prod-only                # only require
```

Patterns support `*` wildcards and match case-insensitively; rejects win over filters.

### Non-interactive usage

[](#non-interactive-usage)

```
composer check-updates --dry-run             # list only, change nothing
composer check-updates --format json         # machine-readable listing
composer check-updates --all                 # apply everything, prefer latest
composer check-updates --all --target in-range  # apply everything, stay in range
composer check-updates --ignore-platform-reqs   # ignore php/ext requirements
```

When stdout is not a TTY (CI, pipes) the command prints the grouped listing instead of starting the picker.

How it works
------------

[](#how-it-works)

The plugin uses Composer's own resolver APIs (`RepositorySet` + `VersionSelector`), so it sees exactly the packages your project sees: custom repositories, `minimum-stability`, stability flags, and platform requirements (your PHP version and extensions) are all respected. For each root requirement it asks for the best candidate within your constraint and the best candidate overall; `composer.json` edits go through Composer's `JsonManipulator`, which preserves your file's formatting.

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

[](#requirements)

- PHP &gt;= 8.3
- Composer &gt;= 2.3

Development
-----------

[](#development)

```
composer install
composer test     # Pest test suite
composer stan     # PHPStan static analysis (level max)
composer check    # both
```

License
-------

[](#license)

MIT

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance90

Actively maintained with recent releases

Popularity15

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 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.

###  Release Activity

Cadence

Every ~0 days

Total

3

Last Release

45d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/44984072?v=4)[Joshua Hennig](/maintainers/webworkerJoshua)[@webworkerJoshua](https://github.com/webworkerJoshua)

---

Top Contributors

[![webworkerJoshua](https://avatars.githubusercontent.com/u/44984072?v=4)](https://github.com/webworkerJoshua "webworkerJoshua (10 commits)")

---

Tags

composerinteractivedependenciesupdatencuoutdated

###  Code Quality

TestsPest

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/webworkerjoshua-composer-check-updates/health.svg)

```
[![Health](https://phpackages.com/badges/webworkerjoshua-composer-check-updates/health.svg)](https://phpackages.com/packages/webworkerjoshua-composer-check-updates)
```

###  Alternatives

[ergebnis/composer-normalize

Provides a composer plugin for normalizing composer.json.

1.1k41.8M3.0k](/packages/ergebnis-composer-normalize)[pyrech/composer-changelogs

Display changelogs after each composer update

5904.2M32](/packages/pyrech-composer-changelogs)[drupal/core-composer-scaffold

A flexible Composer project scaffold builder.

5345.4M571](/packages/drupal-core-composer-scaffold)[sllh/composer-versions-check

Checks if packages are up to date to last major versions after update

2362.4M16](/packages/sllh-composer-versions-check)[automattic/jetpack-autoloader

Creates a custom autoloader for a plugin or theme.

576.1M140](/packages/automattic-jetpack-autoloader)[mnsami/composer-custom-directory-installer

A composer plugin, to help install packages of different types in custom paths.

1465.4M62](/packages/mnsami-composer-custom-directory-installer)

PHPackages © 2026

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