React Releases
Release notes sourced from the React package changelog (Changesets).
Source: packages/react/CHANGELOG.md
Major Changes
Section titled “Major Changes”-
#152
c805d79- Breaking: the React tier no longer starts the machine inside the factory by default. It now starts from a layout effect on first mount, so subscribers attach before the journey’s firststepEnter— previously that event fired duringcreateLinearJourney()/createGraphJourney()and was structurally impossible to observe throughuseEventEffect.autoStartbecomes three-way in this tier:- omitted (new default) — the machine starts when the first Provider, reactive hook,
useEventEffect, oruseStepHandlermounts.controls.start()is idempotent, so mounting many components still starts it exactly once. true— the previous behaviour: the machine starts eagerly inside the factory. Use it when the server must render step content, or when the bundle is driven entirely from non-React code.false— unchanged: nothing starts until you callcontrols.start().
Consequences to check when upgrading:
- SSR now renders
fallbackby default. Layout effects do not run on the server, so the machine is still idle there and both sides agree — which is what makes hydration deterministic. PassautoStart: trueto restore server-rendered step content. - A bundle driven only from non-React code needs
autoStart: true(or an explicitcontrols.start()), because nothing ever mounts to start it. useEventEffectnow receives the initialstepEnterandstatusChange. Listeners that assumed the first entry was already missed will see one more event than before.
- omitted (new default) — the machine starts when the first Provider, reactive hook,
-
#152
c805d79- Replace the1.0.0-rc.2runtime-object React API with two twin bundle factories (linear and graph) built on the final Core machine contract, plus a documented bring-your-own-machine pattern over React’suseSyncExternalStore.Linear factory API
Section titled “Linear factory API”- Add
createLinearJourney(definition, options?), the linear tier’s single entry point and a structural twin of the graph factory. The definition is core’sLinearJourneyDefinitionshape —context(the initial value and the type anchor) plus orderedsteps(bare-string shorthand or{ id, metadata? }— this tier declines Core’s step lifecycle hooks, since a step’s view mounts on enter and unmounts on leave — with an optionalnameused for the Provider’s React DevTools displayName). Both type parameters are inferred from the one definition argument, so hooks and components need no generics at call sites. - The factory creates one standalone machine and returns a bundle around it:
machine,Provider(views+childrenonly),StepRenderer, reactive hooks (useSnapshot,useSelector,useStep,useContextSelector,useEventEffect), verbatimcontrols/navigate/updateContextdelegates callable outside React, anduseStepHandler(stepId, handler)— per-step Core navigation work gatinggoToNextStep, whoserunand transactionalcommituse the same machine-owned pending/error state as direct navigation. viewsis{ [id in StepId]: ReactNode }, exhaustively type-checked so a missing or undeclared key is a compile error (anullview is a legal render-nothing step; a missing key at runtime rendersStepRenderer’s fallback). Machine options (persist,plugins,autoStart,startAt,defaultTimeoutMs,onListenerError) live in the factory’s second argument, andcurrentStepis null while idle.autoStartis three-way in this tier — see the deferred-start entry below for the default and its SSR consequences.- Hooks work with or without the Provider; the machine survives remounts and is never disposed by
React — reset explicitly via
controls(terminate()+restart()).
Graph entry point and caller-owned machines
Section titled “Graph entry point and caller-owned machines”- Add
@rxova/journey-react/graph.createGraphJourney(definition, options?)creates one standalone machine in the factory and returns a typed bundle around it:machine,Provider,StepRenderer, reactive hooks (useSnapshot,useSelector,useStep,useContextSelector,useEventEffect), and verbatimcontrols/send/updateContextdelegates callable outside React. Hooks work with or without the Provider — the Provider only carries theviewsrecord (elements keyed exhaustively by step id, same contract as the linear tier) forStepRenderer. The machine survives remounts and is never disposed by React;autoStartbehaves exactly as in the linear tier. - There is no headless hook entry point. Caller-owned Core machines are consumed with React’s own
useSyncExternalStoreovermachine.subscriptions— the root package exports the structural types for it (AnyJourneyMachine,SnapshotOf,ContextOf,StepIdOf,EventPayloadOf). - Keep
@rxova/journey-react/clientas the"use client"re-export of the root linear API. Both factories share one shape — a standalone machine per factory call, a views-only Provider, and aStepRendererplaced among ordinary siblings — differing only in their verbs (navigate+useStepHandlervssend).
Migration
Section titled “Migration”- Remove
createJourney,createJourneyFactory, the returned bound runtime object,JourneyProvider, and their legacy hooks. Choose the linear factory for ordered wizards, the graph entry point for event-driven branching, or a caller-owned Core machine read throughuseSyncExternalStorewhen machine ownership and rendering must remain separate. - Align all React snapshots, controls, navigation results, events, plugins, and graph definitions
with the new Core V1 types. Graph custom events are discriminated
{ type; payload? }unions. - Make ownership explicit for SSR and React Server Component applications: every bundle factory
creates a deliberate, visible module-scope machine; where per-request or per-mount isolation
matters, own a Core machine yourself and read it with
useSyncExternalStore. - Require React
>=18.2.0,@rxova/journey-coreV1, and Node>=20.11.0. - Rewrite the React documentation and examples around the two bundle factories and the caller-owned machine pattern.
- Add
-
#152
c805d79- Leave one way to read and one way to command. The bundle exposed ten hooks; three of them were not reactive at all, and two more were second spellings of things that belong elsewhere.Renamed
Section titled “Renamed”useSubscribeEvent→useEventEffect. It is an effect that happens to subscribe, and the name now puts it next touseEffectin a reader’s head rather than next tomachine.subscriptions.useContext()→useContextSelector(selector, equalityFn?), selector required.useContextSelector((context) => context)is the explicit way to ask for the whole object and re-render on every context write — by construction rather than by accident.
Removed
Section titled “Removed”useMachine(),useControls()anduseNavigation()are gone. None of them subscribed to anything; each returned an object already reachable on the bundle. The machine’s command groups are frozen objects with stable references, so they are plain properties now:machine,controls,navigate(linear) orsend(graph), andupdateContext.Step lifecycle hooks are effects
Section titled “Step lifecycle hooks are effects”React step configs no longer accept Core’s
onEnter/onLeave.<StepRenderer>keys the active view by step id, so a step’s own component mounts when the step is entered and unmounts when it is left — auseEffectwith a cleanup says both, scoped to the component that cares and able to reach component state and React context, which a hook running inside Core cannot.This is enforced, not just documented. The tier’s step types declare
onEnter?: neverandonLeave?: never, because a bareOmitonly rejects inline object literals: a step declared in its own file and annotated with Core’sGraphStep<Bag>would otherwise keep its hooks and compile clean. UseReactLinearStepInput,ReactGraphStep<Bag>andReactGraphDefinition<Bag>where you would have reached for Core’s equivalents. Core keeps both hooks for machines driven outside React.Unchanged, deliberately
Section titled “Unchanged, deliberately”autoStartstays three-way in this tier — omitted starts the machine from a layout effect on first mount, so subscribers attach before the initialstepEnterand SSR rendersfallbackon both sides. Core’s default is nowtrue, which makes this tier’soptions?.autoStart === trueguard load-bearing: forwarding options unchanged would start every bundle inside the factory and break hydration.
Minor Changes
Section titled “Minor Changes”-
#152
c805d79- React review cleanups. BundleuseSelectorhooks keep a single machine subscription across re-renders with inline selectors (the getter-side cache returns stable references). -
#152
c805d79- AdduseJourney(factory), which owns a bundle for one component instance: the factory runs once, the bundle survives re-renders, and the machine is disposed when the component really unmounts.This replaces the
useStatelazy initializer the README previously recommended for per-mount isolation. React double-invokes those initializers under StrictMode, so that pattern built two fully-configured machines per mount — two pluginsetup()passes, two persistence reads and writes, two armed autosave timers — and abandoned one without disposing it.useJourneyinitializes into a ref and defers disposal by a macrotask, so StrictMode’s simulated unmount cancels it while a real unmount still disposes.Also exports the
OwnedJourneyBundletype, and documents the lifecycle of module-scope bundles: they are never disposed, and one such bundle is shared by every request in a server process.
Patch Changes
Section titled “Patch Changes”-
#152
e8d1669- Documentation accuracy. The React docs described the API as it stood before deferred start anduseJourneylanded, so three of the corrections below are not stale phrasing but active misdirection.-
autoStartis documented as three-way, matching what ships. The docs said it “defaults totrue” in six places; the default is to start when the bundle’s first Provider or hook mounts. -
useJourneyis now taught in the narrative docs. It was reachable only from the generated API reference, because the docs’ banned-identifier check still listeduseJourneyas an rc-era name — the check was silently keeping the shipping API out of the documentation. -
The
useStatelazy-initializer pattern is no longer recommended for per-component ownership. It was documented in full, including the claim that the machine “holds no global registrations or timers at rest” — which is false withpersistorautosaveconfigured. That pattern builds two machines per StrictMode mount and abandons one undisposed;useJourneyexists to fix it. -
The root README’s “React: headless hooks” section is gone. It documented
@rxova/journey-react/headless, an entry point that no longer exists, alongsideuseApi,useLinearJourney, and<LinearJourney>. Replaced with the linear bundle, the graph bundle,useJourney, and the caller-owneduseSyncExternalStorepattern. -
The rc.2 → 1.0 migration guide’s React section is rewritten. Its “migrate to this” side taught a three-tier design that never shipped:
<LinearJourney>withLinearJourney.Stepchildren,useLinearJourney, and a@rxova/journey-react/headlessentry point withuseOwnedJourneyand machine-argument hooks. It now describes the twin bundle factories,useJourneyfor per-component ownership, and the caller-owneduseSyncExternalStorepattern, and it corrects the graph tier’s ownership claim — the factory creates one machine, not one per Provider mount.
The banned-identifier check now scans
README.mdand everypackages/*/README.mdin addition to the docs site. It already banned each removed identifier — the READMEs were simply never scanned, which is exactly how the headless section survived. The migration guide is deliberately exempt from that check, since it must name rc-era identifiers to teach the mapping; that exemption is also why its stale 1.0 side went unnoticed, so it is worth reading manually whenever the API moves. -
-
#152
c805d79- Test-only. Covers three surfaces the package shipped without: the./cliententry (previously verified only by a string match for its"use client"directive against the built bundle), error boundaries aroundStepRendererand a throwing step view, and a suspending view inside<Suspense>.The client-entry test asserts its export surface matches the root entry, so a missing re-export fails here rather than in a consumer’s app.
-
#152
c805d79-createLinearJourneynow forwards the whole definition to core instead of hand-pickingstepsandcontext. Its ownnamefield is rest-destructured off and the remainder is passed through, matching what the graph factory already did. The two are equivalent today, but the old shape would have silently dropped any field core added to the linear definition later. -
#152
c805d79- Fix type resolution for consumers onmoduleResolution: "node16"/"nodenext". The published.d.tsand.d.ctsfiles carried extensionless relative imports, which those resolvers cannot follow — all three entrypoints reported an internal resolution error. The published declarations now carry explicit.jsextensions, added at build time.Also adds size budgets for the previously unmeasured
dist/client.jsand foruseJourney. -
#152
c805d79- The bindings no longer write refs during render.useSelector’s cache is rebuilt throughuseMemoper derivation, and the last committed selection now lives in a ref advanced from an effect — mirroring React’s ownuseSyncExternalStoreWithSelector. The latest-ref assignments behinduseEventEffectanduseStepHandlermoved into effects for the same reason.Previously a render that React started and then discarded could advance the baseline that
equalityFncompares against, which with an identity-field equality could pin a stale value. Selected-reference stability across parent re-renders with inline selectors is unchanged.This also makes the package compatible with the React Compiler, and lets
react-hooks/refsbe enforced repo-wide rather than switched off. -
#152
c805d79- A bundle now opens a single machine subscription for its whole component tree instead of one per mounted hook. Core runs every registered selector on every publish, so subscribing per hook made it repeat identical selector and equality work once per subscriber — five subscribed components meant five subscriptions and five times the per-publish cost. It is now constant regardless of how many views are mounted, and the subscription is released when the last one unmounts.The multiplexer and the selection cache moved to
@rxova/journey-common/bindings, since both are pure logic a Vue or Angular wrapper would otherwise reimplement. No new published package: common is internal and bundled into the wrapper. -
#152
c805d79- React 18.2 is now a verified minimum rather than an unverified claim. The peer range already said>=18.2.0, but only React 19 was ever installed or tested, and the README said 19 whileCONTRIBUTING.mdsaid 18+. All three now say 18.2+, and CI runs the React suite and a typecheck against React 18.2 alongside the default 19.One development-only difference is documented rather than papered over: React 18’s StrictMode re-mounts hooks on its second render pass, so
useJourney()’s factory runs twice there and once on React 19. Only the committed bundle is ever started — the discarded one never mounts, so its start effect never runs and it holds no timers, subscriptions, or journey state. -
#131
5a7c344- Broaden the npm keywordsAdds
multi-step-form,wizard-hook,onboardingandcheckout-flow— the searches somebody runs before they know a flow runtime is what they want — plususe-journeyandproviderfor the surface they will actually type, andheadless, which is the property that decides whether these bindings fit a design system already in place. No code changes. -
Updated dependencies [
c805d79,c805d79,c805d79,c805d79,c805d79,c805d79,c805d79,3893a1b,c805d79,c805d79,c805d79,c805d79,c805d79,c805d79,c805d79,5a7c344]:- @rxova/journey-core@1.0.0
1.0.0-rc.3
Section titled “1.0.0-rc.3”Patch Changes
Section titled “Patch Changes”-
#131
5a7c344- Broaden the npm keywordsAdds
multi-step-form,wizard-hook,onboardingandcheckout-flow— the searches somebody runs before they know a flow runtime is what they want — plususe-journeyandproviderfor the surface they will actually type, andheadless, which is the property that decides whether these bindings fit a design system already in place. No code changes. -
Updated dependencies [
5a7c344]:- @rxova/journey-core@1.0.0-rc.3
1.0.0-rc.2
Section titled “1.0.0-rc.2”Patch Changes
Section titled “Patch Changes”- 5bc391a: Remove
JourneyProviderlifecycle callback props in favor of event subscriptions and hooks. - 4a16dd2: Rename the React startup API from
start()tostartJourney(). - 882d5a5: Add useStepApi for step-scoped custom event sends.
- Updated dependencies [5bc391a]
- Updated dependencies [4a16dd2]
- Updated dependencies [a558001]
- Updated dependencies [87a83d7]
- Updated dependencies [882d5a5]
- Updated dependencies [b95191f]
- Updated dependencies [ada8084]
- Updated dependencies [29f008d]
- @rxova/journey-core@1.0.0-rc.2
1.0.0-rc.1
Section titled “1.0.0-rc.1”Major Changes
Section titled “Major Changes”-
1cdde02: ## Breaking changes
Section titled “createJourney() replaces createJourneyBindings()”createJourney()replacescreateJourneyBindings()The previous context-based bindings factory, root-level
JourneyProvider,JourneyRenderer, and provider-free hook exports have been removed in favor of the new machine-first runtime API.Provider-owned journeys start in layout phase
Section titled “Provider-owned journeys start in layout phase”JourneyProvidernow callsmachine.startJourney()in a layout effect so the journey is running before first paint.Re-exported runtime constants removed
Section titled “Re-exported runtime constants removed”JOURNEY_STATUS,JOURNEY_EVENT,JOURNEY_ASYNC_PHASE, andJOURNEY_WILDCARDare no longer re-exported from@rxova/journey-react.
Section titled “JourneyApi return types changed”JourneyApireturn types changedclearStepError,updateContext, andupdateStepMetadatanow returnJourneySnapshotinstead ofvoid.Aligned with the new core transition, status, and type model
Section titled “Aligned with the new core transition, status, and type model”React journey definitions now use the declarative graph or linear syntax, the simplified 4-parameter
JourneyDefinition, and the new past-tense status / event names.
Section titled “useJourneyComputed()”useJourneyComputed()Exposes
machine.getComputed()as a hook with snapshot-driven re-rendering.
Section titled “useJourneySelector(selector, equalityFn?)”useJourneySelector(selector, equalityFn?)Subscribes to a derived slice of the snapshot with optional custom equality.
Section titled “useJourneyApi().goToStepById(stepId)”useJourneyApi().goToStepById(stepId)Adds the convenience navigation API that maps to the core
goToStepByIdevent.
Section titled “useJourneyStepLifecycle(stepId, { onEnter?, onLeave? })”useJourneyStepLifecycle(stepId, { onEnter?, onLeave? })Runs side effects when a specific step is entered or left while always calling the latest callbacks.
Section titled “@rxova/journey-react/client”@rxova/journey-react/clientAdds an explicit client-marked subpath for Next.js App Router boundaries while keeping the root entry server-safe.
Changed
Section titled “Changed”JourneyProviderdisposal is now opt-in viadisposeOnUnmountJourneyProviderreports provider-owned startup failures throughonError(error, { phase: "startJourney" })updateContextQueued()has been removed; useupdateContext()fromuseJourneyApi()instead- React stays aligned with the core timeout support and runtime refactors
Patch Changes
Section titled “Patch Changes”- Updated dependencies [1cdde02]
- @rxova/journey-core@1.0.0-rc.1
Unreleased
Section titled “Unreleased”Patch Changes
Section titled “Patch Changes”StepRendererandJourneyProviderstatus tracking now subscribe through selectors so unrelated snapshot updates no longer rerender those paths.useJourneyApi()now includesstartJourney()to match the core machine control surface.- React tests now cover inline selector usage,
startTransitionread consistency, and hook behavior after runtime disposal.
Minor Changes
Section titled “Minor Changes”-
239f7c5: ## What changed
useJourneyApi()now returns realJourneySendResults fromsend,goToNextStep,completeJourney,terminateJourney, and the other navigation helpers instead of only returningPromise<void>.- That aligns React with the new core error model: fire-and-forget calls like
void api.goToNextStep()no longer surface unhandled promise rejections when guards or effects fail, because failures now come back onresult.error. - A new
useJourneySelector(selector, equalityFn?)hook was added on top of the new core selector subscription primitive, letting components subscribe to a derived slice and skip rerenders when unrelated snapshot fields change. - A new
useJourneyEvent(listener)hook was added so bindings users can consume typed lifecycle telemetry without manually wiringmachine.subscribeEvent(...). - Provider lifecycle handling is now explicit.
JourneyProviderstill auto-starts anidledmachine, but disposal is opt-in throughdisposeOnUnmount, so shared runtimes survive provider unmounts by default. - Provider no longer resets its internal machine just because the
persistenceprop identity changes. For apps that depended on the old behavior,resetOnPersistenceChangewas added as the explicit opt-in path. - Provider also now accepts
requireExplicitCompletion, plusonStart,onComplete, andonTerminatecallbacks that wrap the new core lifecycle subscriptions for both internal and external machines. useJourneySnapshot()now bindssubscribeandgetSnapshotbefore handing them touseSyncExternalStore, fixing compatibility with external machine wrappers whose methods rely onthis.StepRenderernow remounts bycurrentStepId, which matters when different steps intentionally share the same React component but should not share local component state.- The old
updateComponentMetadataalias was removed from both the exported API type and the runtime object returned byuseJourneyApi().updateStepMetadatais now the single supported name. - React docs, examples, and tests were refreshed around selector subscriptions, event subscriptions, provider edge cases, StrictMode stability, and the updated result-returning API shape.
Breaking changes
Section titled “Breaking changes”updateComponentMetadatawas removed fromJourneyApiand from theuseJourneyApi()runtime object. Consumers must callupdateStepMetadatainstead.- Provider no longer resets its internal machine just because the
persistenceprop identity changed. If your app relied on that implicit reset, you now needresetOnPersistenceChange.
Patch Changes
Section titled “Patch Changes”- Updated dependencies [239f7c5]
- @rxova/journey-core@0.7.0
Patch Changes
Section titled “Patch Changes”-
4ee201f: Per-package patch notes:
@rxova/journey-devtools-bridge- Guarded bridge transport posting with a safe
try/catchsowindow.postMessagefailures are swallowed. - Prevents bridge lifecycle/command flows from throwing when browser messaging is unavailable or rejects.
- Guarded bridge transport posting with a safe
@rxova/journey-react- Memoized provider context value in
Providerto keep stable references whenmachine/journeyinputs are unchanged. - Reduces unnecessary rerenders for memoized consumers during unrelated parent rerenders and StrictMode churn.
- Memoized provider context value in
@rxova/journey-core- Added listener-churn edge coverage to verify snapshot/event subscriptions are fully removed after unsubscribe.
- Hardens regression protection around subscription retention behavior.
-
Updated dependencies [4ee201f]
- @rxova/journey-core@0.6.4
Patch Changes
Section titled “Patch Changes”-
99a6635: Added a new public API TSDoc quality gate (docs:api:check) that verifies callable exports from package entrypoints have TSDoc summaries.
- Enforced that check in CI/docs workflows and documented it in contributor/docs guides.
- Added the checker implementation and comprehensive tests for pass/fail/CLI behavior.
- Added/updated TSDoc on key public exports:
- core transition builders (tx, createTransitions)
- react bindings factory (createJourneyBindings)
- devtools bridge attach + protocol envelope/command validators
- No runtime behavior changes; this branch is primarily API documentation quality/tooling hardening.
@rxova/journey-core
- Added TSDoc summaries for public transition helpers (tx, createTransitions).
- Added tests for the new API TSDoc checker (check-public-api-tsdoc) under core tests.
- No runtime behavior changes.
@rxova/journey-react
- Added a TSDoc summary for createJourneyBindings (public React API entrypoint helper).
- No runtime behavior changes.
@rxova/journey-devtools-bridge
- Added TSDoc summaries for public bridge/protocol APIs (attachJourneyDevtools and envelope/command validators).
- No runtime behavior changes.
apps-docs
- Documented the new API docs quality gate (pnpm run docs:api:check) in the docs README.
- No end-user docs content changes beyond contributor/developer guidance.
repo/tooling (cross-package)
- Added docs:api:check script to root package.json.
- Added scripts/check-public-api-tsdoc.ts to enforce TSDoc coverage on public callable exports.
- Wired this check into CI/docs workflows and contributing guidelines.
-
Updated dependencies [99a6635]
- @rxova/journey-core@0.6.3
Patch Changes
Section titled “Patch Changes”- 6a38c50: - Tightened core machine typing by introducing JourneySendEvent and removing unsafe as unknown/as never casts in convenience APIs.
- Replaced JourneyStepDefinition’s open
Record<string, unknown>escape hatch with explicit typed step extensions. - Added runtime validation in devtools bridge for command stepId values (goToStepById, updateStepMetadata, clearStepError), returning commandError for unknown steps.
- Added/updated tests for type coverage and bridge invalid-step behavior.
- Added JSDoc to key public core types (including transition/event builder generics) and improved type readability with JourneyGoToStepByIdEventType.
- Replaced JourneyStepDefinition’s open
- Updated dependencies [6a38c50]
- @rxova/journey-core@0.6.2
Patch Changes
Section titled “Patch Changes”-
7be5e0c: minor updates
- adds shell header + set -e to Husky hooks,
- fixes test fixture newline escaping,
- adds explanatory comment before “use client”,
- tiny docs visual tweak.
-
Updated dependencies [7be5e0c]
- @rxova/journey-core@0.6.1
Minor Changes
Section titled “Minor Changes”- 56234c2: Improve docs across Core, React, and Devtool Bridge, including API restructuring, clearer runtime semantics references, and TypeScript-focused guidance.
Patch Changes
Section titled “Patch Changes”- Updated dependencies [56234c2]
- @rxova/journey-core@0.6.0
Minor Changes
Section titled “Minor Changes”-
16db5e3: Journey 0.5.0 is a full platform-level upgrade across core runtime, React bindings, and devtools. This 0.5.0 release focuses on deterministic flow behavior, stronger typing, cleaner APIs, and better observability/debuggability.
Section titled “@rxova/journey-core”@rxova/journey-coreNew and improved
Section titled “New and improved”- New canonical snapshot shape with
history.timeline+history.indexpointer model. - Deterministic pointer navigation APIs:
goToPreviousStep(steps?),goToLastVisitedStep(). - Convenience helpers:
goToNextStep(),completeJourney(payload?),terminateJourney(payload?). - Built-in fallback semantics for
back/goToPreviousStepevent sends when no explicit transition matches. - Strongly typed transition builder ergonomics via
createTransitionsandtxhelpers (toComplete,toTerminate, branching builders). - First-match-wins transition execution preserved and clarified for reliability.
- Typed async transition phases exposed in snapshot:
idle,evaluating-when,error. - Metadata is now first-class at runtime via
snapshot.stepMetaandupdateStepMetadata(stepId, updater). - Typed observability stream via
subscribeEvent(...)with lifecycle/navigation/metadata events. - Expanded persistence model with versioning/migration support and safer hydration of invalid data.
Breaking changes
Section titled “Breaking changes”- v1 top-level
timeline/indexsnapshot fields removed. HISTORY_TARGETremoved.- Legacy history helpers removed (
trimHistory,clearHistory, overflow options). - Persistence now targets v2 snapshot structure and should be migrated with
migrate(...)when needed.
Section titled “@rxova/journey-react”@rxova/journey-reactNew and improved
Section titled “New and improved”- Bindings-first architecture is now the default.
createJourneyBindings(journey)returns typedProvider,StepRenderer,useJourneyApi,useJourneySnapshot, anduseJourneyMachine.- Journey typing is captured once at bindings creation time; hook callsites no longer need per-call generics.
useJourneyApi()now delegates to machine-level navigation helpers (goToNextStep,completeJourney,terminateJourney, pointer APIs).- Imperative jumps remain available using event send:
api.send({ type: "goToStepById", stepId })andapi.send({ type: "goToStepById", stepId, payload }). resetOnJourneyChangebehavior is explicitly supported for intentional machine resets when journey definition identity changes.
Breaking changes
Section titled “Breaking changes”- Legacy global React hooks/components API removed in favor of bindings-first usage.
goToStepById(...)is no longer a dedicateduseJourneyApihelper; useapi.send({ type: "goToStepById", ... }).- Existing apps that called old global hooks/components or helper methods must migrate to bindings APIs.
Section titled “@rxova/journey-devtools-bridge”@rxova/journey-devtools-bridgeNew and improved
Section titled “New and improved”- Protocol remains version
3(no protocol version bump in this release). - Richer command set for runtime control:
goToNextStep,terminateJourney,completeJourney,goToStepById,goToPreviousStep,goToLastVisitedStep,updateStepMetadata,send,resetJourney,clearStepError. - Snapshot payloads now include full v2 runtime state:
currentStepId,history.timeline,history.index,context,visited,stepMeta,status,async. - Safer runtime defaults: bridge enabled by default in non-production; disabled by default in production unless explicitly enabled; commands disabled by default in production unless explicitly enabled.
Breaking changes
Section titled “Breaking changes”- Consumers should align command/snapshot assumptions with current protocol v3 shape.
- Tooling relying on old snapshot/history shape must migrate to
history.timelineandhistory.index.
Migration checklist
Section titled “Migration checklist”- Update core snapshot reads from v1 fields to v2 fields (
snapshot.timeline->snapshot.history.timeline,snapshot.index->snapshot.history.index). - Replace removed history APIs (
trimHistory,clearHistory, overflow options) with pointer navigation APIs. - Migrate persisted snapshots to v2 shape (or provide
persistence.migrate). - Move React usage to bindings-first patterns (
createJourneyBindings+ bound hooks/components). - Replace
api.goToStepById(...)calls withapi.send({ type: "goToStepById", ... }). - Update devtools integrations to current protocol v3 command/snapshot structures.
- This release is intentionally comprehensive and includes updated docs, examples, devtools integration notes, and test coverage for the new model.
- Package versions are set to
minorso the fixed published package group bumps from0.4.0to0.5.0. - App package versions are also aligned to
0.5.0forapps-docsandapps-devtools.
- New canonical snapshot shape with
Patch Changes
Section titled “Patch Changes”- Updated dependencies [16db5e3]
- @rxova/journey-core@0.5.0
Minor Changes
Section titled “Minor Changes”- 176007f: - Added full Chrome DevTools extension app
- Added new bridge package with protocol + bridge runtime.
- Added/expanded demo integration to exercise DevTools + bridge flows.
- Added Devtool documentation section.
- Updated docs UX in index.tsx, sidebars.ts, and search styling in styles.module.css.
- Added CI/CD workflows for docs/devtools and Chrome Web Store publishing in devtools.yml, devtools-publish.yml, docs.yml.
- Updated release/versioning config in config.json and scripts in package.json (pnpm run releases).
- Updated README files across packages.
Patch Changes
Section titled “Patch Changes”- @rxova/journey-core@0.4.0
Minor Changes
Section titled “Minor Changes”- a3a8ea0: fix: keep visited independent of history trimming and persist it across hydrates
Patch Changes
Section titled “Patch Changes”- Updated dependencies [a3a8ea0]
- @rxova/journey-core@0.3.0
Minor Changes
Section titled “Minor Changes”- 9cb812c: # Add history management and trimming controls
- Core:
historyoptions withmaxHistory,onOverflow, and manualtrimHistory/clearHistory. - React: pass
historyoptions through<JourneyProvider>and expose trim/clear inuseJourneyAPI. - Docs: clarify history/visited behavior and overflow reasons.
- Core:
Patch Changes
Section titled “Patch Changes”- Updated dependencies [9cb812c]
- @rxova/journey-core@0.2.0