Repository navigation
Open
Labels
📜Issue was posted to Discord. Remove to have the issue reannounced. (For "design doc", "emergency")Issue was posted to Discord. Remove to have the issue reannounced. (For "design doc", "emergency")P1High-priority issues at the top of the work listHigh-priority issues at the top of the work listdesign docTracks a design discussion documentTracks a design discussion documentteam-toolOwned by Flutter Tool teamOwned by Flutter Tool teamtriaged-toolTriaged by Flutter Tool teamTriaged by Flutter Tool team
Description
Overview
Note
This issue tracks an experimental prototype implementation of an out-of-process tool extensibility architecture for flutter_tools.
The goal of this prototype is to evaluate allowing custom, third-party, and out-of-tree platforms to extend Flutter CLI commands (doctor, config, create, devices, build, assemble, and run) through dedicated worker isolates without embedding platform-specific logic into the host tool codebase.
Architecture Highlights
- Pub Workspace Architecture: Encapsulates core DTOs, extension protocol contracts, and platform prototypes in dedicated sub-packages (
flutter_tools_core,flutter_tools_extension,flutter_tools_extension_linux_prototype). - Isolated Execution: Extension entrypoints run in dedicated worker isolates over a JSON-RPC protocol.
- Dynamic CLI Rebuilding: Commands mix in
ExtensionArgParserMixinto dynamically re-parse flags and register subcommands based on loaded extensions. - Pure Dependency Injection: Eliminates reliance on ambient
AppContext/ globals for extension managers.
Prototype Phases
- [tool_extensibility] Prototype Phase 1: Pub Workspace setup and sub-package structure #190745 - [tool_extensibility] Prototype Phase 1: Pub Workspace setup and sub-package structure
- [tool_extensibility] Prototype Phase 2: Generic RPC protocol base and isolate runner infrastructure #190746 - [tool_extensibility] Prototype Phase 2: Generic RPC protocol base and isolate runner infrastructure
- [tool_extensibility] Prototype Phase 3: DiagnosticsExtension and flutter doctor integration #190747 - [tool_extensibility] Prototype Phase 3: DiagnosticsExtension and flutter doctor integration
- [tool_extensibility] Prototype Phase 4: ConfigurationExtension and flutter config dynamic options #190748 - [tool_extensibility] Prototype Phase 4: ConfigurationExtension and flutter config dynamic options
- [tool_extensibility] Prototype Phase 5: TemplateService and dynamic ArgParser integration for flutter create #190749 - [tool_extensibility] Prototype Phase 5: TemplateService and dynamic ArgParser integration for flutter create
- [tool_extensibility] Prototype Phase 6: DeviceService and dynamic ExtensionBackedDevice discovery #190750 - [tool_extensibility] Prototype Phase 6: DeviceService and dynamic ExtensionBackedDevice discovery
- [tool_extensibility] Prototype Phase 7: BuildService, dynamic target registration, and flutter build integration #190752 - [tool_extensibility] Prototype Phase 7: BuildService, dynamic target registration, and flutter build integration
- [tool_extensibility] Prototype Phase 8: App lifecycle management, run, VM Service connection, and hot reload #190753 - [tool_extensibility] Prototype Phase 8: App lifecycle management, run, VM Service connection, and hot reload
- [tool_extensibility] Prototype Phase 9: Dynamic plugin resolution and native registrant generation #190754 - [tool_extensibility] Prototype Phase 9: Dynamic plugin resolution and native registrant generation
Reacted by Valentin Hăloiu
Metadata
Metadata
Assignees
Labels
📜Issue was posted to Discord. Remove to have the issue reannounced. (For "design doc", "emergency")Issue was posted to Discord. Remove to have the issue reannounced. (For "design doc", "emergency")P1High-priority issues at the top of the work listHigh-priority issues at the top of the work listdesign docTracks a design discussion documentTracks a design discussion documentteam-toolOwned by Flutter Tool teamOwned by Flutter Tool teamtriaged-toolTriaged by Flutter Tool teamTriaged by Flutter Tool team
Activity
[flutter_tools] Setup Pub Workspace and package structure for flutter…
[flutter_tools] Implement generic extension protocol base and isolate…
[flutter_tools] Verify sibling extension fault isolation in Extension…
[flutter_tools] Enforce file scheme in CleanEnvironment and log exten…
[flutter_tools] Update extension build tests for required outputDir
[flutter_tools] Add CleanService and flutter clean support for tool e…
[flutter_tools] Unify command discovery and safe-mode flag evaluation
[flutter_tools] Address review comments on ExtensionPackageConfig and…
[flutter_tools] Resolve global options following subcommands and asse…
[flutter_tools] Share FlutterProject metadata with tool extensions vi…
[flutter_tools] Simplify extension protocol to JSON-RPC notifications…
47 remaining items
[flutter_tools] Guard getLogReader against synchronous connection dis…
[flutter_tools] Move CpuArch to flutter_tools_core and define HostPla…
[flutter_tools] Add ToolExtensionException, exit() guard, graceful sh…
[flutter_tools] Refine emulator platform resolution and daemon compat
[flutter_tools] Support LocalArtifactDependency and per-extension con…
[flutter_tools] Add executable extension artifacts and device wiring
[flutter_tools] Simplify ExtensionKernelCompiler to workspace-local c…
[flutter_tools] Wire assemble stampUri tracking and simplify artifact…
[flutter_tools] Simplify emulator creation routing and daemon wiring
[flutter_tools] Replace TargetPlatform.simpleName with cpuArch (flutt…
[flutter_tools] Rename ExtensionDepfile to RawDepfile
[flutter_tools] Fix Xcode-less macOS CI check in tool_extensions_test
[flutter_tools] Rename RawDepfile to Depfile and add allowMalformed
[flutter_tools] Harden extension plugins and Dart hooks interop
[flutter_tools] Simplify extension native assets and assemble wiring