Skip to content
Latchkey

Composer "Your requirements could not be resolved to an installable set"

Composer’s solver tries to find one version of every package that satisfies every constraint at once. When constraints conflict - two packages demanding incompatible versions, or a platform requirement that cannot be met - it reports the chain it could not satisfy and stops.

What this error means

composer install or composer update fails with "Your requirements could not be resolved to an installable set of packages." followed by a "Problem N" explanation naming the conflicting packages and versions.

composer
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires acme/foo ^3.0, found acme/foo[3.0.0]
      but it conflicts with another require.
    - acme/bar 2.1.0 requires acme/foo ^2.0 -> found acme/foo[2.0.0, ...].

Common causes

Two packages require incompatible versions of a shared dependency

A direct and a transitive requirement demand non-overlapping versions of the same package, leaving the solver no valid choice.

A root constraint is too strict

A pinned version in composer.json conflicts with what another package now needs, so no installable set exists.

A platform requirement cannot be met

A package requires a PHP version or extension the CI environment does not provide, which the solver treats as unsatisfiable.

How to fix it

Read the "Problem" block and adjust constraints

  1. Read each Problem N line to see which two requirements conflict.
  2. Bump or loosen the package holding the older constraint so the ranges overlap.
  3. Run composer update <vendor/pkg> for just the conflicting packages.

Diagnose why a version is forced

Ask Composer why a package is pinned to a version to find the real constraint.

Terminal
composer why-not acme/foo 3.0.0
composer why acme/bar

Match the CI platform to your requirements

If the conflict is a platform requirement, install the right PHP version/extension rather than ignoring the check.

.github/workflows/ci.yml
- uses: shivammathur/setup-php@v2
  with:
    php-version: '8.3'
    extensions: mbstring, intl

How to prevent it

  • Use the loosest constraint that still expresses your real requirement.
  • Upgrade related packages together so transitive ranges stay aligned.
  • Match the CI PHP version and extensions to what composer.json requires.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →