Published November 2, 2026
Flutter 3.47.9 Hotfix Fixes Windows Path Crashes, Pub Workspace Tests, and Text Selection Menus
Flutter 3.47.9 reached the stable channel on October 29, 2026. The release is a hotfix in the strictest sense: no new widgets, no rendering changes, no platform feature work. It carries three bug fixes, each one addressing a crash or an API dead end that had no workaround for the teams hitting it.
The release follows 3.47.8, which was a security update responding to compromised eMudhra intermediate certificates. That patch changed trust behaviour inside the Dart runtime. This one is closer to housekeeping, and the three items it repairs say something about where Flutter teams are actually spending their debugging hours in late 2026: Windows build paths, monorepo test rigs, and text editing extension points.
The Windows Path Crash
The first fix addresses issue 194570. When a path or command exceeded the legacy 260 character limit on Windows, the operating system surfaced OS Error 206 and `flutter_tools` responded by throwing an unhandled `ProcessPackageException` or `FileSystemException`. The tool did not explain itself, did not name the offending path, and did not exit cleanly. It simply collapsed.
That failure mode is expensive because of when it appears. Long paths in a Flutter project come from ordinary causes: a deep checkout directory, a nested package under a monorepo, generated plugin registrants inside a build folder, a long pub cache location, or a CI agent that creates temporary directories with random suffixes. None of those are exotic, and all of them surface late in a build rather than at configuration time.
After the patch, the tool exits with an actionable error instead of an unhandled exception, which means the failure names the path that broke the limit. That difference is small on paper and large in practice, because a named path can be shortened or relocated. A stack trace pointing at a package exception cannot.
- Run `flutter upgrade` and confirm with `flutter --version` before debugging anything else
- Keep project roots short on Windows, since every nested build path inherits the prefix
- Enable long path support on Windows 10 and 11 where policy allows it, and mirror that setting on CI runners
- Watch for this in build agents that create temporary workspace directories with generated names
Native Assets in Pub Workspaces
The second fix is issue 192933, and it is the one most likely to have blocked a team outright. Running `flutter test` inside a pub workspace, a monorepo, or a directory reached through a symlink caused native assets compilation to crash with a `StateError`. The failure occurred on every platform, not just Windows.
Pub workspaces and native assets are both relatively new mechanisms, and they meet in a place where path resolution is least forgiving. A workspace hoists dependency resolution to a shared root while individual packages keep their own directories. Native asset compilation then has to map those directories back to real files. Symlinks and monorepo layouts break the assumption that a package path is expressed the same way everywhere.
For teams that had already migrated to workspaces, the practical effect was that unit tests could not run at all in the affected layout. That is a heavier cost than a failing build, because it removes the feedback loop rather than slowing it down. The patch resolves the crash, and the workaround of collapsing to a single package or removing symlinks from the test path is no longer necessary.
An Extension Point for Custom Text Menus
The third fix, issue 193527, is an API design correction. Packages that build custom text selection menus had no way to add an action such as Translate without breaking downstream code. The existing `ContextMenuButtonType` enum forced every consumer to write exhaustive switches, so adding a value was a breaking change by construction. Flutter 3.47.9 adds `ContextMenuButtonKind`, an extensible type that lets an action identify itself without invalidating every switch statement in the ecosystem.
This is the smallest of the three changes and the most interesting from an API stewardship angle. Exhaustive switches over enums are a good safety property inside a single codebase and a liability across a package boundary. The new kind type keeps the safety where it belongs while leaving room for third party actions to exist.
- Package authors can ship new menu actions without a major version bump
- Applications with hand written switches over `ContextMenuButtonType` keep compiling
- Custom selection toolbars built on the old type should migrate when their package does
Why Hotfixes Keep Arriving
Flutter's stated policy is to update stable quarterly and to hotfix only the latest stable version when a bug or regression justifies the risk. That policy is visible in the shape of this release. Three fixes, one changelog entry each, no migration guides, no announcement post beyond the release feed.
The 3.47 line has now received 3.47.5 through 3.47.9 in a matter of weeks, covering iOS 27 debugging crashes, a Windows production hang, a Widget Previewer crash, the certificate advisory, and now these three items. Anyone still sitting on 3.47.3 or earlier should treat the current patch level as the baseline for the quarter rather than catching up one fix at a time.
The next quarterly feature release remains in development, and Dart 3.14 has not shipped to stable yet, so 3.47.9 is where production Flutter sits for now. Upgrading is a single command and a rebuild, and for Windows and monorepo teams it removes a class of failure that produced no useful information at the moment it happened.