A Claude Code plugin that accelerates Flutter & Dart development with best-practices skills from Very Good Ventures. Developed with ๐ by Very Good Ventures ๐ฆ.
$ npx -y skills add VeryGoodOpenSource/vgv-ai-flutter-plugin --agent claude-code
[![Very Good Ventures][logo_white]][very_good_ventures_link_dark] [![Very Good Ventures][logo_black]][very_good_ventures_link_light]
A [Claude Code][claude_code_link] plugin that accelerates Flutter & Dart development with best-practices skills from [Very Good Ventures][vgv_link].
Developed with ๐ by [Very Good Ventures][vgv_link] ๐ฆ
VGV AI Flutter Plugin is a collection of contextual best-practices skills that Claude uses when helping you write Flutter and Dart code. Each skill provides opinionated, production-quality guidance covering architecture patterns, naming conventions, folder structures, code examples, testing strategies, and anti-patterns to avoid, so you get code that follows [VGV standards][vgv_link] out of the box.
One-line install from your terminal:
claude plugin marketplace add VeryGoodOpenSource/very-good-claude-code-marketplace && claude plugin install vgv-ai-flutter-plugin
Or inside an active Claude Code session, run these as two separate commands (the second only after the first completes):
Add the marketplace:
/plugin marketplace add VeryGoodOpenSource/very-good-claude-code-marketplace
Install the plugin:
/plugin install vgv-ai-flutter-plugin
For more details, see the [Very Good Claude Marketplace][marketplace_link].
| Skill | Description |
|---|---|
| Create Project | Scaffold new Dart/Flutter projects from Very Good CLI templates โ flutter_app, dart_package, flutter_plugin, dart_cli, flame_game, and more โ including vague requests where the template, name, or organization is still missing |
| Animations | Flutter built-in animations โ implicit vs explicit decision tree, Material 3 motion tokens (Durations, Easing), page transitions with GoRouter, Hero animations, staggered animations, and performance guidelines |
| Accessibility | WCAG 2.2 compliance with A/AA/AAA conformance level selection across iOS, Android, Web, macOS, Windows, and Linux โ semantics, screen reader support, touch targets, focus management, color contrast, text scaling, and motion sensitivity |
| Testing | Unit, widget, and golden/snapshot testing โ mocktail mocking (never mockito), pumpApp helpers, TestTag golden tagging, test structure & naming, coverage patterns, and dart_test.yaml configuration. Also covers one-line golden-test requests and asks for the patterns it forbids |
| Navigation | GoRouter routing โ @TypedGoRoute type-safe routes, deep linking, redirects, shell routes, go() vs push() call sites, and widget testing with MockGoRouter |
| Internationalization | i18n/l10n โ ARB files, context.l10n patterns, pluralization, RTL/LTR support with directional widgets for Arabic and Hebrew, staying on flutter_localizations instead of third-party i18n packages, and backend localization strategies |
| Material Theming | Material 3 theming โ ColorScheme, TextTheme, component themes, spacing systems, light/dark mode support, and refactoring hardcoded or duplicated styling out of widget code |
| Bloc | State management with Bloc/Cubit โ sealed events & states, BlocProvider/BlocBuilder widgets, event transformers, and testing with blocTest() & mocktail |
| Layered Architecture | VGV layered architecture โ four-layer package structure (Data, Repository, Business Logic, Presentation), laying out a new app's packages from a one-line description, dependency rules, where a model or file belongs and why a domain model cannot live in a data package, data flow, and bootstrap wiring |
| Security | Flutter-specific static security review โ secrets management (rejects --dart-define, String.fromEnvironment, .env, and CI-injected keys as fixes), flutter_secure_storage, certificate pinning, Random.secure(), formz validation, dependency vulnerability scanning with osv-scanner, and OWASP Mobile Top 10 guidance |
| UI Package | Flutter UI package creation โ custom widget libraries with ThemeExtension-based theming, design tokens, a barrel-only public API consumers import instead of reaching into lib/src/, pumpApp-based widget tests, Widgetbook catalog, and consistent API conventions |
| License Compliance | Dependency license auditing โ categorizes licenses (permissive, weak/strong copyleft, unknown), flags non-compliant or missing licenses, and produces a structured compliance report using Very Good CLI |
| Dart/Flutter SDK Upgrade | Bump Dart and Flutter SDK constraints across packages โ CI workflow versions, pubspec.yaml environment constraints, and PR preparation for SDK upgrades |
| Very Good Analysis Upgrade | Upgrade the very_good_analysis lint package across Dart/Flutter projects โ version bump in pubspec.yaml, minimal lint fixes for new rules, and PR preparation |
| Green Gate | Autonomous verify-fix-rerun loop that drives a package to green across four quality gates โ analyze, format, test, and coverage โ exiting only when a final iteration proves all four pass with observed numbers (default 100% coverage, overridable). Also answers how the gates are configured โ tool per gate, arguments, order, coverage target and exclusions โ and holds the line when asked to weaken one: no lowered threshold, no coverage ignore on reachable code, no skipping a gate that passed earlier |
This plugin ships subagents that Claude Code can dispatch as isolated, specialized reviewers. Unlike skills, agents are not invoked as slash commands โ Claude dispatches them automatically, or you can ask Claude to run one by name (e.g. "review my changes with the flutter-reviewer agent").
| Agent | Description |
|---|---|
| Flutter Reviewer | Read-only reviewer of changed Dart code against the preloaded bloc, testing, static-security, and accessibility standards โ emits a location | problem | fix | standard findings table. Never edits files; Bash is hook-restricted to git diff/git status |
This plugin includes SessionStart, PreToolUse, and PostToolUse hooks that validate the Very Good CLI, guard against CLI bypass, and automatically run Dart analysis and formatting on .dart files.
| Hook | Trigger | Behavior |
|---|---|---|
Warn Missing MCP (warn-missing-mcp.sh) | SessionStart | Warns if the Very Good CLI is missing, older than 1.5.0, or does not report a version. For that last case it names the cause: either dart is not on the PATH hooks inherit, or a Dart SDK upgrade left a stale snapshot that very_good --version rebuilds. Never blocks |
Check VGV CLI (check-vgv-cli.sh) | PreToolUse (mcp__.*very-good-cli__.*) | Verifies from the payload that the caller is a Very Good CLI tool and stands aside otherwise, so the decision never lands on an unrelated tool; for its own tools, auto-approves the call in every run mode via a PreToolUse allow decision, so they never dead-end when the tool isn't on permissions.allow (including under skipAutoPermissionPrompt); denies with an install/upgrade message if the CLI is missing or < 1.5.0 |
Block CLI Workarounds (block-cli-workarounds.sh) | PreToolUse (Bash) | Denies flutter/dart test/create and very_good test/create/packages in the shell and points to the matching MCP tool. Quoted text is not read as a command, so searching for those strings is fine. When dart is missing from PATH the denial says so instead of pointing at a server that cannot start. A denial refuses the whole shell call, so anything chained with the blocked command has to be run again |
Allow Read-only Git (allow-readonly-git.sh) | PreToolUse (Bash, flutter-reviewer agent only) | Restricts the flutter-reviewer agent's Bash to single-line git diff/git status, without the --output or --ext-diff options, and denies anything else (blocking). Scoped via the agent's frontmatter, not hooks.json |
Analyze (analyze.sh) | PostToolUse (Edit/Write) | Runs dart analyze on the modified .dart file; exits 2 on failure (blocking โ Claude must fix issues before continuing) |
Format (format.sh) | PostToolUse (Edit/Write) | Runs dart format on the modified .dart file; always exits 0 (non-blocking โ formatting is applied silently) |
PATHjq is not installedblock-cli-workarounds.sh to split a command on shell operators; the hook refuses to run without it, rather than letting every shell call through uncheckedThe Very Good CLI is resolved from PATH, falling back to $PUB_CACHE/bin (default
~/.pub-cache/bin) for hosts that launch hooks without an interactive shell's PATH. The
installed very_good is a shim that execs dart, so when the binary is found but its version
cannot be read the check is reported as inconclusive and the hook stands aside rather than
reporting the CLI as missing.
Skill evals ask whether Claude routes to a skill and follows it. claude plugin eval runs each case with this plugin loaded and again with no plugin at all, so a grader that passes in both arms is measuring the model rather than the skill. Runs authenticate the same way your normal Claude Code sessions do, so they need no API key locally.
claude plugin eval . --scaffold
Run them locally before opening a PR that changes a skill. CI also runs them after a merge to main, scoped to the skills that changed, as an advisory signal rather than a gate โ see evals/README.md.
See evals/README.md for the case format, the grader reference, prerequisites, and what these evals deliberately do not cover.
Skills activate automatically when Claude detects relevant context in your conversation. Simply ask Claude to help with a Flutter or Dart task, and the appropriate skill's guidance will be applied.
For example:
You: Create a new Bloc for user authentication with login and logout events.
Claude: (applies the Bloc skill โ uses sealed classes for events and states, follows the Page/View separation pattern, generates
blocTest()tests withmocktailmocks, and follows VGV naming conventions)
You can also invoke skills directly as slash commands:
/create-project
/animations
/accessibility
/bloc
/internationalization
/layered-architecture
/material-theming
/navigation
/static-security
/testing
/ui-package
/license-compliance
/dart-flutter-sdk-upgrade
/very-good-analysis-upgrade
/green-gate
Every skill includes:
mocktail over mockito, sealed classes for Bloc events)vgv-ai-flutter-plugin is a Claude Code plugin with 15 hand-picked skills, indexed on Flowy in the Mobile category. Install it with the command on its page. It includes accessibility, animations, bloc. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it