[{"url":"https://api.github.com/repos/statelyai/xstate/releases/382335540","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/382335540/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/382335540/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.52","id":382335540,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4Wyfo0","tag_name":"xstate@6.0.0-alpha.52","target_commitish":"main","name":"xstate@6.0.0-alpha.52","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-09-03T21:08:36Z","updated_at":"2026-09-03T21:11:36Z","published_at":"2026-09-03T21:11:36Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.52","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.52","body":"### Patch Changes\n\n- 069aadf: Fixed delayed transitions and other built-in effects in minified bundles, preserved hook-owned actors across React StrictMode effect reconnects, and allowed graph utilities to accept machines from duplicate XState package copies."},{"url":"https://api.github.com/repos/statelyai/xstate/releases/381648819","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/381648819/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/381648819/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.51","id":381648819,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4Wv3-z","tag_name":"xstate@6.0.0-alpha.51","target_commitish":"main","name":"xstate@6.0.0-alpha.51","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-09-03T00:21:18Z","updated_at":"2026-09-03T00:23:55Z","published_at":"2026-09-03T00:23:55Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.51","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.51","body":"### Minor Changes\n\n- 29dae8c: Improve `setup(...)` state contracts with typed structural metadata, recursive\n  state input requirements for composite and parallel entry, history-default\n  validation, strongly typed relative targets, and shared input requirements for\n  literal target sets.\n- b44d9cb: State-level context schemas now refine the root context schema instead of\n  replacing it. Declare only the fields narrowed by a state while retaining all\n  root context fields in state actions, transitions, and narrowed snapshots.\n  Nested states retain active ancestor refinements, and `xstate/fsm` uses the\n  same refinement semantics.\n  \n  ```ts\n  const machine = setup({\n    schemas: {\n      context: z.object({\n        requestId: z.string(),\n        draft: z.string().optional()\n      })\n    },\n    states: {\n      reviewing: {\n        schemas: { context: z.object({ draft: z.string() }) }\n      }\n    }\n  }).createMachine({\n    context: { requestId: 'req-1' },\n    // ...\n  });\n  ```"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/382335567","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/382335567/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/382335567/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/%40xstate/store-react%402.1.0-alpha.1","id":382335567,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WyfpP","tag_name":"@xstate/store-react@2.1.0-alpha.1","target_commitish":"main","name":"@xstate/store-react@2.1.0-alpha.1","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-09-03T21:08:36Z","updated_at":"2026-09-03T21:11:39Z","published_at":"2026-09-03T21:11:39Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/@xstate/store-react@2.1.0-alpha.1","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/@xstate/store-react@2.1.0-alpha.1","body":"### Minor Changes\n\n- c57f80e: The `useStore` hook now accepts an `inspect` option for wiring up inspectors to component-local stores. The inspector is subscribed while the option is provided and stays stable across re-renders.\n  \n  ```tsx\n  import { useStore, useSelector } from '@xstate/store-react';\n  import { createBrowserInspector } from '@statelyai/inspect';\n  \n  const inspector = createBrowserInspector();\n  \n  function Counter() {\n    const store = useStore(\n      {\n        context: { count: 0 },\n        on: {\n          inc: (context) => ({ count: context.count + 1 })\n        }\n      },\n      { inspect: inspector.inspect }\n    );\n    const count = useSelector(store, (s) => s.context.count);\n  \n    return <button onClick={() => store.send({ type: 'inc' })}>{count}</button>;\n  }\n  ```"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/382335582","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/382335582/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/382335582/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/%40xstate/react%407.0.0-alpha.2","id":382335582,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4Wyfpe","tag_name":"@xstate/react@7.0.0-alpha.2","target_commitish":"main","name":"@xstate/react@7.0.0-alpha.2","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-09-03T21:08:36Z","updated_at":"2026-09-03T21:11:42Z","published_at":"2026-09-03T21:11:42Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/@xstate/react@7.0.0-alpha.2","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/@xstate/react@7.0.0-alpha.2","body":"### Patch Changes\n\n- 069aadf: Fixed delayed transitions and other built-in effects in minified bundles, preserved hook-owned actors across React StrictMode effect reconnects, and allowed graph utilities to accept machines from duplicate XState package copies."},{"url":"https://api.github.com/repos/statelyai/xstate/releases/377527873","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/377527873/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/377527873/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.50","id":377527873,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WgJ5B","tag_name":"xstate@6.0.0-alpha.50","target_commitish":"main","name":"xstate@6.0.0-alpha.50","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-08-27T02:15:59Z","updated_at":"2026-08-27T02:18:36Z","published_at":"2026-08-27T02:18:36Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.50","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.50","body":"### Patch Changes\n\n- 7f9fc4f: Invalid external events are now rejected at the delivery boundary instead of erroring the actor or throwing. This covers events whose payload fails a declared runtime validator schema and internal event types (`internalEvents`) sent from outside their owning actor. A rejected event is never delivered: the actor does not transition, does not error, and no API throws.\n  \n  Rejections are reported through:\n  \n  - a new `onRejectedEvent` dead-letter hook on `createActor(...)` options, which receives an `EventRejection` describing the event, target, source, origin, reason and validation issues;\n  - the `@xstate.deadletter` inspection event, which now also carries the validation `issues` and underlying `error` for boundary rejections;\n  - a development-mode console warning.\n  \n  ```ts\n  const actor = createActor(machine, {\n    onRejectedEvent: (rejection) => {\n      console.log(rejection.event, rejection.reason, rejection.issues);\n    }\n  });\n  ```\n  \n  Pure `transition(...)` calls no longer throw for invalid external events: the snapshot is returned unchanged with a `@xstate.deadLetter` effect carrying the rejection, so durable hosts can journal rejections and replay stays total even with poisoned queued events. The effect executes through the `deadLetter` runtime operation, so `createDurable(...)` adapters journal rejections by implementing `deadLetter` like any other runtime operation.\n  \n  Internal faults are unchanged: values the machine produces itself (input, context, output, emitted events and delayed raised events) that fail their schema still error the actor, and pure transitions still throw for them."},{"url":"https://api.github.com/repos/statelyai/xstate/releases/376765508","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/376765508/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/376765508/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%405.32.6","id":376765508,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WdPxE","tag_name":"xstate@5.32.6","target_commitish":"main","name":"xstate@5.32.6","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-08-25T22:54:20Z","updated_at":"2026-08-25T22:56:21Z","published_at":"2026-08-25T22:56:21Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@5.32.6","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@5.32.6","body":"### Patch Changes\n\n- [#5678](https://github.com/statelyai/xstate/pull/5678) [`397b425`](https://github.com/statelyai/xstate/commit/397b42536f53b899e6914219ac829616d5100823) Thanks [@davidkpiano](https://github.com/davidkpiano)! - Machine snapshots now retain their machine-specific methods when initialization fails, so methods such as `snapshot.matches(...)` remain available on error snapshots."},{"url":"https://api.github.com/repos/statelyai/xstate/releases/376781578","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/376781578/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/376781578/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.49","id":376781578,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WdTsK","tag_name":"xstate@6.0.0-alpha.49","target_commitish":"main","name":"xstate@6.0.0-alpha.49","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-08-25T23:46:42Z","updated_at":"2026-08-25T23:49:26Z","published_at":"2026-08-25T23:49:26Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.49","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.49","body":"### Minor Changes\n\n- 501c5e3: Add the self-contained `xstate/fsm` entry point for compact flat finite state\n  machines. It exports `createFSM` and `createFSMActor` without including the full\n  statechart actor runtime.\n  \n  ```ts\n  import { createFSM, createFSMActor } from 'xstate/fsm';\n  \n  const logic = createFSM({\n    initial: 'inactive',\n    states: {\n      inactive: { on: { toggle: { target: 'active' } } },\n      active: { on: { toggle: { target: 'inactive' } } }\n    }\n  });\n  \n  const actor = createFSMActor(logic).start();\n  ```\n  \n  The FSM runtime also supports guarded transitions, context, actions, eventless\n  transitions, final states, child actors, delayed events, and snapshot\n  persistence for state, context, and self-directed timers. Live inline children\n  and timers targeting other actors are rejected at the persistence boundary\n  because the compact runtime has no registered actor-source registry."},{"url":"https://api.github.com/repos/statelyai/xstate/releases/375875213","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/375875213/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/375875213/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.48","id":375875213,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WZ2aN","tag_name":"xstate@6.0.0-alpha.48","target_commitish":"main","name":"xstate@6.0.0-alpha.48","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-08-24T17:28:09Z","updated_at":"2026-08-24T17:30:58Z","published_at":"2026-08-24T17:30:58Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.48","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.48","body":"### Patch Changes\n\n- 7601447: Add `createMachineFromSCXML(...)` through the `xstate/scxml` entry point. Converted machines follow strict SCXML behavior for transition selection, executable content, datamodel evaluation, invocation, event metadata, and completion.\n  \n  ```ts\n  import { createMachineFromSCXML } from 'xstate/scxml';\n  \n  const machine = createMachineFromSCXML(scxml);\n  ```"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/375211755","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/375211755/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/375211755/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.47","id":375211755,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WXUbr","tag_name":"xstate@6.0.0-alpha.47","target_commitish":"main","name":"xstate@6.0.0-alpha.47","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-08-23T12:55:21Z","updated_at":"2026-08-23T12:57:54Z","published_at":"2026-08-23T12:57:54Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.47","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.47","body":"### Minor Changes\n\n- 72938f8: Guard and delay source functions are now contextually typed from `schemas` — in `setup({ ... })`, `.extend({ ... })`, and `createMachine({ ... })` — so inline functions get typed `context` and `event` without hand annotations:\n  \n  ```ts\n  const s = setup({\n    schemas: {\n      context: z.object({ count: z.number() }),\n      events: { INC: z.object({ by: z.number() }) }\n    },\n    guards: {\n      // context: { count: number }, event: { type: 'INC'; by: number }\n      isPositive: ({ context }) => context.count > 0,\n      // additional params after the args object are free-form\n      isAbove: ({ context }, threshold: number) => context.count > threshold\n    },\n    delays: {\n      backoff: ({ context }) => context.count * 100\n    }\n  });\n  ```\n  \n  Guard sources receive the transition args object first (`{ context, event, self, parent, value, children }`), followed by any caller-supplied params — matching how the runtime invokes referenced guards. Delay sources receive `{ context, event, stateNode }`.\n  \n  Additionally, `enq.stop(...)`, `enq.listen(...)`, and `enq.subscribeTo(...)` now accept any `ActorRef` (such as values typed with `ActorRefFrom<typeof machine>`), instead of requiring the full actor instance type returned by `enq.spawn(...)`.\n\n### Patch Changes\n\n- 6ecc2df: Document durable timer semantics for event-journal hosts.\n- fc7454f: Restoring an externally migrated live snapshot now treats its `machine` property as a runtime association rather than persisted version metadata. Persisted snapshots continue validating their nested `{ id, version }` identity and legacy top-level `version` together.\n  \n  `getNextTransitions(snapshot)` returns an empty array for completed or errored snapshots.\n  \n  Setup-created machines whose input schema accepts `undefined` no longer require a meaningless `input` property when other actor options are provided, including after `machine.provide(...)`.\n  \n  Durable adapters can implement `enqueueRootEvent` when the host owns only the execution root's mailbox, without overriding delivery for co-located actors:\n  \n  ```ts\n  const durable = createDurable(machine, {\n    enqueueRootEvent: (_source, event) => host.enqueue(event),\n    executeAction,\n    waitForEvent\n  });\n  ```\n  \n  Implement `sendEvent` only when the host owns routing for every target; use `deliverEvent` for co-located delivery. Durable replay guidance now explicitly covers inline entry and exit callbacks."},{"url":"https://api.github.com/repos/statelyai/xstate/releases/375054364","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/375054364/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/375054364/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.46","id":375054364,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WWuAc","tag_name":"xstate@6.0.0-alpha.46","target_commitish":"main","name":"xstate@6.0.0-alpha.46","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-08-22T22:18:40Z","updated_at":"2026-08-22T22:21:25Z","published_at":"2026-08-22T22:21:25Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.46","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.46","body":"### Patch Changes\n\n- 30eb784: Transition spawning accepts typed registered actor names so durable source identity can be explicit:\n  \n  ```ts\n  const machine = createMachine({\n    actors: { worker },\n    on: {\n      start: (_, enq) => {\n        enq.spawn('worker', { id: 'worker' });\n      }\n    }\n  });\n  ```\n  \n  The name determines required input and the returned actor reference type. It is resolved immediately and persisted exactly, so duplicate names may share one logic value and later diverge safely. Logic-value spawning remains supported and uses the first matching registered key; unregistered inline children cannot be persisted."},{"url":"https://api.github.com/repos/statelyai/xstate/releases/374946737","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/374946737/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/374946737/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.45","id":374946737,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WWTux","tag_name":"xstate@6.0.0-alpha.45","target_commitish":"main","name":"xstate@6.0.0-alpha.45","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-08-22T14:04:27Z","updated_at":"2026-08-22T14:07:03Z","published_at":"2026-08-22T14:07:03Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.45","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.45","body":"### Patch Changes\n\n- e0dc812: Durable execution DX improvements:\n  \n  - The drive loop no longer routes root events by hand. `executeEffects` retains the root-addressed events it captures, and `execution.waitForEvent()` hands them out before deferring to the adapter, so the canonical loop is:\n  \n    ```ts\n    let [state, effects] = execution.initialTransition(input);\n    await execution.executeEffects(effects);\n  \n    while (state.status === 'active') {\n      [state, effects] = execution.transition(state, await execution.waitForEvent());\n      await execution.executeEffects(effects);\n    }\n    ```\n  \n    (`executeEffects` now resolves with `void`.)\n  \n  - `createDurable(logic, adapter, { inspect })` observes the execution's inspection events (`@xstate.actor` / `@xstate.transition`) across the whole live actor tree, including transitions computed by the pure path — the host-side home for operation logs and instrumentation.\n  - `execution.getActorRef(snapshot, address)` resolves a logical address against the snapshot's live actor tree, for hosts whose durable mailbox stores addresses as strings.\n  - Machine `output` types infer from the config's `output` function when no `schemas.output` schema is declared; a declared schema stays authoritative.\n  - `DurableSnapshot` keeps the `status`/`output`/`error` discriminant visible when `TLogic` is an unresolved type parameter, and adapter `waitForEvent` implementations may return plain event objects — generic host libraries no longer need casts.\n- e0dc812: A machine's output type is now inferred from its `output` config when no `schemas.output` is declared. A declared `schemas.output` stays authoritative.\n  \n  ```ts\n  const machine = setup({}).createMachine({\n    context: { shipped: ['sku-1'] },\n    initial: 'done',\n    states: { done: { type: 'final' } },\n    output: ({ context }) => ({\n      status: 'shipped' as const,\n      skus: context.shipped\n    })\n  });\n  \n  // OutputFrom<typeof machine> is now\n  // { status: 'shipped'; skus: string[] } instead of {}\n  ```"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/374726040","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/374726040/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/374726040/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.44","id":374726040,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WVd2Y","tag_name":"xstate@6.0.0-alpha.44","target_commitish":"main","name":"xstate@6.0.0-alpha.44","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-08-21T23:33:15Z","updated_at":"2026-08-21T23:36:09Z","published_at":"2026-08-21T23:36:09Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.44","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.44","body":"### Minor Changes\n\n- 7156ad5: Add setup state-local output schemas for typed final-state output and nested completion contracts."},{"url":"https://api.github.com/repos/statelyai/xstate/releases/374452737","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/374452737/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/374452737/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.43","id":374452737,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WUbIB","tag_name":"xstate@6.0.0-alpha.43","target_commitish":"main","name":"xstate@6.0.0-alpha.43","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-08-21T14:12:43Z","updated_at":"2026-08-21T14:15:32Z","published_at":"2026-08-21T14:15:32Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.43","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.43","body":"### Patch Changes\n\n- 39f8431: Durable executions can pin a deterministic identity: `createDurable(machine, { executionId, ... })` makes session ids `<executionId>:<n>`, a deterministic function of actor-creation order, so hosts that journal the execution's own events can replay them — a journaled completion event still matches the child a replay re-creates.\n  \n  ```ts\n  const durable = createDurable(machine, {\n    executionId: orderId,\n    executeAction,\n    waitForEvent\n  });\n  ```\n  \n  The new `runLogic` runtime operation makes the invoked async actor the primary durable unit: a developer writes a normal promise and the host journals the whole body as one entry — wrapping the provided thunk in its own step primitive, or re-running the registered logic on a remote executor from the actor's serializable `(src, input)` identity alone. `enq.step` remains for opt-in finer granularity.\n  \n  ```ts\n  runLogic: (actor, exec) => ctx.run(actor.address, exec)\n  ```\n  \n  A remote handle now carries its host-supplied incarnation token as its `sessionId` — one incarnation identity with one staleness rule (a ref that knows its incarnation compares it; one that does not defers to the owning runtime). The persisted `incarnation` field is unchanged.\n  \n  Docs reposition `enq.step` as the hostless-durability tool (the snapshot is the journal; durable hosts use plain promise actors + `runLogic`), document the portable-action rule (named function + serializable args ships to a remote executor; closures run in-process), and add a \"Driving effects yourself\" section: `createDurable` is sugar over the pure `transition()` APIs, and hosts may execute the effect objects themselves.\n  \n  Durable-execution docs now also cover quiescing in-flight steps before registering a durable wait, the ordered-effect replay guarantee, and that `runStep`'s `exec` closure must run in-process."},{"url":"https://api.github.com/repos/statelyai/xstate/releases/373734965","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/373734965/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/373734965/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.41","id":373734965,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WRr41","tag_name":"xstate@6.0.0-alpha.41","target_commitish":"main","name":"xstate@6.0.0-alpha.41","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-08-20T12:53:49Z","updated_at":"2026-08-20T12:56:27Z","published_at":"2026-08-20T12:56:27Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.41","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.41","body":"### Minor Changes\n\n- 14cfdc3: Actors now have deterministic, location-transparent identity.\n  \n  - Every actor has a logical `address`: the `/`-joined path of actor ids from the root. Root actors are named after their logic's `id`, and children spawned without an explicit id get deterministic per-parent counters keyed by their actor source (`worker:0`, `worker:1`). Addresses are stable across persistence and restore; `sessionId` identifies one incarnation of an address, and completions from a previous incarnation of a local child are dropped.\n  - `enq.spawn(actors.x)` records the registered source key so spawned children persist by key.\n  - `getEffectDescriptor(effect)` returns a serializable view of any executable effect, with actor references replaced by addresses and actor sources by source keys (payload fields pass through by reference).\n  - A host runtime can be installed as `system.runtime`; the built-in local runtime is the default. The new `deliverEvent`, `stopActor` and `terminateActor` helpers expose the local behaviors for custom runtimes to delegate to.\n  - `createDurable` (from `xstate/durable`) adapters carry their runtime operations directly (`sendEvent`, `scheduleTimer`, …), and the execution installs them on every snapshot's actor system; it exposes `rootAddress` and `getActorRef(snapshot)`, tags every effect with a serializable `descriptor`, and `executeEffects` resolves only when every transitively initiated runtime operation has been accepted — returning the events addressed to the root actor for the durable loop. Breaking for existing adapters: during `executeEffects`, root-addressed events no longer reach any runtime `sendEvent` (including per-effect `runtime()` implementations) — drain them from the `executeEffects` result instead. While the loop is parked in `waitForEvent`, a root-addressed event reaches `sendEvent` like any other target, and the host should enqueue it in its own mailbox. Runtime objects are also wrapped before effects see them, so identity comparisons and extra non-runtime properties on the returned object are not preserved.\n  - `getPersistedSnapshot(snapshot, { embedChildren: false })` persists children by logical address, leaving each child's state with the runtime that owns it; restoring an address-only child produces a location-transparent handle whose sends route through the system runtime.\n  - Explicit child ids are unique per parent: spawning or invoking with an id already held by a live sibling throws (ids stopped earlier in the same transition stay reusable). Previously a duplicate id silently created a second running actor at the same address. A transition to a history state that restores its own source now exits and reenters the source, so its invoked actors restart instead of leaking.\n  - Undeliverable events are reported through the new `deadLetter` runtime operation and a `@xstate.deadletter` inspection event. Delivery stays at-most-once — this is observability, not retry.\n  - A persisted remote child entry round-trips an optional opaque `incarnation` token. XState never stamps one, but when a host does, completions from a different incarnation of the address are dropped and `sendTo` effect descriptors journal the target's token.\n  - `createDurable` exposes `machineId` and `machineVersion` so hosts can pin an execution's journal to the machine version that produced it.\n  - Async-actor steps (`enq.step`) route through the new `runStep` runtime operation. The built-in behavior memoizes results in the actor's own snapshot as before; a durable host implements `runStep` to own the step journal, replaying memoized results without re-running the step. The `runStep` helper export exposes the built-in behavior.\n  - Serialized actor references (`Actor.toJSON`, persisted context refs) carry `xstate$type: 'actorRef'` instead of the v5 `xstate$$type: 1` marker. Migrate v5-persisted context refs with `machineVersions` if you restore them.\n  - Timers persisted from a running actor carry their wall-clock start (`startedAt`); restoring the snapshot schedules the remaining time toward the original deadline (clamped to the declared delay), so a timer past due fires immediately instead of restarting its full delay. Pure-transition snapshots carry no timestamp and restart the declared delay.\n  \n  ```ts\n  const durable = createDurable(machine, {\n    sendEvent: (source, target, event) =>\n      host.send(source?.address, target.address, event),\n    executeAction: (action, { id }, runtime) =>\n      host.runAction(id, () => action.exec(runtime)),\n    waitForEvent: ({ id }) => host.waitForEvent(id)\n  });\n  ```"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/371969630","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/371969630/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/371969630/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.40","id":371969630,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WK85e","tag_name":"xstate@6.0.0-alpha.40","target_commitish":"main","name":"xstate@6.0.0-alpha.40","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-08-17T21:45:38Z","updated_at":"2026-08-17T21:48:22Z","published_at":"2026-08-17T21:48:22Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.40","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.40","body":"### Minor Changes\n\n- 107d0c2: Represent historical machine versions with Standard Schema snapshot and event\n  descriptors instead of retaining their executable machines. Versioned machines\n  expose the same `snapshotSchema` and `eventSchema` interface. Machine-backed\n  snapshot schemas default omitted history and timer records during migration.\n  \n  ```ts\n  const versions = machineVersions([\n    {\n      id: 'checkout',\n      version: '1',\n      snapshotSchema: checkoutV1Snapshot,\n      eventSchema: checkoutV1Event\n    },\n    checkoutV2\n  ]);\n  \n  const snapshot = await versions.migrateSnapshot(persisted, {\n    to: '2',\n    migrations: {\n      '1': (snapshot) => ({\n        ...snapshot,\n        context: { total: snapshot.context.count }\n      })\n    }\n  });\n  ```\n\n### Patch Changes\n\n- 2e77ff6: `actor.getPersistedSnapshot()` is now typed to the actor’s logic, so persist/restore round-trips through `createActor(logic, { snapshot })` no longer require a cast. Restoring a snapshot into a machine with a different `id` is a type error, while snapshots from other versions of the same machine remain assignable (for runtime migration via `migrate`).\n  \n  ```ts\n  const actor = createActor(machine).start();\n  const snapshot = actor.getPersistedSnapshot();\n  \n  // No cast needed:\n  const restored = createActor(machine, { snapshot }).start();\n  ```"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/371503735","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/371503735/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/371503735/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.39","id":371503735,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WJLJ3","tag_name":"xstate@6.0.0-alpha.39","target_commitish":"main","name":"xstate@6.0.0-alpha.39","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-08-17T02:54:10Z","updated_at":"2026-08-17T02:56:55Z","published_at":"2026-08-17T02:56:55Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.39","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.39","body":"### Patch Changes\n\n- 7a7e564: Fixed a bug where `enq.subscribeTo(…)` and `enq.listen(…)` silently did nothing when called inside a transition function. They now work the same as in `entry` actions:\n  \n  ```ts\n  const machine = createMachine({\n    on: {\n      start: (_, enq) => {\n        const child = enq.spawn(childLogic);\n        enq.subscribeTo(child, {\n          done: (output) => ({ type: 'childDone', output })\n        });\n      },\n      childDone: ({ event }) => {\n        // event.output is the child's output\n      }\n    }\n  });\n  ```\n- 4e6dbfd: Named imports from the root `xstate` entry (such as the actor logic creators and `SpecialTargets`) now work in all environments, including tools that load the package as CommonJS.\n  \n  ```ts\n  import { createAsyncLogic } from 'xstate'; // now works everywhere\n  ```\n- 20a52b9: Optional event payload fields declared with `types()` are now preserved instead of being made required:\n  \n  ```ts\n  const machine = setup({\n    schemas: {\n      events: {\n        submit: types<{ email: string; referrer?: string }>()\n      }\n    }\n  }).createMachine({\n    // ...\n  });\n  \n  // referrer can now be omitted\n  actor.send({ type: 'submit', email: 'a@b.co' });\n  ```\n  \n  Payloads inferred from validator libraries (e.g. Zod) are still wrapped in `Required<>`.\n- 20a52b9: `snapshot.value` is now structurally typed from the machine config instead of the generic `StateValue` type. Flat machines get a union of state keys, and parallel machines get an object type with a key per region:\n  \n  ```ts\n  const machine = createMachine({\n    type: 'parallel',\n    states: {\n      bold: { initial: 'off', states: { off: {}, on: {} } },\n      italic: { initial: 'off', states: { off: {}, on: {} } }\n    }\n  });\n  \n  const value = createActor(machine).getSnapshot().value;\n  // { bold: 'off' | 'on'; italic: 'off' | 'on' }\n  ```\n- 90a173a: Fixed `createSystem(...).setup(...)` to preserve runtime validator types alongside typed actor registries. Validated setups now reject unsupported transforming schemas and carry validation into derived setups.\n  \n  Runtime validation can now also be installed on a derived setup when its inherited schemas are compatible:\n  \n  ```ts\n  import { setup } from 'xstate';\n  import { standardSchemaValidator } from 'xstate/validation';\n  import { z } from 'zod';\n  \n  const validated = setup({\n    schemas: { input: z.object({ id: z.string() }) }\n  }).extend({ validator: standardSchemaValidator() });\n  ```"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/371124430","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/371124430/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/371124430/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.38","id":371124430,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WHujO","tag_name":"xstate@6.0.0-alpha.38","target_commitish":"main","name":"xstate@6.0.0-alpha.38","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-08-15T18:19:18Z","updated_at":"2026-08-15T18:22:18Z","published_at":"2026-08-15T18:22:18Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.38","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.38","body":"### Patch Changes\n\n- 8aaac46: Restoring a persisted snapshot whose state value references a state that no longer exists on the machine now throws a descriptive error, e.g.:\n  \n  ```\n  Persisted snapshot references state 'reviewing' which does not exist on machine 'order-approval'.\n  ```\n  \n  Nested state values report the full state path (e.g. `'active.reviewing'`), and parallel state regions are validated as well."},{"url":"https://api.github.com/repos/statelyai/xstate/releases/370943484","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/370943484/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/370943484/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.37","id":370943484,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WHCX8","tag_name":"xstate@6.0.0-alpha.37","target_commitish":"main","name":"xstate@6.0.0-alpha.37","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-08-15T03:12:15Z","updated_at":"2026-08-15T03:15:08Z","published_at":"2026-08-15T03:15:08Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.37","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.37","body":"### Minor Changes\n\n- 86f7303: Add an experimental, host-neutral durable execution helper at `xstate/durable`.\n  It assigns stable IDs to effects and event waits from pure transitions while\n  leaving durable execution, timers, messaging and child actors to the host.\n  Hosts can read `nextTransitionIndex` after every transition for checkpointing.\n  \n  ```ts\n  const durable = createDurable(machine, adapter);\n  const output = await durable.run(input);\n  ```\n\n### Patch Changes\n\n- 86f7303: Add experimental durable execution adapters for Inngest and Rivet workflows.\n  Host runtime mappings now receive the complete built-in effect, allowing them\n  to map timers, sends and child actors without coupling XState to either host.\n  \n  ```ts\n  import { createDurable } from '@xstate/inngest';\n  \n  const output = await createDurable(machine, options).run(input);\n  ```\n- 6df07b8: Fixed `invoke.onDone` transition argument inference when actor logic is passed directly as `src` in a machine with two or more differently-typed registered actors. Previously, the transition function's arguments collapsed to `any` (`event.output` was unusable without annotations); now `event.output` is inferred from the invoked actor's output type.\n  \n  ```ts\n  const fetchUser = createAsyncLogic({ run: async () => ({ name: 'David' }) });\n  const fetchCount = createAsyncLogic({ run: async () => 42 });\n  \n  setup({\n    actors: { fetchUser, fetchCount }\n  }).createMachine({\n    initial: 'loading',\n    states: {\n      loading: {\n        invoke: {\n          src: fetchUser,\n          onDone: ({ event }) => {\n            event.output.name; // string\n            return { target: 'done' };\n          }\n        }\n      },\n      done: {}\n    }\n  });\n  ```\n  \n  Note: when actors are registered, invoking *unregistered* inline logic now only supports the object/target forms of `onDone` (not the transition function form). Register the actor to get fully-typed function-form transitions."},{"url":"https://api.github.com/repos/statelyai/xstate/releases/369356418","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/369356418/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/369356418/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.36","id":369356418,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4WA-6C","tag_name":"xstate@6.0.0-alpha.36","target_commitish":"main","name":"xstate@6.0.0-alpha.36","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-08-12T15:43:42Z","updated_at":"2026-08-12T15:46:23Z","published_at":"2026-08-12T15:46:23Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.36","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.36","body":"### Minor Changes\n\n- af31f22: Add `machineVersions().adaptEvents()` for adapting complete event histories\n  between machine versions. Exact retained-version adapters infer source and\n  target event types, while an async `'*'` adapter can handle unknown histories.\n  \n  ```ts\n  const events = await versions.adaptEvents(storedEvents, {\n    from: { id: 'checkout', version: '1' },\n    to: '2',\n    adapters: {\n      '1': (events) => events.map(toV2Event)\n    }\n  });\n  ```"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/368159354","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/368159354/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/368159354/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/%40xstate/store%404.2.3","id":368159354,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4V8ap6","tag_name":"@xstate/store@4.2.3","target_commitish":"main","name":"@xstate/store@4.2.3","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-08-10T19:46:58Z","updated_at":"2026-08-10T19:47:00Z","published_at":"2026-08-10T19:47:00Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/@xstate/store@4.2.3","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/@xstate/store@4.2.3","body":"### Patch Changes\n\n-   [#5624](https://github.com/statelyai/xstate/pull/5624) [`d146eaa`](https://github.com/statelyai/xstate/commit/d146eaa1cd7112a289b8b9fffaf5cbb2489e859a) Thanks [@Jaybhade](https://github.com/Jaybhade)! - Fixed snapshot-based undo/redo so that undoing after a redo steps back through history instead of staying put.\n\n    ```ts\n    const store = createStore({\n      context: { count: 0 },\n      on: { inc: (ctx) => ({ count: ctx.count + 1 }) },\n    }).with(undoRedo({ strategy: \"snapshot\" }));\n\n    store.trigger.inc(); // 1\n    store.trigger.inc(); // 2\n    store.trigger.inc(); // 3\n    store.trigger.undo(); // 2\n    store.trigger.undo(); // 1\n    store.trigger.redo(); // 2\n    store.trigger.undo(); // 1 (previously stayed at 2)\n    ```\n"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/358366204","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/358366204/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/358366204/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/%40xstate/store%404.2.2","id":358366204,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4VXDv8","tag_name":"@xstate/store@4.2.2","target_commitish":"main","name":"@xstate/store@4.2.2","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-07-22T22:53:08Z","updated_at":"2026-07-22T22:53:09Z","published_at":"2026-07-22T22:53:09Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/@xstate/store@4.2.2","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/@xstate/store@4.2.2","body":"### Patch Changes\n\n-   [#5608](https://github.com/statelyai/xstate/pull/5608) [`fbcbd5a`](https://github.com/statelyai/xstate/commit/fbcbd5a389dd76de74f37dbba675b26abe790ff4) Thanks [@davidkpiano](https://github.com/davidkpiano)! - Allow snapshot-based undo and redo to customize restored context while preserving complete history snapshots. Restoration can enqueue emitted events, effects, and store triggers.\n\n    ```ts\n    const undoableStore = store.with(\n      undoRedo({\n        strategy: 'snapshot',\n        restore: ({ current, next }) => ({\n          ...next,\n          viewport: current.viewport\n        })\n      })\n    );\n    ```\n"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/353953864","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/353953864/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/353953864/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%405.32.5","id":353953864,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4VGOhI","tag_name":"xstate@5.32.5","target_commitish":"main","name":"xstate@5.32.5","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-07-14T17:18:23Z","updated_at":"2026-07-14T17:18:27Z","published_at":"2026-07-14T17:18:27Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@5.32.5","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@5.32.5","body":"### Patch Changes\n\n-   [#5603](https://github.com/statelyai/xstate/pull/5603) [`345e04c`](https://github.com/statelyai/xstate/commit/345e04ce66963c2a5a2a879bb4928a1b179de7f6) Thanks [@xianjianlf2](https://github.com/xianjianlf2)! - Sending an event to a stopped actor no longer throws when the event contains unserializable data (e.g. circular references). Previously, the development-only warning that an event was sent to a stopped actor used `JSON.stringify` on the event, which could throw and mask the intended warning. The warning is now emitted safely regardless of the event's contents.\n"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/353953838","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/353953838/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/353953838/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/%40xstate/vue%405.0.1","id":353953838,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4VGOgu","tag_name":"@xstate/vue@5.0.1","target_commitish":"main","name":"@xstate/vue@5.0.1","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-07-14T17:18:23Z","updated_at":"2026-07-14T17:18:24Z","published_at":"2026-07-14T17:18:24Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/@xstate/vue@5.0.1","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/@xstate/vue@5.0.1","body":"### Patch Changes\n\n-   [#5607](https://github.com/statelyai/xstate/pull/5607) [`b669e95`](https://github.com/statelyai/xstate/commit/b669e9502c5627ff0fc98db4434e103f41e3e4d5) Thanks [@xianjianlf2](https://github.com/xianjianlf2)! - Fixed the test configuration so that the package's tests are correctly discovered and run. The `include` glob in `vitest.config.mts` pointed to a non-existent file, which meant no tests were executed and coverage was reported as 0%.\n\n-   Updated dependencies \\[[`345e04c`](https://github.com/statelyai/xstate/commit/345e04ce66963c2a5a2a879bb4928a1b179de7f6)]:\n    -   xstate@5.32.5\n"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/348338125","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/348338125/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/348338125/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%405.32.4","id":348338125,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4UwzfN","tag_name":"xstate@5.32.4","target_commitish":"main","name":"xstate@5.32.4","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-07-02T23:34:01Z","updated_at":"2026-07-02T23:34:03Z","published_at":"2026-07-02T23:34:02Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@5.32.4","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@5.32.4","body":"### Patch Changes\n\n-   [#5589](https://github.com/statelyai/xstate/pull/5589) [`e913eeb`](https://github.com/statelyai/xstate/commit/e913eebb655b55440b2971f791fbf079a0e5d7ad) Thanks [@spokodev](https://github.com/spokodev)! - Fixed a bug where targeting a history state that is a direct child of a `parallel` state would silently do nothing when that parallel state had not been visited yet and the history state had no default target. The machine now enters the parallel state's initial configuration, matching the behavior of history states inside compound states.\n\n    ```ts\n    const machine = createMachine({\n      initial: 'off',\n      states: {\n        off: { on: { GO: 'on.hist' } },\n        on: {\n          type: 'parallel',\n          states: {\n            regA: { initial: 'a1', states: { a1: {}, a2: {} } },\n            regB: { initial: 'b1', states: { b1: {}, b2: {} } },\n            hist: { type: 'history', history: 'deep' }\n          }\n        }\n      }\n    });\n\n    const actor = createActor(machine).start();\n    actor.send({ type: 'GO' });\n    actor.getSnapshot().value; // { on: { regA: 'a1', regB: 'b1' } }\n    ```\n"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/347771397","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/347771397/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/347771397/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.16","id":347771397,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4UupIF","tag_name":"xstate@6.0.0-alpha.16","target_commitish":"main","name":"xstate@6.0.0-alpha.16","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-07-02T00:16:18Z","updated_at":"2026-07-02T00:16:22Z","published_at":"2026-07-02T00:16:22Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.16","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.16","body":"### Minor Changes\n\n-   e410f24: Add state-level `onError` transitions for handling `xstate.error.*` events.\n\n    State `onError` catches actor, execution, and communication errors while the state is active. The caught error is available on `event.error`.\n\n    ```ts\n    const machine = createMachine({\n      initial: 'active',\n      states: {\n        active: {\n          onError: ({ event }) => ({\n            target: 'failed',\n            context: {\n              message:\n                event.error instanceof Error\n                  ? event.error.message\n                  : String(event.error)\n            }\n          })\n        },\n        failed: {}\n      }\n    });\n    ```\n\n### Patch Changes\n\n-   f6edec7: Allow machines with no external events to be used anywhere `AnyActorLogic` or `AnyStateMachine` is expected.\n\n    ```ts\n    const machine = setup({\n      schemas: {\n        events: {}\n      }\n    }).createMachine({});\n\n    const logic: AnyActorLogic = machine;\n    const anyMachine: AnyStateMachine = machine;\n    ```\n\n    Machines with empty event schemas still reject external events sent to their actors.\n"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/347771385","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/347771385/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/347771385/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/%40xstate/store%404.3.0-alpha.2","id":347771385,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4UupH5","tag_name":"@xstate/store@4.3.0-alpha.2","target_commitish":"main","name":"@xstate/store@4.3.0-alpha.2","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-07-02T00:16:18Z","updated_at":"2026-07-02T00:16:19Z","published_at":"2026-07-02T00:16:19Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/@xstate/store@4.3.0-alpha.2","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/@xstate/store@4.3.0-alpha.2","body":"### Patch Changes\n\n-   0f0d6e2: Fixed `fromStore` actor logic so that emitted events and enqueued effects run again. Previously, `enq.emit(...)` and `enq.effect(...)` inside a transition were silently dropped.\n\n    ```ts\n    const storeLogic = fromStore({\n      context: (count: number) => ({ count }),\n      schemas: {\n        emitted: {\n          increased: z.object({ upBy: z.number() })\n        }\n      },\n      on: {\n        inc: (ctx, ev: { by: number }, enq) => {\n          enq.emit.increased({ upBy: ev.by }); // now emitted\n          return { ...ctx, count: ctx.count + ev.by };\n        }\n      }\n    });\n\n    const actor = createActor(storeLogic, { input: 42 });\n    actor.on('increased', (e) => console.log(e.upBy));\n    actor.start();\n    actor.send({ type: 'inc', by: 8 }); // logs: 8\n    ```\n"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/347516350","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/347516350/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/347516350/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%405.32.3","id":347516350,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4Utq2-","tag_name":"xstate@5.32.3","target_commitish":"main","name":"xstate@5.32.3","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-07-01T14:28:58Z","updated_at":"2026-07-01T14:28:59Z","published_at":"2026-07-01T14:28:59Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@5.32.3","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@5.32.3","body":"### Patch Changes\n\n-   [#5575](https://github.com/statelyai/xstate/pull/5575) [`830db8b`](https://github.com/statelyai/xstate/commit/830db8b6b4ac81331bdcae44aa7ec522fa959960) Thanks [@JSap0914](https://github.com/JSap0914)! - Fixed `initialTransition` (and `transition`) throwing `\"Actor with system ID '...' already exists\"` when the machine contains an `invoke` with a `systemId`.\n\n    **Root cause:** `createInertActorScope` used `createActor(logic)` internally, which eagerly ran `getInitialSnapshot` during construction and registered any `systemId`-carrying child actors in the system. When the caller then ran `getInitialSnapshot` (or `transition`) via the returned scope, the same system was reused, causing the duplicate-registration error.\n\n    **Fix:** After creating the internal actor, `createInertActorScope` now replaces the actor's system reference with a freshly-created system. Child actors spawned by the subsequent caller-driven `getInitialSnapshot` / `transition` invocation therefore register into a clean system with no pre-existing entries.\n\n    ```ts\n    const machine = createMachine({\n      initial: 'idle',\n      states: {\n        idle: {\n          invoke: {\n            src: fromPromise(async () => 42),\n            systemId: 'myActor' // previously caused: \"Actor with system ID 'myActor' already exists\"\n          }\n        }\n      }\n    });\n\n    // Now works correctly — returns [snapshot, actions] without throwing\n    const [snapshot, actions] = initialTransition(machine);\n    ```\n\n-   [#5585](https://github.com/statelyai/xstate/pull/5585) [`a551a2b`](https://github.com/statelyai/xstate/commit/a551a2b81fbbe05f8ffc5b3cdaea503d01ce477e) Thanks [@RubenFricke](https://github.com/RubenFricke)! - Add missing https&#x3A;// protocol to the Stately Studio link in the README\n"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/347452208","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/347452208/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/347452208/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.15","id":347452208,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4UtbMw","tag_name":"xstate@6.0.0-alpha.15","target_commitish":"main","name":"xstate@6.0.0-alpha.15","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-07-01T12:42:58Z","updated_at":"2026-07-01T12:43:00Z","published_at":"2026-07-01T12:43:00Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.15","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.15","body":"### Patch Changes\n\n-   37d3254: Setup-bound invoke transition callbacks now validate target state context requirements for `onDone`, `onError`, `onSnapshot`, and `onTimeout`. `onDone` also infers output from the invoked actor logic.\n\n    ```ts\n    import { createAsyncLogic, setup } from 'xstate';\n    import { z } from 'zod';\n\n    const machine = setup({\n      actorSources: {\n        loadUser: createAsyncLogic({\n          run: async () => ({ name: 'Ada' })\n        })\n      },\n      states: {\n        loading: {},\n        success: {\n          schemas: {\n            context: z.object({\n              user: z.object({ name: z.string() })\n            })\n          }\n        }\n      }\n    }).createMachine({\n      context: {},\n      initial: 'loading',\n      states: {\n        loading: {\n          invoke: {\n            src: 'loadUser',\n            // Type-safe return value for invoke callbacks\n            onDone: ({ event }) => ({\n              target: 'success',\n              context: { user: event.output }\n            })\n          }\n        },\n        success: {}\n      }\n    });\n    ```\n"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/347221013","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/347221013/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/347221013/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.14","id":347221013,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4UsiwV","tag_name":"xstate@6.0.0-alpha.14","target_commitish":"main","name":"xstate@6.0.0-alpha.14","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-07-01T03:53:11Z","updated_at":"2026-07-01T03:53:12Z","published_at":"2026-07-01T03:53:12Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.14","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.14","body":"### Minor Changes\n\n-   c0c21d0: Add a path-bound overload to `setup(...).createStateConfig(path, config)`.\n\n    When a state declares its own input schema, the anonymous `createStateConfig(config)` form types `input` as a broad union across all states. This makes the resulting config incompatible with the specific state it's meant for — assigning it inside `createMachine` produces a type error because the input types don't match.\n\n    The new `createStateConfig(path, config)` overload binds the config to a specific setup-declared state by dotted path (e.g. `'loading'` or `'parent.child'`). The addressed state's own input schema is used inside `entry`/`exit` args, and bare transition targets are validated against the state's siblings.\n\n    ```ts\n    const s = setup({\n      states: {\n        idle: {},\n        active: {\n          schemas: { input: z.object({ userId: z.string() }) }\n        }\n      }\n    });\n\n    // Before: anonymous form — `input` is typed broadly, and assigning this\n    // config to the `active` state in createMachine fails with a type error.\n    const active = s.createStateConfig({\n      entry: ({ input }) => {\n        // input is not narrowed to { userId: string }\n      }\n    });\n\n    // After: path-bound form — `input` is narrowed to `active`'s own schema.\n    const active = s.createStateConfig('active', {\n      entry: ({ input }) => {\n        input.userId; // string\n      }\n    });\n\n    // Works for nested states too:\n    const child = s.createStateConfig('parent.child', { ... });\n    ```\n\n### Patch Changes\n\n-   8e3cce6: Fix `snapshot.matches(...)` narrowing so repeated checks like `snapshot.matches('loaded') || snapshot.matches('failed')` compile correctly, and make `StateFrom<typeof machine>` preserve the machine's concrete state value.\n-   0c2a6e5: Fix function-syntax transitions not passing `input` to target state entry actions.\n\n    ```ts\n    on: {\n      FETCH: ({ context, event }) => ({\n        target: 'fetching',\n        input: { url: event.url, token: context.authToken }\n      });\n    }\n    ```\n\n    Previously, `input` returned from function-syntax transitions was silently ignored. Now it is correctly forwarded to the target state's `entry` action.\n"},{"url":"https://api.github.com/repos/statelyai/xstate/releases/347066841","assets_url":"https://api.github.com/repos/statelyai/xstate/releases/347066841/assets","upload_url":"https://uploads.github.com/repos/statelyai/xstate/releases/347066841/assets{?name,label}","html_url":"https://github.com/statelyai/xstate/releases/tag/xstate%406.0.0-alpha.13","id":347066841,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOAofTfs4Ur9HZ","tag_name":"xstate@6.0.0-alpha.13","target_commitish":"main","name":"xstate@6.0.0-alpha.13","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-06-30T19:50:41Z","updated_at":"2026-06-30T19:50:43Z","published_at":"2026-06-30T19:50:43Z","assets":[],"tarball_url":"https://api.github.com/repos/statelyai/xstate/tarball/xstate@6.0.0-alpha.13","zipball_url":"https://api.github.com/repos/statelyai/xstate/zipball/xstate@6.0.0-alpha.13","body":"### Minor Changes\n\n-   bdc54dd: Added `createFSM(...)` for flat, actor-compatible finite state machines.\n\n    ```ts\n    import { createActor, createFSM } from 'xstate';\n\n    const toggleLogic = createFSM({\n      initial: 'inactive',\n      context: { count: 0 },\n      states: {\n        inactive: {\n          on: {\n            toggle: {\n              target: 'active',\n              context: { count: 1 }\n            }\n          }\n        },\n        active: {\n          on: {\n            toggle: ({ context }, enq) => {\n              enq(() => console.log('toggled'));\n\n              return {\n                target: 'inactive',\n                context: { count: context.count + 1 }\n              };\n            }\n          }\n        }\n      }\n    });\n\n    const actor = createActor(toggleLogic).start();\n\n    actor.send({ type: 'toggle' });\n    ```\n\n    `createFSM(...)` supports XState-style object transitions, function transitions, `enq` actions, initial input, state `input`, entry actions, and exit actions. Plain string targets are intentionally not supported; use object targets such as `{ target: 'active' }`.\n\n    Simple FSM transitions preserve immutable public snapshots while using structural sharing and a lighter transition path for common `{ target }`, `{ context }`, and `{ target, context }` transitions.\n\n### Patch Changes\n\n-   e297115: Object transition configs now support dynamic context patches with a `context` mapper.\n\n    ```ts\n    onDone: {\n      target: 'done',\n      context: ({ context, output }) => ({\n        answer: output,\n        memory: [...context.memory, output]\n      })\n    }\n    ```\n"}]