# Compatibility and upgrades

> Supported host versions, tested stack combinations, and compatible package upgrades.

Source: https://docs.inertiax.dev/table/compatibility/

InertiaX packages version independently. Update the packages needed for your change, keep their declared dependency ranges compatible, and commit the resulting lockfiles.

## Supported ranges

Supported host versions:

| Layer                  | Supported versions                        |
| ---------------------- | ----------------------------------------- |
| PHP                    | 8.3, 8.4, 8.5                             |
| Laravel                | 12, 13                                    |
| React and React DOM    | 19.1.1 or newer within React 19           |
| Inertia server adapter | `inertiajs/inertia-laravel` 2.0.5+ or 3.x |
| Inertia React adapter  | `@inertiajs/react` 2.3.18+ or 3.x         |
| Protocol               | draft 0.3.0                               |

Laravel 13 with the Inertia 2 server adapter starts at 2.0.21 in the test matrix. Later minor and patch releases remain inside the declared compatible ranges, but the exact combinations below are the regression-tested anchors.

## Tested combinations

The regression matrix checks lowest and stable dependencies for these combinations:

| Laravel | PHP | Inertia server constraint | Inertia generation |
| ------- | --- | ------------------------- | ------------------ |
| 12      | 8.3 | `^2.0.5`                  | 2                  |
| 12      | 8.4 | `^3.0`                    | 3                  |
| 12      | 8.5 | `^2.0.5`                  | 2                  |
| 13      | 8.3 | `^2.0.21`                 | 2                  |
| 13      | 8.4 | `^3.0`                    | 3                  |
| 13      | 8.5 | `^3.0`                    | 3                  |

The frontend adapter is separately tested against `@inertiajs/react` 2.3.18 and 3.6.1. End-to-end package and application checks exercise both matched generations.

## Match server and client Inertia generations

Use one of these pairs:

| Laravel adapter | React adapter | Status        |
| --------------- | ------------- | ------------- |
| 2.x             | 2.x           | Supported     |
| 3.x             | 3.x           | Supported     |
| 2.x             | 3.x           | Not supported |
| 3.x             | 2.x           | Not supported |

The adapter packages may have different minor or patch numbers, but their major generations must match.

## Upgrade the affected packages

1. Read the changelog for each package you intend to update.
2. Allow the package manager to resolve compatible dependencies. Declare `@inertiax/table-core` or `@inertiax/table-protocol` directly only when application source imports them.
3. If a release changes the Table wire contract, update its Laravel producer and frontend decoder to versions that support that contract in the same application change. npm and Composer version numbers do not need to match; see [Protocol reference](https://docs.inertiax.dev/table/protocol/).
4. Run the application’s server and frontend checks, repeat the [first-table interaction](https://docs.inertiax.dev/table/quick-start/#see-it-work), and commit the changed lockfiles.

A renderer-only fix or compatible foundation update does not inherently require a Laravel or Inertia-adapter release. Keep Inertia server/client generations matched when updating the host.

The shared React provider and its hooks must resolve to one app-selected `@inertiax/react` installation. Composer resolves one `inertiax/laravel` version for the application. If dependency ranges conflict, choose a tested compatible combination; forcing installation does not establish compatibility. Published ranges and contract support are the limits, not a promise that arbitrary old and new package majors can coexist.
