Description
Add the ability to drag a tab out of the tab bar to create a separate OS window (like Chrome/VS Code), and drag tabs between windows to merge them.
Built on top of the desktop tabbed instances feature (Phase 1, completed).
Implementation Notes
- Use
desktop_multi_window package for macOS/Windows multi-window support
- Each window runs its own Flutter engine with independent widget tree
- Tab state serialization enables moving tabs between windows
- Shared services (auth, permissions, chat) are process-global — no per-window scoping needed
- macOS: change
applicationShouldTerminateAfterLastWindowClosed to false
Key changes
pubspec.yaml — add desktop_multi_window
lib/navigation/window_manager_service.dart — NEW, multi-window lifecycle
lib/widgets/tab_bar_widget.dart — Draggable tabs + DragTarget for receiving
macos/Runner/AppDelegate.swift — multi-window support
lib/main.dart — handle window creation args
Context
See plan file: .claude/plans/curried-beaming-petal.md (Phase 2 section) for full architectural details.
Platform
- macOS (primary)
- Windows (when builds resume)
Description
Add the ability to drag a tab out of the tab bar to create a separate OS window (like Chrome/VS Code), and drag tabs between windows to merge them.
Built on top of the desktop tabbed instances feature (Phase 1, completed).
Implementation Notes
desktop_multi_windowpackage for macOS/Windows multi-window supportapplicationShouldTerminateAfterLastWindowClosedtofalseKey changes
pubspec.yaml— adddesktop_multi_windowlib/navigation/window_manager_service.dart— NEW, multi-window lifecyclelib/widgets/tab_bar_widget.dart—Draggabletabs +DragTargetfor receivingmacos/Runner/AppDelegate.swift— multi-window supportlib/main.dart— handle window creation argsContext
See plan file:
.claude/plans/curried-beaming-petal.md(Phase 2 section) for full architectural details.Platform