2026.04.30
Fix fallbackActivity callback being invoked on every initialization regardless of route matching outcome. Restored the pre-1.8.0 contract: the callback is now called only when no route matches currentPath. Apps that perform side effects in this callback (e.g. Sentry logging for unknown deep links) no longer fire on successful matches. 2c5786a (opens in a new tab)
Released packages:
2026.04.15
Add lifecyclePlugin and useFocusEffect hook for activity focus/blur lifecycle 39dbf81 (opens in a new tab)
useFocusEffect(callback)hook to register per-activity focus/blur callbacks- Detection and invocation in plugin
onChanged(outside React render cycle) callbackRefpattern for always-latest callback withoutuseCallback- Error isolation via
runSafely()for all user callbacks
Released packages:
Add README documentation for plugin-lifecycle fce2047 (opens in a new tab)
Released packages:
2026.04.03
Fix intermittent incorrect transition state when transitionDuration is set to 0 by ensuring now >= eventDate in the initial aggregate call within dispatchEvent. 0160f82 (opens in a new tab)
Released packages:
2026.03.30
Add blockerPlugin and useBlocker hook for navigation blocking c740c5e (opens in a new tab)
useBlocker({ shouldBlock, onBlocked })hook to declare blocking policies per activity- Blocking set model: multiple blockers can block a navigation, all must
proceed()for it to execute - Only blockers from active (
isActive: true) activities are evaluated onBlockednotifications are serialized in navigation occurrence order (no re-entrancy)- Error isolation: one blocker's
onBlockedthrowing does not prevent other blockers from being notified - Plugin-level
onErroroption for custom error handling (defaults toconsole.error) - Blocker cleanup on component unmount; previously captured
proceedremains callable
Released packages:
feat(plugin-sentry): add Sentry browser tracing plugin for Stackflow navigation events 7ad3502 (opens in a new tab)
Released packages:
2026.03.13
fix(core): prevent duplicate setInterval in dispatchEvent 4d3b294 (opens in a new tab)
Released packages:
fix(react-ui-core): clamp swipe-back dx to prevent left-drag screen movement b9c1946 (opens in a new tab)
Released packages:
2026.01.29
Add encode option to Route interface for converting activity params to URL string params 45fb7ba (opens in a new tab)
Released packages:
2026.01.07
Add an option to skip default history setup transition a7d0c01 (opens in a new tab)
Released packages:
2026.01.06
Improve scheduling of Activity preparation tasks by marking them as passive effects. 57fd2da (opens in a new tab)
Released packages:
Make structured activities defined by other than the standard constructor can be preloaded and cached 4b894ae (opens in a new tab)
Released packages:
2025.12.16 #2
Attach state tracking instruments to original promise when creating SyncInspectablePromises with Promises 43cd76c (opens in a new tab)
Released packages:
2025.12.16
utilize synchronously inspectable promise to optimize suspense fallback rendering 3cb6e33 (opens in a new tab)
Released packages:
Remove data loader cache f05ae23 (opens in a new tab)
Released packages:
2025.12.12
Add an option for customizing error boundary in ErrorHandler of structured activity components f159bd4 (opens in a new tab)
Released packages:
2025.11.28
Add interface to inject appBar.minHeight d76f1d1 (opens in a new tab)
Released packages:
2025.11.27
Fix edge height 151b13f (opens in a new tab)
Released packages:
Expose interfaces to modify width of edge 4e4c0d9 (opens in a new tab)
Released packages:
Parameterize default appscreen transition offset and appscreen dim height 151b13f (opens in a new tab)
Released packages:
Export StaticActivityComponentType type hepler 7907371 (opens in a new tab)
Released packages:
2025.11.25
Expose interfaces to modify dimensions of AppBar a136f96 (opens in a new tab)
Released packages:
2025.10.23
Fix SSR compatibility by adding getServerSnapshot parameter to useSyncExternalStore. This resolves the "Missing getServerSnapshot, which is required for server-rendered content" error in SSR environments. 567352a (opens in a new tab)
Released packages:
2025.10.22
Fix swipe back gesture during push/pop transitions by using capture phase event listeners to prevent touch events from reaching child elements during transitions fe8b8fe (opens in a new tab)
Released packages:
- 📦 @stackflow/plugin-basic-ui@1.16.1 (opens in a new tab)
- 📦 @stackflow/react-ui-core@1.3.3 (opens in a new tab)
2025.10.21
Export AppBar 99eff56 (opens in a new tab)
Released packages:
2025.10.16
Add ActivityComponentType paramterized by params ead4e78 (opens in a new tab)
Released packages:
2025.10.02
Expose events used to build a stack via Stack.events 83ee5ed (opens in a new tab)
Released packages:
- 📦 @stackflow/core@1.3.0 (opens in a new tab)
- 📦 @stackflow/plugin-history-sync@1.8.0 (opens in a new tab)
2025.09.05
StructuredActivityComponentType is added. f298988 (opens in a new tab)
Released packages:
- 📦 @stackflow/plugin-history-sync@1.8.0 (opens in a new tab)
- 📦 @stackflow/plugin-preload@1.4.4 (opens in a new tab)
- 📦 @stackflow/react@1.7.0 (opens in a new tab)
2025.08.22
Fix scroll behavior of AppScreen by attaching refs on paperContent 733ebcb (opens in a new tab)
Released packages:
2025.08.18
Add prefetch API for lazy activity component and loader data. d906597 (opens in a new tab)
Released packages:
2025.08.15
Fix a bug that entrance transition is not applied. c391bb7 (opens in a new tab)
Released packages:
2025.08.10
Allow components style to be customized directly 658c770 (opens in a new tab)
Released packages:
2025.07.28
fix(react): conditionally log warnings in browser environment 2dc74ad (opens in a new tab)
Released packages:
2025.05.29
fix(plugin-basic-ui): update dependencies 371a39c (opens in a new tab)
Released packages:
fix(react-ui-core): add preventSwipeBack into effect dependencies d2c50f3 (opens in a new tab)
Released packages:
2025.05.15
fix(plugin-basic-ui): prevent touch events while transitioning for other basic components aef952a (opens in a new tab)
Released packages:
- 📦 @stackflow/plugin-basic-ui@1.14.1 (opens in a new tab)
- 📦 @stackflow/react-ui-core@1.3.1 (opens in a new tab)
2025.05.12
fix(react): remove unused dependencies b9dc68a (opens in a new tab)
Released packages:
2025.04.09
Support full screen gradient background and introduce new app bar entrance type "cover" a7650d4 (opens in a new tab)
Released packages:
- 📦 @stackflow/plugin-basic-ui@1.14.0 (opens in a new tab)
- 📦 @stackflow/react-ui-core@1.3.0 (opens in a new tab)
2025.03.24
fix(react-ui-core): consider nullable stack 5c4b96c (opens in a new tab)
Released packages:
- 📦 @stackflow/plugin-basic-ui@1.13.1 (opens in a new tab)
- 📦 @stackflow/react-ui-core@1.2.3 (opens in a new tab)
2025.03.14
fix(plugin-basic-ui,react-ui-core): prevent touch events while transitioning 8593b5a (opens in a new tab)
Released packages:
- 📦 @stackflow/plugin-basic-ui@1.13.0 (opens in a new tab)
- 📦 @stackflow/react-ui-core@1.2.2 (opens in a new tab)
2025.03.11
To support various background designs, enable users to configure the background-image option in AppScreen, AppBar, BottomSheet and Modal. 91413b6 (opens in a new tab)
Released packages:
2025.02.24
fix(react): pause lazy component transition when no loader defined 7751e60 (opens in a new tab)
Released packages:
2025.02.13
Supports dynamic import for activities, and delays transition effects while loading an activity or waiting for a loader response cfa7af8 (opens in a new tab)
Released packages:
- 📦 @stackflow/core@1.2.0 (opens in a new tab)
- 📦 @stackflow/plugin-basic-ui@1.12.0 (opens in a new tab)
- 📦 @stackflow/react@1.5.0 (opens in a new tab)
Add missing logics of considering targetActivityId while updating using update functions. 82b52b0 (opens in a new tab)
Released packages:
2025.01.22
fix: add decode() interface to Config and support path: string[] e323ce3 (opens in a new tab)
Released packages:
- 📦 @stackflow/config@1.2.1 (opens in a new tab)
- 📦 @stackflow/link@1.6.1 (opens in a new tab)
- 📦 @stackflow/plugin-history-sync@1.7.1 (opens in a new tab)
- 📦 @stackflow/react@1.4.2 (opens in a new tab)
2025.01.20
Made divideBy to be friendly to type inference. 5fc54cb (opens in a new tab)
Released packages:
2024.12.18
chore(plugin-basic-ui): update react-ui-core dependency 151631b (opens in a new tab)
Released packages:
feat(react-ui-core, plugin-basic-ui): add onSwipe* hooks and add data attributes and css variables dc35bfc (opens in a new tab)
Released packages:
- 📦 @stackflow/plugin-basic-ui@1.11.0 (opens in a new tab)
- 📦 @stackflow/react-ui-core@1.2.0 (opens in a new tab)
feat(react-ui-core): add swipe back ratio css var in other activity roots and add transitionend state in useStyleEffectSwipeBack() 48693e7 (opens in a new tab)
Released packages:
2024.12.16
Change to the latest AppBar style f9f1399 (opens in a new tab)
Released packages:
2024.11.19
fix(plugin-basic-ui): add max() in support query eb9ed7c (opens in a new tab)
Released packages:
fix(plugin-basic-ui): add maxWidth option in <Modal /> eb4578f (opens in a new tab)
Released packages:
2024.11.07
feat(link): disable long press behavior in iOS db2aa80 (opens in a new tab)
Released packages:
2024.10.23
move <StackProvider /> up so that useStack() can be used in Plugin.wrapStack a4a7366 (opens in a new tab)
Released packages:
2024.09.26
add config property in loader args 412de46 (opens in a new tab)
Released packages:
- 📦 @stackflow/config@1.2.0 (opens in a new tab)
- 📦 @stackflow/link@1.5.0 (opens in a new tab)
- 📦 @stackflow/react@1.4.0 (opens in a new tab)
2024.09.24
feat: Support <Link /> in Future API 7b1780f (opens in a new tab)
Released packages:
- 📦 @stackflow/config@1.2.0 (opens in a new tab)
- 📦 @stackflow/link@1.5.0 (opens in a new tab)
- 📦 @stackflow/plugin-history-sync@1.7.0 (opens in a new tab)
- 📦 @stackflow/react@1.4.0 (opens in a new tab)
2024.09.23
fix(plugin-history-sync): replace json-cycle with flatted dc26742 (opens in a new tab)
Released packages:
2024.09.11
feat(plugin-basic-ui): add interface to access z-index about AppScreen 5b1865e (opens in a new tab)
Released packages:
2024.09.03
chore(react): add typing for step action parameter 95f2ae8 (opens in a new tab)
Released packages:
2024.08.30
fix: pass initial context to <MainRenderer /> 46ac359 (opens in a new tab)
Released packages:
2024.08.21
fix(plugin-history-sync): serialize state before pushState, replaceState 31dc20f (opens in a new tab)
Released packages:
2024.08.14
feat(core,react): add targetActivityId option 667570b (opens in a new tab)
Released packages:
fix(react): specify .mjs extension for esm exports 1fc97b4 (opens in a new tab)
Released packages:
2024.08.08
fix: enable cyclic dependency and fix promise return in loader 96ff22d (opens in a new tab)
Released packages:
- 📦 @stackflow/core@1.0.14 (opens in a new tab)
- 📦 @stackflow/plugin-history-sync@1.6.1 (opens in a new tab)
[Future API] wrap loader return value with use() in useLoaderData() 5ac2798 (opens in a new tab)
Released packages:
2024.08.07
Extract core react hooks as a "@stackflow/react-ui-core" package e3dbaac (opens in a new tab)
Released packages:
- 📦 @stackflow/plugin-basic-ui@1.9.0 (opens in a new tab)
- 📦 @stackflow/react-ui-core@1.1.0 (opens in a new tab)
2024.08.01
fix(plugin-basic-ui): calculate app screen height correctly with safearea 3e8df1b (opens in a new tab)
Released packages:
refactor(plugin-preload): moved a dependency from dependencies to peerDependencies 658510f (opens in a new tab)
Released packages:
2024.07.31
Change stack() to stackflow() in Future API fc2061a (opens in a new tab)
Released packages:
change extension esm package .mjs to .js 7df613a (opens in a new tab)
Released packages:
- 📦 @stackflow/config@1.1.0 (opens in a new tab)
- 📦 @stackflow/plugin-history-sync@1.6.0 (opens in a new tab)
- 📦 @stackflow/react@1.2.0 (opens in a new tab)
feat(plugin-history-sync): sort routes by computed score e9bb029 (opens in a new tab)
Released packages:
2024.07.24
fix(plugin-basic-ui): remove will-change property bef6214 (opens in a new tab)
Released packages:
2024.07.23
change asterisk(*) priority to lowest 7788fbc (opens in a new tab)
Released packages:
2024.07.22
style(plugin-basic-ui): move top padding to margin 3872e44 (opens in a new tab)
Released packages:
2024.07.19
use Biome for lint instead of ESLint and fix fixable errors edfffda (opens in a new tab)
Released packages:
- 📦 @stackflow/compat-await-push@1.1.9 (opens in a new tab)
- 📦 @stackflow/core@1.0.12 (opens in a new tab)
- 📦 @stackflow/link@1.4.1 (opens in a new tab)
- 📦 @stackflow/plugin-basic-ui@1.8.0 (opens in a new tab)
- 📦 @stackflow/plugin-devtools@0.1.9 (opens in a new tab)
- 📦 @stackflow/plugin-google-analytics-4@1.1.11 (opens in a new tab)
- 📦 @stackflow/plugin-history-sync@1.5.2 (opens in a new tab)
- 📦 @stackflow/plugin-map-initial-activity@1.0.7 (opens in a new tab)
- 📦 @stackflow/plugin-preload@1.3.1 (opens in a new tab)
- 📦 @stackflow/plugin-renderer-basic@1.1.9 (opens in a new tab)
- 📦 @stackflow/plugin-renderer-web@1.1.9 (opens in a new tab)
- 📦 @stackflow/plugin-stack-depth-change@1.1.3 (opens in a new tab)
- 📦 @stackflow/react@1.1.10 (opens in a new tab)
feat(plugin-basic-ui): export useStyleEffect() 0f882e8 (opens in a new tab)
Released packages:
2024.07.09
accept only serializable parameters when making domain event 7df36f1b (opens in a new tab)
Released packages:
- 📦 @stackflow/core@1.0.11 (opens in a new tab)
- 📦 @stackflow/plugin-history-sync@1.5.1 (opens in a new tab)
2024.05.27
Expose paperRef from <BottomSheet /> and add !important paper exit transition 207b8490 (opens in a new tab)
Released packages:
2024.05.24
fix(react): infer BaseActivities from given activities 27246ad7 (opens in a new tab)
Released packages:
2024.05.22
Pass initial search params to fallback activity as an activity params cea51375 (opens in a new tab)
Released packages:
2024.04.24
theme branching via :root's dataset 20d19546 (opens in a new tab)
Released packages:
2024.02.13
feat: add decode interface 6ad362f7 (opens in a new tab)
Released packages:
- 📦 @stackflow/link@1.4.0 (opens in a new tab)
- 📦 @stackflow/plugin-history-sync@1.4.0 (opens in a new tab)
- 📦 @stackflow/plugin-preload@1.3.0 (opens in a new tab)
- 📦 @stackflow/react@1.1.8 (opens in a new tab)
Resolved issue where urlPatternOptions props were passed to anchor tag. 43a2f2a4 (opens in a new tab)
Released packages:
pass urlPatternOptions to usePreloader() hook 8c774239 (opens in a new tab)
Released packages:
2024.02.05
Sort routes by variable count and refactor useRoutes(), normalizeRouteInput() function 36613e35 (opens in a new tab)
Released packages:
- 📦 @stackflow/link@1.4.0 (opens in a new tab)
- 📦 @stackflow/plugin-history-sync@1.4.0 (opens in a new tab)
- 📦 @stackflow/plugin-preload@1.3.0 (opens in a new tab)
2024.01.30
fix(core)!: delegate overrideInitialEvents to makeCoreStore a32a7e09 (opens in a new tab)
Released packages:
2024.01.22
fix(plugin-history-sync): request history tick on init 99c34fa4 (opens in a new tab)
Released packages:
fix(plugin-history-sync)!: reduce loop count for parsing state 45cf3f4d (opens in a new tab)
Released packages:
2024.01.19
fix(plugin-stack-depth-change): invoke onDepthChanged only when transition is done da18f07e (opens in a new tab)
Released packages:
2024.01.16
fix hydration mismatch warning in server-side rendering d4e86c55 (opens in a new tab)
Released packages:
fix(plugin-history-sync): fix history queue on init f3b2d720 (opens in a new tab)
Released packages:
2023.12.23
feat(plugin-basic-ui): export css variables from components dd5be87f (opens in a new tab)
Released packages:
2023.12.22
feat(plugin-stack-depth-change): invoke callback only when depth level has changed a2ecfaf4 (opens in a new tab)
Released packages:
2023.12.01
feat(plugin-basic-ui): update IconBack component (#423) 7dca11ee (opens in a new tab)
Released packages: