NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #2686 most downloaded on pub.dev
Give your AI Agent eyes and hands inside your Flutter app.
Last release 1 months ago
01 Sep 2026
Ships unpredictably
gaps range from 8 days to 5 months
Nearly every release is documented
notes for 56 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
8 months old
84 releases · first in 2026
One column per month.
feat: named server registry and --server flag for CLI commands by @vinifig in #38
Full Changelog: v0.9.35...v0.9.37
Ships seven fixes that were merged months ago but never released, plus npm packaging and release-pipeline repairs
The v0.9.24 and v0.9.36 tags were cut from commits that are not on main, so
everything merged since v0.9.35 stayed unreleased. This version delivers it all.
Previously merged but never shipped
ENOEXEC, Unknown system error -8) instead of crashing (#49, #55)tap/enter_text by text or key, so
a pushed screen is no longer bypassed for an identical label on the screen
behind it (#53)hot_reload / hot_restart now drive Flutter Tools' reloadSources and
hotRestart services, so code changes actually apply (#58)press_key passes modifiers through the server, and emits no character while
a modifier is heldscroll_to, scroll direction and batch settle--server flag for CLI commands (#38)Server robustness
npm package
lib/ grew to 100
files, so the fallback ran a v0.2.0 server. They are now regenerated on every
publish, which restores tap by ref and by coordinates (#52)flutter pub get failed instead of swallowing it (#45, #49, #50)Release tooling
release.sh verifies the release is cut from origin/main and pushes
atomically, so a tag can no longer land on a commit that is not on the branchrelease.sh refuses to publish the TODO CHANGELOG placeholder, which ten
previous releases shipped as their entire changelogrelease.sh is now the only release entrypoint; three scripts that bypassed
it were removedFix EACCES: ensure native binary has execute permission before spawn
Fix EACCES: ensure native binary has execute permission before spawn
Fix EACCES: ensure native binary has execute permission before spawn
Fix inspect empty text, Flutter 3.38+ URI detection, MCP stdout pollution, Homebrew arm64 on Intel, Windows flutter command
Fix inspect empty text, Flutter 3.38+ URI detection, MCP stdout pollution, Homebrew arm64 on Intel, Windows flutter command
Fix inspect empty text, Flutter 3.38+ URI detection, MCP stdout pollution, Homebrew arm64 on Intel, Windows flutter command
Full Changelog : v0.9.33...v0.9.34
Full Changelog: v0.9.33...v0.9.34
notifications/tools/list_changed support + idb integration for native iOS automation
Full Changelog : v0.9.32...v0.9.33
Full Changelog: v0.9.32...v0.9.33
fix dart format CI check across all files
Full Changelog : v0.9.31...v0.9.32
Full Changelog: v0.9.31...v0.9.32
Full Changelog : v0.9.30...v0.9.31
Full Changelog: v0.9.30...v0.9.31
fix scroll_to crash on unmounted context (#28), improve setup error messages (#15)
Full Changelog : v0.9.29...v0.9.30
Full Changelog: v0.9.29...v0.9.30
Fix Gemini/Vertex AI "Duplicate function declaration" error (issue #32)
get_network_requests definition — direct root cause of Gemini 400 errorconnectionOnlyTools set and geminiToolLimit constant in ToolRegistrytest/tool_registry_test.dart — 17 unit tests covering tool filtering behaviorFull Changelog : v0.9.28...v0.9.29
Full Changelog: v0.9.28...v0.9.29
Fix: add connect_openclaw_browser and connect_webmcp to tool_registry
connect_openclaw_browser and connect_webmcp in tool_registry.dart so they appear in tools/listFull Changelog : v0.9.27...v0.9.28
Full Changelog: v0.9.27...v0.9.28
Add connect_openclaw_browser and connect_webmcp tools; fix OpenClaw plugin binary path
connect_openclaw_browser tool: instant connection to OpenClaw's built-in Chrome (port 18800, no launch needed)connect_webmcp tool: Chrome 146+ native WebMCP support with auto-detection and CDP fallback~/.pub-cache/bin/flutter_skill instead of volatile /tmp/fs-*Full Changelog : v0.9.26...v0.9.27
Full Changelog: v0.9.26...v0.9.27
fix coordinate filtering, tap(ref) elem_ fix, Windows lock fallback, CLI error improvements
Added --chrome-port=N as an alias for --cdp-port=N for better compatibility
--chrome-port=N as an alias for --cdp-port=N for better compatibility--chrome-port parameter (previously threw FormatException)fix coordinate system: filter non-active routes, fix tap(ref: elem_NNN), fix off-screen tap detection
fix coordinate system: filter non-active routes, fix tap(ref: elem_NNN), fix off-screen tap detection
fix 6 UX issues: DTD error detection, wider port scan, connect_by_pid, stale session cleanup, screenshot save_to_file default
fix 6 UX issues: DTD error detection, wider port scan, connect_by_pid, stale session cleanup, screenshot save_to_file default
fix null check crash and stop auto-opening browser on RPC errors from target app
fix null check crash and stop auto-opening browser on RPC errors from target app
Support Chrome 146 WebMCP: discover and call navigator.modelContextTesting tools
Support Chrome 146 WebMCP: discover and call navigator.modelContextTesting tools
Auto-accept Chrome 146 remote debugging consent dialog
Auto-accept Chrome 146 remote debugging consent dialog
Fix Chrome 146 consent port: skip Origin header in WebSocket upgrade
Fix Chrome 146 consent port: skip Origin header in WebSocket upgrade
Support Chrome 146 consent-based remote debugging port
Support Chrome 146 consent-based remote debugging port
Session-copy profile: preserve user logins when Chrome 145+ blocks default profile debug port
Session-copy profile: preserve user logins when Chrome 145+ blocks default profile debug port
Fix Chrome 145+ silently ignoring --remote-debugging-port on default profile
Fix Chrome 145+ silently ignoring --remote-debugging-port on default profile
Remove Chrome for Testing dependency from CDP driver
Remove Chrome for Testing dependency from CDP driver
Fix Page.enable hang on chrome://newtab; auto-enable remote debugging
Fix Page.enable hang on chrome://newtab; auto-enable remote debugging
Auto-tick chrome remote debugging checkbox; no Chrome restart
Auto-tick chrome remote debugging checkbox; no Chrome restart
Restart existing Chrome with debug port; preserve user session
Restart existing Chrome with debug port; preserve user session
Auto-enable Chrome remote debugging when connecting via CDP
Auto-enable Chrome remote debugging when connecting via CDP
UX fixes: fill tool, press_key iOS fallback, go_back count, coordinate hint
UX fixes: fill tool, press_key iOS fallback, go_back count, coordinate hint
fill tool registered: fill was documented but threw Unknown tool: fill. Now maps to enter_text (clear + set value). Closes user-reported issue.press_key on iOS/Android: Added NativeDriver fallback so press_key works in Flutter VM Service mode on simulators/emulators (previously returned unsupported error). Enter key now triggers iOS search without needing CDP mode.enter_text without key: When called without key/ref, returns an actionable hint field pointing to inspect_interactive() instead of the confusing No TextField matching key 'null' found error.go_back with count: Accepts a count parameter to pop multiple routes in one call with 300 ms pauses between steps — replaces repeated go_back() chains.native_screenshot coordinate hint: Response now includes scale_factor and a coordinate_hint field that explains the physical→logical pixel conversion, eliminating manual coordinate guessing.C++ Bridge SDK (sdks/cpp/): Cross-platform native C++ automation bridge. Embeds a zero-dependency WebSocket server (RFC 6455) + JSON-RPC 2.0 dispatche
C++ desktop automation SDK
sdks/cpp/): Cross-platform native C++ automation bridge. Embeds a zero-dependency WebSocket server (RFC 6455) + JSON-RPC 2.0 dispatcher in your C++ app so AI agents can control it via the flutter-skill protocol. Closes #22.
screencapture for screenshots, AXUIElement for accessibility inspectionSendInput + GDI+ (screenshots) + GetForegroundWindowCMakeLists.txt) for all three platformsMulti-flavor app detection, fresh-install UX, Docker/Snap build fixes, CI smoke tests
Multi-flavor app detection, fresh-install UX, Docker/Snap build fixes, CI smoke tests
scan_and_connect now accepts flavor and device_id parameters. When multiple flavors run simultaneously, flutter-skill picks the correct instance instead of connecting randomly.Plugins directory not found warning on clean installs — silently skipped instead.ghcr.io/cirruslabs/flutter:stable so flutter pub get resolves Flutter SDK dependencies correctly.git config --global --add safe.directory /opt/flutter to resolve detected dubious ownership error in snapcraft builds.flutter pub global activate install works end-to-end.press_key for Flutter VM Service, pytest plugin, HarmonyOS SDK, CI smoke tests
press_key for Flutter VM Service, pytest plugin, HarmonyOS SDK, CI smoke tests
press_key now works when connected via VM Service (not just CDP/bridge). Calls the existing ext.flutter.flutter_skill.pressKey extension that was already registered in the target app but never wired from the CLI side. Fixes #21.sdks/python/): pytest plugin for AI-driven Flutter/web app automation. Provides a flutter_skill fixture that starts the MCP server and wraps all tools as Python methods with native pytest assertions (assert_visible, assert_text, assert_not_visible, find_element). Closes #14.sdks/harmonyos/): ArkTS bridge SDK (FlutterSkillAbility.ets) for HarmonyOS apps. Implements screenshot, tap, enter_text, press_key, scroll, go_back, get_current_route, inspect, get_logs over WebSocket on port 18118. Closes #13.dart pub global activate, then verifies --version, MCP initialize, and tools/list work correctly.Shadow DOM deep pierce for tap/snapshot, serve port reuse fix
Shadow DOM deep pierce for tap/snapshot, serve port reuse fix
tap text search now uses _dqAll('*') instead of a hardcoded tag list, so custom elements like Reddit's faceplate-button are found by text matchbutton/[role=button]/[type=submit] elements nested inside shadow rootsserve binds with shared: true (SO_REUSEADDR) to avoid TIME_WAIT "Address already in use" crashes on restartNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
CLI client commands, GitHub Pages docs, comprehensive platform guide
CLI client commands, GitHub Pages docs, comprehensive platform guide
nav, snap, screenshot, tap, type, key, eval, title, text, hover, upload, tools, call, waitdocs/site/ with auto-deploy workflowdocs/CLI_CLIENT.md) with scripting examples and CI/CD patternsiOS native automation + React Native support + bridge reliability
iOS native automation + React Native support + bridge reliability
native_long_press, native_gesture, native_press_key, native_key_combo, native_button, native_list_simulatorsnative_video_start / native_video_stop — H.264 MP4 via simctl recordVideonative_capture_frames — burst JPEG at configurable FPSapple_pay and side button support via HID injectionactions and commands param names| Platform | Pass | Total | Rate |
|---|---|---|---|
| Web CDP | 128 | 128 | 100% |
| iOS Native | 28 | 29 | 97% |
| iOS Multi-App | 62 | 62 | 100% |
| iOS Cross-Stack | 28 | 28 | 100% |
| iOS Bridge (Flutter) | 62 | 62 | 100% |
| React Native iOS | 41 | 42 | 98% |
inspect_interactive, semantic refs, press_key, 75-test E2E suite
inspect_interactive, semantic refs, press_key, 75-test E2E suite
Fixed 403 Forbidden error when connecting to Chrome 146 consent port (port opened via chrome://inspect/#remote-debugging)
Release 0.7.8
Fixed 403 Forbidden error when connecting to Chrome 146 consent port (port opened via chrome://inspect/#remote-debugging)
Release 0.7.7
CI improvements + MCP Registry auto-publish
CI improvements + MCP Registry auto-publish
Multi-framework SDK support — 8 platforms, 181/183 E2E tests passing
Multi-framework SDK support — 8 platforms, 181/183 E2E tests passing
flutter-skill init auto-detects platform and patches entry pointsflutter-skill demo: launches a built-in demo Flutter app for instant testingbridge_e2e_test.mjs) covering all 13 bridge protocol actionstest/e2e/Fixed release script adding duplicate CHANGELOG entries when version entry already exists
Release script fix and cleanup
Fix type cast errors in get_errors and get_network_requests
Fix type cast errors in get_errors and get_network_requests
get_errors crashing with type 'String' is not a subtype of type 'int?' when passing limit/offset parametersget_network_requests with same type cast issue for limit parameterint.tryParse pattern instead of direct as int? cast for JSON-RPC paramsBug fixes, screenshot reliability, and new features
Bug fixes, screenshot reliability, and new features
Navigator.push(). Now captures from the RenderView layer instead of first RepaintBoundary, correctly rendering the current visible pageenter_text(text: "...")assert_text now reads child Text widgets from buttons, labels, and other non-TextField elementsconnect_app, launch_app, and scan_and_connect now always switch the active session to the newly connected appsave_to_file support (saves to temp file like regular screenshot)limit and offset parameters to prevent massive responsescurrent_page_only parameter to filter out elements from old Navigator routesenable_network_monitoring, get_network_requests, clear_network_requests) for tracking HTTP traffic via VM Service profilingscreenshot_region now reuses the same RenderView layer capture, fixing the same stale-page issue as regular screenshotsEnhanced developer experience: install scripts, CLI tips, and doctor command
Enhanced developer experience: install scripts, CLI tips, and doctor command
flutter-skill doctor: New command to check installation and environment health (Flutter/Dart SDK, devices, native tools, IDE config, tool priority rules)--version / -v flag: Quick version check from CLI (flutter-skill --version)flutter-skill-mcp in terminal shows helpful usage guide with examples instead of hanging~/.claude/settings.json) and Cursor (~/.cursor/mcp.json)printf instead of echo -e)--force npm warning during updatesConvertFrom-Json/ConvertTo-Jsonlib/src/cli/doctor.dart - Environment health checkeruninstall.sh - Clean uninstall for macOS/Linuxuninstall.ps1 - Clean uninstall for Windowsscripts/release.sh now auto-syncs Homebrew formula versionAdd example/example.dart for pub.dev package scoring
Improve pub.dev score
example/example.dart for pub.dev package scoringvm_service dependency to >=14.0.0 <16.0.0 (supports v15)demo_app/ to .pubignoreColor.withValues() with withOpacity() for Flutter 3.24 compatibilityNative platform interaction tools and VM Service reconnection fix
Native platform interaction tools and VM Service reconnection fix
native_screenshot, native_tap, native_input_text, native_swipe) for interacting with native OS views that are invisible to Flutter's VM Service (photo pickers, permission dialogs, share sheets)
LateInitializationError crash when VM Service connection breaks. Client now auto-reconnects and retries failed operations transparentlyDeprecated sequential port checking method
Enhanced smart discovery with parallel port checking and priority-based selection
Future.any() to race all port checksps aux and lsof for instant discoverydocs/SMART_DISCOVERY.md - Complete smart discovery documentationdocs/SMART_SELECTION.md - Smart app selection guidedocs/MULTI_APP_SELECTION.md - Multi-app handling documentationFix Twitter OAuth authentication
Fix Twitter OAuth authentication
nearform-actions/github-action-notify-twitter action for OAuth signingAdd automated Twitter/X posting for release announcements
Add automated Twitter/X posting for release announcements
docs/TWITTER_SETUP.md with complete Twitter API configuration guide
Add automated Winget PR submission to release workflow
Add automated Winget PR submission to release workflow
winget-releaser GitHub Action for automatic PR creationwinget install AIDashboard.FlutterSkillNo breaking changes. New coordinatesReliable field is optional to check:
Critical bug fixes for coordinate detection and JSON serialization
🔧 Fixed JSON Serialization Error in find_by_type: Added safeRound() helper to handle NaN/Infinity values
inspect() implementation📍 Improved TextField Coordinate Detection: Added reliability detection for widget coordinates
coordinatesReliable flag on all elementsinspect and find_by_type documentation
coordinatesReliable flag in output formatNo breaking changes. New coordinatesReliable field is optional to check:
// Check coordinate reliability before using coordinates
final elements = await inspect();
for (final element in elements) {
if (element['coordinatesReliable'] == true) {
// Safe to use bounds/center coordinates
tap(x: element['center']['x'], y: element['center']['y']);
} else {
// Fall back to key/text targeting
if (element['key'] != null) {
tap(key: element['key']);
}
}
}
Major usability improvements for screenshots, errors, and logging
Major usability improvements for screenshots, errors, and logging
📸 Screenshot Optimization: Now saves to file by default instead of returning base64
save_to_file parameter (default: true)save_to_file=false for base64🔌 Improved Connection Error Messages: Detailed, actionable error messages
get_logs(): Returns logs with summary (total_count, message)get_errors(): Returns errors with summary (has_errors, total_count, message)clear_logs(): Returns structured success responseScreenshot:
// New behavior (default)
screenshot() // Returns: {"file_path": "/tmp/...", "size_bytes": 45678}
// Legacy behavior
screenshot(save_to_file: false) // Returns: {"image": "base64..."}
Logs/Errors:
// New response format
get_errors()
// Returns: {
// "errors": [...],
// "summary": {
// "total_count": 3,
// "has_errors": true,
// "message": "3 error(s) found ⚠️"
// }
// }
Add visual test indicators for UI automation
Add visual test indicators for UI automation
minimal: Small, fast (200ms), no hintsstandard: Medium, normal speed (500ms), 1s hints (default)detailed: Large, slow (800ms), 2s hints + debug infoenable_test_indicators(enabled: true, style: "standard")get_indicator_status()enableIndicators, disableIndicators, getIndicatorStatusTestIndicatorOverlay: Manages overlay entry and indicator lifecycleTestIndicatorWidget: Renders all visual effects with smooth animationsTapIndicator, SwipeIndicator, LongPressIndicator, TextInputIndicator, ActionHint// Enable indicators
await enable_test_indicators(enabled: true, style: "standard");
// All actions now show visual feedback automatically
await tap(text: "Submit"); // Shows tap ripple + "Tapping 'Submit'"
await swipe(direction: "left"); // Shows swipe arrow + "Swiping left"
await long_press(text: "Menu"); // Shows progress circle + "Long pressing 'Menu'"
await enter_text(key: "email", text: "test@example.com"); // Shows glow + "Entering text"
// Disable when done
await enable_test_indicators(enabled: false);
docs/TEST_INDICATORS_DESIGN.mdFix screenshot_element null handling and add text parameter
Fix screenshot_element null handling and add text parameter
screenshot_elementtext parameter support (in addition to key) for finding elements by text contenttext parameter is providedtakeElementScreenshot return valuescreenshot_element now matches behavior of other action tools (tap, long_press, etc.)screenshot_element(key: "button_1") and screenshot_element(text: "Submit")getInteractiveElements() to find matching text when key not provided{"error": "...", "message": "..."} instead of crashing on nullFix Infinity/NaN crash when inspecting widgets
Fix Infinity/NaN crash when inspecting widgets
_findInteractiveElementssafeRound() helper function to handle invalid numeric valuesInfinity and NaN values (returns 0)Positioned.fill, FractionalTranslation, and malformed widget treesvalue.isFinite before calling .round() on position/size values{x: 0, y: 0, width: 0, height: 0} for invalid boundsAuto-update flutter_skill dependency in target projects
Auto-update flutter_skill dependency in target projects
setup now automatically updates existing flutter_skill dependency to latest version from pub.devflutter pub upgrade flutter_skill checks when dependency already existsFix release script to auto-update server.dart version
Fix release script to auto-update server.dart version
_currentVersion in lib/src/cli/server.dartAdd MCP auto-fix and diagnostics
Add MCP auto-fix and diagnostics
diagnose_project MCP tool for comprehensive project diagnosticsconnect_app and scan_and_connect toolsproject_path parameter for automatic configurationscripts/diagnose.sh) for manual troubleshootingflutter_skill dependencyFlutterSkillBinding initializationproject_path parameter)Your coding agent can read these notes before it upgrades. Set up the MCP server →