PHPackages                             rector/jack - 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. rector/jack

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

rector/jack
===========

Jack helps you incrementally update your `composer.json` dependencies, ensuring your project stays current without the chaos of outdated packages

0.5.1(4mo ago)95610.5k↓33.5%2[1 PRs](https://github.com/rectorphp/jack/pulls)20MITPHPPHP &gt;=7.2CI passing

Since Apr 18Pushed 4mo ago5 watchersCompare

[ Source](https://github.com/rectorphp/jack)[ Packagist](https://packagist.org/packages/rector/jack)[ Fund](https://www.paypal.me/rectorphp)[ GitHub Sponsors](https://github.com/tomasvotruba)[ RSS](/packages/rector-jack/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)DependenciesVersions (28)Used By (20)

Jack: Raise your Dependencies Safely
====================================

[](#jack-raise-your-dependencies-safely)

**Experimental**: Jack is an experimental project under active development. It is not yet stable, may contain bugs or undergo breaking changes. It's build it in the open with the community feedback.

[![Downloads total](https://camo.githubusercontent.com/ed9ece24543481f338edce4d946c700d90929ed1e0121c6dbdf407d3feb0e007/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f726563746f722f6a61636b2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/rector/jack/stats)

In real world, "jack" is a tool that helps to raise your heavy car one inch at a time. So you can fix any issues down there and drive safely on journeys to come.

[![Jack](/docs/jack.jpg)](/docs/jack.jpg)

In Composer world, Jack helps you to raise dependencies one version at a time, safely and steadily.

Say goodbye to unnoticed, years-old dependencies!

Why Jack?
---------

[](#why-jack)

Manually upgrading dependencies can be daunting, especially when tackling multiple outdated packages at once. Large upgrades often lead to errors, compatibility issues, and costly delays.

Jack automates and simplifies this process by:

- Monitoring outdated dependencies via CI.
- Gradually opening up package versions for safe updates.
- Prioritizing low-risk updates (e.g., dev dependencies).

Install
-------

[](#install)

Rector Jack is downgraded and scoped. It requires **PHP 7.2+** and can be installed on any legacy project.

```
composer require rector/jack --dev
```

Then, pick from three powerful commands:

1. Too many Outdated Dependencies? Let CI tell us
-------------------------------------------------

[](#1-too-many-outdated-dependencies-let-ci-tell-us)

Postponing upgrades often results in large, risky jumps (e.g., updating once a 3 years). Jack integrates with your CI pipeline to catch outdated dependencies early.

Run the `breakpoint` command to check for **outdated major packages**:

```
vendor/bin/jack breakpoint
```

↓

[![Jack](/docs/breakpoint.png)](/docs/breakpoint.png)

If there are more than 5 major outdated packages, the **CI will fail**.

Use `--limit` to raise or lower your bar:

```
vendor/bin/jack breakpoint --limit 3
```

This ensures upgrades stay on your radar without overwhelming you. No more "oops, our 30 dependencies are 5 years old" moments!

It's safer to start upgrading dev packages first. You can spot them like this:

```
vendor/bin/jack breakpoint --dev
```

2. Open up Next Versions
------------------------

[](#2-open-up-next-versions)

We know we're behind the latest versions of our dependencies, but where to start? Which versions should be force to update first? We can get lot of conflicts if we try to bump wrong end of knot.

Instead, let Composer handle it. How? We open-up package versions to the next version:

```
vendor/bin/jack open-versions
```

This command opens up 5 versions to their next nearest step, e.g.:

```
 {
     "require": {
         "php": "^7.4",
-            "symfony/console": "5.1.*"
+            "symfony/console": "5.1.*|5.2.*"
         },
         "require-dev": {
-            "phpunit/phpunit": "^9.0"
+            "phpunit/phpunit": "^9.0|^10.0"
         }
     }
 }
```

Then we run Composer to do the work:

```
composer update
```

If no blockers exist, Composer will update packages to their next version.

To change the number of packages, use `--limit` option:

```
vendor/bin/jack open-versions --limit 3
```

To upgrade only specific group of packages, use `--package-prefix` option:

```
vendor/bin/jack open-versions --package-prefix symfony
```

To preview changes without modifying `composer.json`, add `--dry-run`.

Do you want to play it safe? Try low-risk dev packages first:

```
vendor/bin/jack open-versions --dev
```

3. Raise to Installed Versions
------------------------------

[](#3-raise-to-installed-versions)

Sometimes, we get to an opposite situation. Our dependencies are quite new, but our `composer.json` is a outdated:

[![Outdated composer.json](/docs/composer-outdated-install.png)](/docs/composer-outdated-install.png)

Here we can see that:

- `illuminate/container` 12.0 is allowed, but we already use 12.14
- `symfony/finder` 6.4 is allowed, but we already use 7.2

If someone runs `composer update`, they might get unnecessary older dependencies than we can handle. Also, we're self-deprecating out project by signalling old dependencies we don't even use.

Instead, we should raise our `composer.json` to the installed versions:

```
 {
     "require": {
         "php": "^7.4",
-        "illuminate/container": "^12.0",
+        "illuminate/container": "^12.14",
         // ...
-        "symfony/finder": "^6.4|^7.2",
+        "symfony/finder": "^7.2",
         // ...
     }
 }
```

That's exactly what following command does:

```
vendor/bin/jack raise-to-installed
```

To see changes first without applying, add `--dry-run`.

Happy coding!

###  Health Score

48

—

FairBetter than 95% of packages

Maintenance74

Regular maintenance activity

Popularity51

Moderate usage in the ecosystem

Community29

Small or concentrated contributor base

Maturity32

Early-stage or recently created project

 Bus Factor1

Top contributor holds 88.6% 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 ~10 days

Total

27

Last Release

139d ago

PHP version history (2 changes)0.1.0PHP &gt;=8.2

0.1.1PHP &gt;=7.2

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/924196?v=4)[Tomas Votruba](/maintainers/TomasVotruba)[@TomasVotruba](https://github.com/TomasVotruba)

---

Top Contributors

[![TomasVotruba](https://avatars.githubusercontent.com/u/924196?v=4)](https://github.com/TomasVotruba "TomasVotruba (70 commits)")[![samsonasik](https://avatars.githubusercontent.com/u/459648?v=4)](https://github.com/samsonasik "samsonasik (6 commits)")[![shakaran](https://avatars.githubusercontent.com/u/14254?v=4)](https://github.com/shakaran "shakaran (2 commits)")[![guanguans](https://avatars.githubusercontent.com/u/22309277?v=4)](https://github.com/guanguans "guanguans (1 commits)")

---

Tags

ciclicomposerphprectorupgrade

### Embed Badge

![Health badge](/badges/rector-jack/health.svg)

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

###  Alternatives

[wp-cli/wp-cli

WP-CLI framework

5.1k17.2M320](/packages/wp-cli-wp-cli)[consolidation/annotated-command

Initialize Symfony Console commands from annotated command class methods.

22569.8M19](/packages/consolidation-annotated-command)[seld/cli-prompt

Allows you to prompt for user input on the command line, and optionally hide the characters they type

24725.8M17](/packages/seld-cli-prompt)[illuminate/console

The Illuminate Console package.

12944.1M5.1k](/packages/illuminate-console)[php-tui/php-tui

Comprehensive TUI library heavily influenced by Ratatui

589747.0k6](/packages/php-tui-php-tui)[codedungeon/php-cli-colors

Liven up you PHP Console Apps with standard colors

10210.1M26](/packages/codedungeon-php-cli-colors)

PHPackages © 2026

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