PackageTrack
Sign in Get early access

spatie/laravel-model-states

State support for Eloquent models

2.14.2 7.9M downloads/mo #1100 most downloaded on Packagist spatie/laravel-model-states

What this package is like to depend on

Last release 1 months ago

22 Jul 2026

Ships fairly regularly

a new release about every 2 months

Nearly every release is documented

notes for 59 of 63 stable releases

Nothing withdrawn

no release was ever pulled

7 years old

63 releases · first in 2019

6 releases in the last 12 months

see the full history below

Release timeline

62 releases · Sep 2019 to Jul 2026
2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 60 of 63
  1. 2.14.2 22 Jul 2026
    Release notes

    What's Changed

    Full Changelog: 2.14.1...2.14.2

    Open source →
    Release notes

    What's Changed

    • Bump actions/checkout from 6 to 7 by @dependabot[bot] in https://github.com/spatie/laravel-model-states/pull/309
    • feat: implement Stringable interface on abstract State class by @maartenpaauw in https://github.com/spatie/laravel-model-states/pull/310

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.14.1...2.14.2

    Open source →
  2. 2.14.1 22 Apr 2026
    Release notes

    What's Changed

    • Bump dependabot/fetch-metadata from 1 to 3 by @dependabot[bot] in #305
    • Fix PHP 8.5 regression writing raw state FQN for aliased defaults by @freekmurze in #308

    Full Changelog: 2.14.0...2.14.1

    Open source →
    Release notes

    What's Changed

    • Bump dependabot/fetch-metadata from 1 to 3 by @dependabot[bot] in https://github.com/spatie/laravel-model-states/pull/305
    • Fix PHP 8.5 regression writing raw state FQN for aliased defaults by @freekmurze in https://github.com/spatie/laravel-model-states/pull/308

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.14.0...2.14.1

    Open source →
  3. 2.14.0 20 Apr 2026
    Release notes

    What's Changed

    • Fix PHP 8.5 trait binding order bug when state is cast via casts() method by @conorjmurphy in #306

    Full Changelog: 2.13.1...2.14.0

    Open source →
    Release notes

    What's Changed

    • Fix PHP 8.5 trait binding order bug when state is cast via casts() method by @conorjmurphy in https://github.com/spatie/laravel-model-states/pull/306

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.13.1...2.14.0

    Open source →
  4. 2.13.1 22 Feb 2026
    Release notes

    What's Changed

    Full Changelog: 2.13.0...2.13.1

    Open source →
    Release notes

    What's Changed

    • Use spatie/php-attribute-reader by @freekmurze in https://github.com/spatie/laravel-model-states/pull/303

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.13.0...2.13.1

    Open source →
  5. 2.13.0 21 Feb 2026
    Release notes

    What's Changed

    • Add Laravel 13 support
    Open source →
    Release notes

    What's Changed

    • Add Laravel 13 support
    Open source →
  6. 2.12.2 10 Dec 2025
    Release notes

    What's Changed

    New Contributors

    Full Changelog: 2.12.1...2.12.2

    Open source →
    Release notes

    What's Changed

    • Update issue template by @AlexVanderbist in https://github.com/spatie/laravel-model-states/pull/292
    • Improve punctuation for clarity in transition handling by @runofthemill in https://github.com/spatie/laravel-model-states/pull/296
    • Bump stefanzweifel/git-auto-commit-action from 6 to 7 by @dependabot[bot] in https://github.com/spatie/laravel-model-states/pull/294
    • Update transition delimiter from '-' to '->' in StateConfig by @lukas-staab in https://github.com/spatie/laravel-model-states/pull/300
    • Bump actions/checkout from 4 to 6 by @dependabot[bot] in https://github.com/spatie/laravel-model-states/pull/298

    New Contributors

    • @AlexVanderbist made their first contribution in https://github.com/spatie/laravel-model-states/pull/292
    • @runofthemill made their first contribution in https://github.com/spatie/laravel-model-states/pull/296
    • @lukas-staab made their first contribution in https://github.com/spatie/laravel-model-states/pull/300

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.12.1...2.12.2

    Open source →
  7. 2.12.1 01 Aug 2025
    Release notes

    What's Changed

    New Contributors

    Full Changelog: 2.12.0...2.12.1

    Open source →
    Release notes

    What's Changed

    • feat: add count and boolean methods for available transactions by @WatheqAlshowaiter in https://github.com/spatie/laravel-model-states/pull/290

    New Contributors

    • @WatheqAlshowaiter made their first contribution in https://github.com/spatie/laravel-model-states/pull/290

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.12.0...2.12.1

    Open source →
  8. 2.12.0 28 Jul 2025
    Release notes

    What's Changed

    • Add the field property to StateChanged event by @aabadawy in #286
    • Bump stefanzweifel/git-auto-commit-action from 5 to 6 by @dependabot[bot] in #283
    • Add transitionableStateInstances() method to get state objects for all transitionable states by @A909M in #285
    • feat: support custom transition constructors extending DefaultTransit… by @zayedadel in #284

    Full Changelog: 2.11.3...2.12.0

    Open source →
    Release notes

    What's Changed

    • Add the field property to StateChanged event by @aabadawy in https://github.com/spatie/laravel-model-states/pull/286
    • Bump stefanzweifel/git-auto-commit-action from 5 to 6 by @dependabot[bot] in https://github.com/spatie/laravel-model-states/pull/283
    • Add transitionableStateInstances() method to get state objects for all transitionable states by @A909M in https://github.com/spatie/laravel-model-states/pull/285
    • feat: support custom transition constructors extending DefaultTransit… by @zayedadel in https://github.com/spatie/laravel-model-states/pull/284

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.11.3...2.12.0

    Open source →
  9. 2.11.3 23 May 2025
    Release notes

    What's Changed

    • Add support for registering states from multiple custom directories. by @A909M in #282

    New Contributors

    Full Changelog: 2.11.2...2.11.3

    Open source →
    Release notes

    What's Changed

    • Add support for registering states from multiple custom directories. by @A909M in https://github.com/spatie/laravel-model-states/pull/282

    New Contributors

    • @A909M made their first contribution in https://github.com/spatie/laravel-model-states/pull/282

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.11.2...2.11.3

    Open source →
  10. 2.11.2 21 Mar 2025
    Release notes

    What's Changed

    • use laravel [validationRule] interface instead of [Rule] deprecated interface by @aabadawy in #276

    New Contributors

    Full Changelog: 2.11.1...2.11.2

    Open source →
    Release notes

    What's Changed

    • use laravel [validationRule] interface instead of [Rule] deprecated interface by @aabadawy in https://github.com/spatie/laravel-model-states/pull/276

    New Contributors

    • @aabadawy made their first contribution in https://github.com/spatie/laravel-model-states/pull/276

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.11.1...2.11.2

    Open source →
  11. 2.11.1 28 Feb 2025
    Release notes

    What's Changed

    • fix(config): var annotation for $baseStateClass and $defaultStateClass by @maartenpaauw in https://github.com/spatie/laravel-model-states/pull/275

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.11.0...2.11.1

    Open source →
  12. 2.11.0 26 Feb 2025
    Release notes

    What's Changed

    • Contract / Interface for Models that use HasStates trait. by @aSeriousDeveloper in https://github.com/spatie/laravel-model-states/pull/274

    New Contributors

    • @aSeriousDeveloper made their first contribution in https://github.com/spatie/laravel-model-states/pull/274

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.10.1...2.11.0

    Open source →
  13. 2.10.1 14 Feb 2025
    Release notes

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.10.0...2.10.1

    Open source →
  14. 2.10.0 30 Dec 2024
    Release notes

    What's Changed

    • Added test to ensure same-state transition fails when not allowed by @zayedadel in https://github.com/spatie/laravel-model-states/pull/270

    New Contributors

    • @zayedadel made their first contribution in https://github.com/spatie/laravel-model-states/pull/270

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.9.0...2.10.0

    Open source →
  15. 2.9.0 16 Dec 2024
    Release notes

    What's Changed

    • Feature: Added ...transitionArgs to default transition constructor call to allow arguments use for custom default transition by @IlliaVeremiev in https://github.com/spatie/laravel-model-states/pull/269

    New Contributors

    • @IlliaVeremiev made their first contribution in https://github.com/spatie/laravel-model-states/pull/269

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.8.0...2.9.0

    Open source →
  16. 2.8.0 11 Dec 2024
    Release notes

    What's Changed

    • Make using allowAllTransitions() less cumbersome by @jonjakoblich in https://github.com/spatie/laravel-model-states/pull/265

    New Contributors

    • @jonjakoblich made their first contribution in https://github.com/spatie/laravel-model-states/pull/265

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.7.2...2.8.0

    Open source →
  17. 2.7.2 27 Sep 2024
    Release notes

    What's Changed

    • [docs] Fix documentation badges by @maartenpaauw in https://github.com/spatie/laravel-model-states/pull/254
    • [docs] Add generic docblock to code snippet by @maartenpaauw in https://github.com/spatie/laravel-model-states/pull/253
    • Fix missing namespace in phpdoc by @conorjmurphy in https://github.com/spatie/laravel-model-states/pull/255
    • Update 01-introduction.md by @StreetYo in https://github.com/spatie/laravel-model-states/pull/257
    • docs: update 03-listing-states.md improve use statements by @mmachatschek in https://github.com/spatie/laravel-model-states/pull/261
    • fix(config): var annotation for $allowedTransitions by @maartenpaauw in https://github.com/spatie/laravel-model-states/pull/259

    New Contributors

    • @maartenpaauw made their first contribution in https://github.com/spatie/laravel-model-states/pull/254
    • @conorjmurphy made their first contribution in https://github.com/spatie/laravel-model-states/pull/255
    • @StreetYo made their first contribution in https://github.com/spatie/laravel-model-states/pull/257
    • @mmachatschek made their first contribution in https://github.com/spatie/laravel-model-states/pull/261

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.7.1...2.7.2

    Open source →
  18. 2.7.1 07 Mar 2024
    Release notes

    What's Changed

    • Use jsonSerialize in StateCaster by @piotrjoniec in https://github.com/spatie/laravel-model-states/pull/252

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.7.0...2.7.1

    Open source →
  19. 2.7.0 01 Mar 2024
    Release notes

    What's Changed

    • Implement SerializesCastableAttributes in StateCaster by @piotrjoniec in https://github.com/spatie/laravel-model-states/pull/251

    New Contributors

    • @piotrjoniec made their first contribution in https://github.com/spatie/laravel-model-states/pull/251

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.6.2...2.7.0

    Open source →
  20. 2.6.2 15 Feb 2024
    Release notes

    What's Changed

    • Add support for laravel 11 by @shuvroroy in https://github.com/spatie/laravel-model-states/pull/249

    New Contributors

    • @shuvroroy made their first contribution in https://github.com/spatie/laravel-model-states/pull/249

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.6.1...2.6.2

    Open source →
  21. 2.6.1 07 Feb 2024
    Release notes

    What's Changed

    • Typo in 01-configuring-states.md by @MarceauKa in https://github.com/spatie/laravel-model-states/pull/241
    • Bump stefanzweifel/git-auto-commit-action from 4 to 5 by @dependabot in https://github.com/spatie/laravel-model-states/pull/240
    • Bump actions/cache from 3 to 4 by @dependabot in https://github.com/spatie/laravel-model-states/pull/245
    • Generics PHPDoc annotations for State class by @lorenzolosa in https://github.com/spatie/laravel-model-states/pull/247

    New Contributors

    • @MarceauKa made their first contribution in https://github.com/spatie/laravel-model-states/pull/241

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.6.0...2.6.1

    Open source →
  22. 2.6.0 27 Sep 2023
    Release notes

    What's Changed

    • Feature/Method to allow all state transitions by @fmeccanici in https://github.com/spatie/laravel-model-states/pull/238

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.5.0...2.6.0

    Open source →
  23. 2.5.0 25 Sep 2023
    Release notes

    What's Changed

    • Bump actions/checkout from 3 to 4 by @dependabot in https://github.com/spatie/laravel-model-states/pull/236
    • Feature/Allow to set custom StateChanged event by @fmeccanici in https://github.com/spatie/laravel-model-states/pull/237

    New Contributors

    • @fmeccanici made their first contribution in https://github.com/spatie/laravel-model-states/pull/237

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.4.6...2.5.0

    Open source →
  24. 2.4.6 17 Apr 2023
    Release notes

    What's Changed

    • Don't assume scandir() always returns current and parent directory first by @sebastiandedeyne in https://github.com/spatie/laravel-model-states/pull/228

    New Contributors

    • @sebastiandedeyne made their first contribution in https://github.com/spatie/laravel-model-states/pull/228

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.4.5...2.4.6

    Open source →
  25. 2.4.5 20 Feb 2023
    Release notes

    What's Changed

    • Refactor tests to pest by @AyoobMH in https://github.com/spatie/laravel-model-states/pull/217

    New Contributors

    • @AyoobMH made their first contribution in https://github.com/spatie/laravel-model-states/pull/217

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.4.4...2.4.5

    Open source →
  26. 2.4.4 24 Jan 2023
    Release notes

    What's Changed

    • Add missing RegisterState Attribute by @ralphjsmit in https://github.com/spatie/laravel-model-states/pull/224

    New Contributors

    • @ralphjsmit made their first contribution in https://github.com/spatie/laravel-model-states/pull/224

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.4.3...2.4.4

    Open source →
  27. 2.4.3 23 Jan 2023
    Release notes

    What's Changed

    • Recommend not to use hypens in the name by @barclaymichael in https://github.com/spatie/laravel-model-states/pull/210
    • Add Dependabot Automation by @patinthehat in https://github.com/spatie/laravel-model-states/pull/218
    • Bump actions/checkout from 2 to 3 by @dependabot in https://github.com/spatie/laravel-model-states/pull/219
    • Bump actions/cache from 2 to 3 by @dependabot in https://github.com/spatie/laravel-model-states/pull/220
    • Add PHP 8.2 Support by @patinthehat in https://github.com/spatie/laravel-model-states/pull/221
    • Update deps for laravel 10 by @hailam in https://github.com/spatie/laravel-model-states/pull/223

    New Contributors

    • @barclaymichael made their first contribution in https://github.com/spatie/laravel-model-states/pull/210
    • @dependabot made their first contribution in https://github.com/spatie/laravel-model-states/pull/219
    • @hailam made their first contribution in https://github.com/spatie/laravel-model-states/pull/223

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.4.2...2.4.3

    Open source →
  28. 2.4.2 01 Aug 2022
    Release notes

    What's Changed

    • Removed Model type enforcement and replaced with PHPDoc by @luckcolors in https://github.com/spatie/laravel-model-states/pull/208

    New Contributors

    • @luckcolors made their first contribution in https://github.com/spatie/laravel-model-states/pull/208

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.4.1...2.4.2

    Open source →
  29. 2.4.1 29 Jul 2022
    Release notes

    What's Changed

    • Update .gitattributes by @angeljqv in https://github.com/spatie/laravel-model-states/pull/205
    • Ensures field is always set when changing states by @ChangingTerry in https://github.com/spatie/laravel-model-states/pull/207

    New Contributors

    • @angeljqv made their first contribution in https://github.com/spatie/laravel-model-states/pull/205
    • @ChangingTerry made their first contribution in https://github.com/spatie/laravel-model-states/pull/207

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.4.0...2.4.1

    Open source →
  30. 2.4.0 07 Jun 2022
    Release notes

    What's Changed

    • Manually register concrete state classes by @javoscript in https://github.com/spatie/laravel-model-states/pull/203

    New Contributors

    • @javoscript made their first contribution in https://github.com/spatie/laravel-model-states/pull/203

    Full Changelog: https://github.com/spatie/laravel-model-states/compare/2.3.0...2.4.0

    Open source →
  31. 2.3.0 21 Apr 2022

    Nothing published for this version

  32. 2.2.0 03 Mar 2022
    Release notes
    • Better internal use of getMorphClass (#198)
    Open source →
  33. 2.1.4 19 Jan 2022

    Nothing published for this version

  34. 2.1.3 06 Dec 2021

    Nothing published for this version

  35. 2.1.2 08 Oct 2021
    Release notes
    • Support for custom transition classes in transitionableStates method
    Open source →
  36. 2.1.1 01 Sep 2021
    Release notes
    • Support for custom transition classes' canTransition in State::canTransitionTo (#185)
    Open source →
  37. 2.1.0 21 Apr 2021
    Release notes
    • Add default transition config (#159)
    Open source →
  38. 2.0.2 09 Dec 2020
    Release notes
    • Add State::getModel() and State::getField()
    Open source →
  39. 2.0.1 09 Dec 2020
    Release notes
    • Fix bug on two consecutive transitions (#145)
    Open source →
  40. 2.0.0 04 Dec 2020
    Release notes

    The biggest change in v2 is that states now know which fields they belong to. So instead of having to pass in fields like so:

    $model->canTransitionTo(StateB::class, 'status');
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    You can now do:

    $model->status->canTransitionTo(StateB::class);
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    This change means that a lot of boilerplate code can be removed. Also keep in mind that this package wants you to always use state objects, and never their serialized values. That's why many other methods have been removed, in favour of Laravel's built-in model casts.

    • States aren't configured on models anymore, but on the state class itself. Refer to the docs for more info.
    • HasStates::transitionableStates(string $fromClass, string $field) has been removed.
    • State::transitionableStates() now doesn't need the $field parameter anymore.
    • HasStates::getStates() now returns the morph values instead of the hardcoded class names.
    • Default states are only set on model creations.
    • State::find() has been removed.
    • State::isOneOf() is removed, State::equals now accepts multiple state objects or morph classes.
    • State::is() is removed, you should use State::equals().
    • Dropped support for Laravel 5, 6, and 7. The minimal required version is laravel/framework:^8
    • Dropped support for PHP 7.2 and 7.3. The minimal required version is php:^7.4
    • Proper support for finalState in StateChanged event
    Open source →
  41. 1.9.1 01 Dec 2020
    Release notes
    • add support for PHP 8.0 (#141)
    Open source →
  42. 1.9.0 25 Aug 2020
    Release notes
    • add support for Laravel 8 (#101)
    Open source →
  43. 1.8.0 19 Aug 2020
    Release notes
    • Add getters for TransitionNotFound attributes (#99)
    Open source →
  44. 1.7.0 19 Aug 2020
    Release notes
    • Add canTransitionTo (#92)
    Open source →
  45. 1.6.3 23 Jun 2020
    Release notes
    • Support 0 state (#89)
    Open source →
  46. 1.6.2 16 Jun 2020
    Release notes
    • Support model::updated state casting (#88, 351c008)
    Open source →
  47. 1.6.1 27 Mar 2020
    Release notes
    • change static:: call to self:: for private State::resolveStateMapping method (#75)
    Open source →
  48. 1.6.0 03 Mar 2020
    Release notes
    • add support for Laravel 7
    Open source →
  49. 1.5.1 18 Feb 2020
    Release notes
    • Add support for fully qualified column names in whereState scope (#63)
    Open source →
  50. 1.5.0 13 Dec 2019
    Release notes
    • ❗️ $finalState in the StateChanged event is deprecated and will always be null. This is because of a fix for bug #49. This fix might have unforeseen effects if you're using StateChanged.
    Open source →
  51. 1.4.2 28 Nov 2019
    Release notes
    • Fix for unknown $modelClass variable (#47)
    Open source →
  52. 1.4.1 30 Oct 2019
    Release notes
    • Return Eloquent model when using transitionTo method directly (#33)
    Open source →
  53. 1.4.0 29 Oct 2019
    Release notes
    • Add better exceptions and Ignition support (#23)
    Open source →
  54. 1.3.1 28 Oct 2019
    Release notes
    Open source →
  55. 1.3.0 28 Oct 2019
    Release notes
    • Allow to get transitional states (#17)
    Open source →
  56. 1.2.0 21 Oct 2019
    Release notes
    • Add state listing methods (#21)
    Open source →
  57. 1.1.3 11 Oct 2019
    Release notes
    • Proper support for non-string columns
    Open source →
  58. 1.1.2 03 Oct 2019
    Release notes
    • Proper support for JSON serialise
    Open source →
  59. 1.1.1 02 Oct 2019
    Release notes
    • Default support via new
    Open source →
  60. 1.1.0 02 Oct 2019
    Release notes
    • Improved default support
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive