stack.pulse
#stacks/xstate/state

XState release notes, breaking changes, and upgrade notes.

Actor-based state management and orchestration StackPulse turns upstream changelogs into scannable summaries with risky changes, deprecations, migration notes, and source links.

releases
20
breaking
5
security
0
deprecated
0
migrations
3

Get source-linked upgrade notes and occasional sponsor recommendations. No GitHub login required.

what stackpulse tracks

XState releases from GitHub

StackPulse watches XState release notes and keeps the original source link close to every summary.

upgrade risk

Breaking changes and deprecations

Risky changes are separated from normal feature notes so you can scan upgrade impact before changing production dependencies.

migration notes

Source-backed next steps

Migration steps and recommended actions are only shown when the upstream release notes support them.

# latest_releases

source-backed
xstate@6.0.0-alpha.5criticalbreakingmigrationprereleaseJun 24, 2026

xstate@6.0.0-alpha.5

This alpha release introduces a breaking change for transition configurations, requiring explicit target objects instead of string shorthand.

affected

Users relying on string shorthand for transition configurations will be affected.

action

Update transition configurations to use explicit target objects as shown in the example.

release_signals
-String target shorthand is no longer accepted for transition configs - must use object form with 'target' property
migration_steps1 steps
  1. 01Replace string transition targets with object form containing 'target' property
view source on github->
@xstate/store-vue@2.0.1-alpha.0mediumbreakingmigrationprereleaseJun 20, 2026

@xstate/store-vue@2.0.1-alpha.0

This alpha release updates the type signature of the `compare` function in `useSelector` to no longer include undefined for the previous value, and updates dependencies to @xstate/store@4.3.0-alpha.0.

affected

Affects developers using the `compare` function in `useSelector` with TypeScript and relying on the previous value being possibly undefined.

action

Review and update any `compare` function implementations in `useSelector` to handle the new strict typing.

release_signals
-The `compare` function in `useSelector` now has a strict type signature `(a: T, b: T)` rather than `(a: T | undefined, b: T)` - code relying on the previous value being possibly undefined will need type updates.
migration_steps1 steps
  1. 01Update any code that relied on the previous value being possibly undefined in the `compare` function of `useSelector` to handle the strictly typed values.
view source on github->
xstate@6.0.0-alpha.1highbreakingmigrationfeatureprereleaseJun 20, 2026

xstate@6.0.0-alpha.1

This alpha release introduces significant changes to XState, including a new approach to handling invoked and spawned actors, removal of deprecated APIs, and a shift to inline functions for actions, guards, and transitions. The release also introduces a new schema-based typing system for machines.

affected

Developers using XState will need to update their code to accommodate the new inline function approach for actions, guards, and transitions, as well as the new schema-based typing system.

action

Review the breaking changes and migration steps provided in the release notes to update your XState implementation.

release_signals
-Removed `interpret` function and `Interpreter` type; use `createActor(...)` and `Actor` instead.
-Removed v5 action/guard creators like `assign`, `raise`, `sendTo`, etc.
-Changed `setup(...)` function to no longer register implementations.
-Removed `stateIn` guard; use `snapshot.matches(...)` directly.
-Removed deprecated `types: {} as {...}` syntax in favor of `schemas`.
+Invoked and spawned actors now start as part of the transition that creates them, improving error handling.
+Actions, guards, and transitions are now plain inline functions, removing the need for separate creators.
+New schema-based typing system for machines, replacing the old `types` system.
+Separate concrete actors from actor refs in public types for clearer contracts.
+`setup(...)` function now focuses on machine- and state-level typing, removing implementation registration.
migration_steps5 steps
  1. 01Replace `interpret` with `createActor` and `Interpreter` with `Actor`.
  2. 02Update actions, guards, and transitions to use inline functions instead of creators.
  3. 03Migrate from `types: {} as {...}` to the new `schemas` system for typing machines.
  4. 04Use `snapshot.matches(...)` instead of the removed `stateIn` guard.
  5. 05Refactor `setup(...)` usage to focus on machine- and state-level typing.
view source on github->
XState release notes, breaking changes, and upgrade notes · StackPulse