Engine Whats New
flutter/flutter
Generates the "what's new" release summary and diff file for changes in the Flutter engine (//engine/src/flutter) between two releases (e.g., 3.47 vs 3.44).
Dart/Flutter coding rules: style, patterns, security, testing.
$ npx skills add softspark/ai-toolkit --skill dart-rules -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install softspark/ai-toolkit dart-rules --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/softspark/ai-toolkit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/app/skills/dart-rules .claude/skills/dart-rules && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "dart-rules" agent skill from https://github.com/softspark/ai-toolkit/tree/main/app/skills/dart-rules into .claude/skills/dart-rules/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dart-rules", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/softspark/ai-toolkit/tree/main/app/skills/dart-rulesType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add softspark/ai-toolkit --skill dart-rules -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install softspark/ai-toolkit dart-rules --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/softspark/ai-toolkit.git skills-src && mkdir -p .agents/skills && cp -r skills-src/app/skills/dart-rules .agents/skills/dart-rules && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "dart-rules" agent skill from https://github.com/softspark/ai-toolkit/tree/main/app/skills/dart-rules into .agents/skills/dart-rules/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dart-rules", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add softspark/ai-toolkit --skill dart-rules -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install softspark/ai-toolkit dart-rules --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/softspark/ai-toolkit.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/app/skills/dart-rules .cursor/skills/dart-rules && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "dart-rules" agent skill from https://github.com/softspark/ai-toolkit/tree/main/app/skills/dart-rules into .cursor/skills/dart-rules/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dart-rules", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/softspark/ai-toolkit.git --path app/skills/dart-rules--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add softspark/ai-toolkit --skill dart-rules -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install softspark/ai-toolkit dart-rules --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/softspark/ai-toolkit.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/app/skills/dart-rules .gemini/skills/dart-rules && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "dart-rules" agent skill from https://github.com/softspark/ai-toolkit/tree/main/app/skills/dart-rules into .gemini/skills/dart-rules/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dart-rules", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install softspark/ai-toolkit dart-rulesInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add softspark/ai-toolkit --skill dart-rules -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/softspark/ai-toolkit.git skills-src && mkdir -p .github/skills && cp -r skills-src/app/skills/dart-rules .github/skills/dart-rules && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "dart-rules" agent skill from https://github.com/softspark/ai-toolkit/tree/main/app/skills/dart-rules into .github/skills/dart-rules/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dart-rules", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add softspark/ai-toolkit --skill dart-rules -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install softspark/ai-toolkit dart-rules --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/softspark/ai-toolkit.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/app/skills/dart-rules .opencode/skills/dart-rules && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "dart-rules" agent skill from https://github.com/softspark/ai-toolkit/tree/main/app/skills/dart-rules into .opencode/skills/dart-rules/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dart-rules", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
dart-rulesDart/Flutter coding rules: style, patterns, security, testing.
Dart Rules is an agent skill from softspark/ai-toolkit. Dart/Flutter coding rules: style, patterns, security, testing. Triggers: .dart, pubspec.yaml, Flutter, Riverpod, Bloc, widget, StatelessWidget, StatefulWidget.
Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Mobile, covering Cross-platform mobile apps. It works with Flutter and Dart. The repository describes itself as: Professional-grade AI coding toolkit: 94 skills, 44 agents, multi-platform (Claude, Cursor, Windsurf, Copilot, Gemini, Cline, Roo Code, Aider, Augment, Antigravity, Codex CLI… The licence is Apache-2.0.
Read from SKILL.md and the folder at commit d64db2b. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
dartflutterFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
docs.flutter.devFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Dart Rules loads about 3.8k tokens when it runs. Until then it costs about 43 tokens; SKILL.md has 1,767 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from softspark/ai-toolkit at commit d64db2b, republished under its Apache-2.0 licence (© softspark). 1,767 words, ~3,786 tokens.
.claude/skills/dart-rules/SKILL.md (or your agent's skills folder).These rules come from app/rules/dart/ in ai-toolkit. They cover
the project's standards for coding style, frameworks, patterns,
security, and testing in Dart/Flutter. Apply them when writing or
reviewing Dart/Flutter code.
_: _internalState, _helper().? types only when null is semantically meaningful.! operator sparingly. Prefer null checks or ?? fallback.late keyword only when initialization is guaranteed before access.required keyword for mandatory named parameters.const constructors for immutable classes.Point.fromJson(json).final fields for immutable properties.@immutable annotation on classes that should be immutable.required for mandatory named parameters.=>) for single-expression functions.[], {}, <String, int>{}.if and for inside collection literals for conditional/iterative building.[...list1, ...list2].whereType<T>() for type-safe filtering.const collections when values are known at compile time.async/await for all asynchronous operations.Future<T> from async functions. Never return void.Stream<T> for continuous data (events, real-time updates).Future.wait() for concurrent independent operations.Completer<T> only when wrapping callback-based APIs.dart: SDK, package: external, relative project imports.show/hide to limit import scope when names conflict.as prefix for namespace conflicts: import 'package:foo/foo.dart' as foo.dart format (line length 80) for consistent formatting.dart analyze for static analysis with default lint rules.analysis_options.yaml with recommended lints: flutter_lints or lints.StatelessWidget by default. Use StatefulWidget only for local state.const constructors and const widgets for build optimization.Key parameters for widgets in lists for correct diffing.build() methods into smaller widget classes (not methods).Theme.of(context) and TextTheme for consistent styling.GoRouter for declarative, type-safe routing.static const String home = '/home'.ShellRoute for persistent navigation bars across routes.context.go() for navigation, context.push() for stacking.extra for complex objects.dio for HTTP with interceptors, retry, and cancellation.retrofit (code gen) for type-safe REST client definitions.connectTimeout, receiveTimeout.CancelToken for cancelling in-flight requests on navigation.json_serializable (+ build_runner) for generated fromJson/toJson. Default fieldRename: FieldRename.none uses Dart property names as-is — combined with Effective Dart lowerCamelCase, this produces camelCase JSON keys with zero configuration.@JsonSerializable(fieldRename: FieldRename.snake) at the class level (or globally in build.yaml) over sprinkling @JsonKey(name:) on every field. Community recommendation from the json_serializable docs and pub.dev guides.@JsonKey(name: '...') only for exceptional cases: external API with mixed conventions, reserved Dart keyword collision (class, is, new), or legacy field rename during deprecation window. Document the reason in a comment.UPPER_SNAKE_CASE is the cross-language community consensus (see common/coding-style.md — JSON Wire Format Conventions). Dart enum case names themselves stay lowerCamelCase per Effective Dart; map them to uppercase strings in fromJson/toJson (value.toUpperCase() + switch).fromJson + toJson) with explicit expected keys. Catches contract drift at CI time.shared_preferences for simple key-value persistence.drift (formerly Moor) for type-safe SQLite with reactive queries.hive for fast, lightweight NoSQL local storage.flutter_secure_storage for sensitive data (tokens, passwords).shared_preferences (not encrypted).get_it for service locator pattern. Register at app startup.injectable (code gen) for automatic registration from annotations.MethodChannel for invoking native (iOS/Android) code.EventChannel for streaming data from native to Dart.Pigeon (code gen) for type-safe platform channel definitions.MissingPluginException gracefully on unsupported platforms.flutter_test for widget tests with WidgetTester.integration_test package for full app integration tests.patrol for native-aware integration testing (permissions, notifications).golden_toolkit for advanced visual regression testing.flutter build with --release and --dart-define for env configuration.--flavor) for dev/staging/prod build variants.flutter analyze in CI for static analysis enforcement.flutter test --coverage with lcov for coverage reporting.class UserNotFoundException implements Exception.try-catch with specific exception types. Avoid bare catch (e).rethrow to preserve stack trace when re-raising exceptions.Result<T, E> pattern (e.g., dartz Either) for expected failures.Future.catchError() only when async/await is not applicable.ChangeNotifier / ValueNotifier for simple local state.StateNotifier (Riverpod) for immutable state transitions.copyWith() for updates.@riverpod annotation (code gen) for provider definitions.ref.watch() for reactive dependencies. Use ref.read() for one-time access.AsyncNotifier for async state management.autoDispose for providers that should clean up when unused.family modifier for parameterized providers.sealed class for events and states (exhaustive switch).Emitter<State> for emitting state transitions.transformEvents() for debouncing search inputs.BlocObserver for global logging and error tracking.Future<T> for single values, Stream<T> for real-time updates.@freezed for immutable data classes with copyWith, equality, toString.@freezed sealed unions for state modeling: factory State.loading().when() / map() for exhaustive pattern matching on freezed unions.dart run build_runner build after modifying freezed classes.Stream.asyncMap() for transforming streams with async operations.StreamController<T> for custom streams. Close in dispose().Completer<T> to bridge callback APIs to Future-based APIs.Timer.periodic() for polling. Cancel in dispose().compute() (Flutter) for CPU-intensive work on isolates.dynamic type: defeats type safety. Use Object? or generics.setState() for global state: use proper state management.TextFormField validators.RegExp for pattern validation (email, phone, URL).Html widget with raw user input.maxLength on TextFormField.SecurityContext for certificate pinning.dio interceptors for consistent auth header injection.CancelToken to abort requests when the user navigates away.flutter_secure_storage for tokens, passwords, and API keys.shared_preferences (stored in plaintext).drift with sqlcipher, or hive with encryption).kIsWeb checks to handle web platform storage limitations.flutter_appauth for standards-compliant OAuth flows.local_auth package.MethodChannel logging-enabled calls.Pigeon for type-safe channel communication (prevents mismatched types).PlatformException gracefully for missing native implementations.--obfuscate --split-debug-info=<dir> for release builds.--dart-define for environment-specific configuration (not secrets).webview_flutter with JavaScript disabled unless explicitly needed.NavigationDelegate.dart pub outdated regularly. Update dependencies promptly.pubspec.lock for unexpected transitive dependencies.dart pub audit (when available) for vulnerability scanning.pubspec.yaml for production apps.package:test for pure Dart unit tests.package:flutter_test for Flutter widget and integration tests.package:mockito with @GenerateMocks for mock generation.package:mocktail as a simpler alternative (no code generation).foo_test.dart in test/ mirroring lib/ structure.test/widgets/ for Flutter widget tests.integration_test/ directory (Flutter convention).test/goldens/ for visual regression snapshots.group() for organizing related tests.setUp() / tearDown() for per-test setup and cleanup.setUpAll() / tearDownAll() for expensive one-time setup.test('returns null when user is not found', ...).expect(actual, matcher) with built-in matchers.equals(), isNull, isNotNull, isA<T>() for type/value checks.throwsA(isA<FormatException>()) for exception testing.completion(expected) for Future assertions.emitsInOrder([...]) for Stream emission testing.@GenerateMocks([UserRepository]). Run build_runner.when(mock.getUser(any)).thenAnswer((_) async => user).verify(mock.saveUser(captureAny)).called(1).verifyNever() to assert a method was not called.throwOnMissingStub() to catch unstubbed method calls.testWidgets('description', (tester) async { ... }).tester.pumpWidget(MaterialApp(home: MyWidget())) to render.tester.pump() to trigger rebuilds after state changes.tester.pumpAndSettle() to wait for animations to complete.find.byType(), find.text(), find.byKey() for widget lookups.tester.tap(), tester.enterText() for interaction simulation.matchesGoldenFile('goldens/my_widget.png') for visual comparison.flutter test --update-goldens to regenerate baseline images.fake classes (implementing interfaces) for simple test doubles.addTearDown() to register cleanup in the test body.flutter test --coverage and check coverage/lcov.info.blocTest() from bloc_test package for BLoC testing.© softspark, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in app/skills/dart-rules of softspark/ai-toolkit.
Open the folder on GitHubat commit d64db2b
Dart Rules next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Dart Rules this skillsoftspark/ai-toolkit | 179 | — | ~3.8k | Automated safety check: Pass | Apache-2.0 | |
| Engine Whats Newflutter/flutter | 179k | — | ~978 | Automated safety check: Pass | BSD-3-Clause | |
| Flutter Cherry Pickflutter/flutter | 179k | — | ~1.8k | Automated safety check: Pass | BSD-3-Clause | |
| Upgrade Browserflutter/flutter | 179k | — | ~1.1k | Automated safety check: Pass | BSD-3-Clause | |
| Bump Dartflutter/flutter | 179k | — | ~1.2k | Automated safety check: Pass | BSD-3-Clause | |
| Run Devicelab With Ledflutter/flutter | 179k | — | ~786 | Automated safety check: Pass | BSD-3-Clause |
flutter/flutter
Generates the "what's new" release summary and diff file for changes in the Flutter engine (//engine/src/flutter) between two releases (e.g., 3.47 vs 3.44).
flutter/flutter
How to land a formal cherry-pick of a merged PR for the flutter/flutter repo stable or beta channel.
flutter/flutter
Upgrade browser versions (Chrome or Firefox) in the Flutter Web Engine and/or Framework tests.
flutter/flutter
Do not trigger automatically; only run when a user runs /bump-dart.
flutter/flutter
Run DeviceLab tests for Flutter PRs using LUCI's led CLI tool.
flutter/flutter
Automate shepherding, checking status, updating branches, and landing open PRs or approved third-party contributor PRs in the flutter/flutter repository using the gh CLI.
softspark/ai-toolkit
Prepare or verify a project QA environment with source identity, readiness, browser access, evidence paths and owned cleanup.
softspark/ai-toolkit
Accessibility validator: WCAG 2.1 AA, EN 301 549, EAA. An agent skill from softspark/ai-toolkit.
softspark/ai-toolkit
Analyzes code quality, complexity, patterns across codebase.
softspark/ai-toolkit
Drives a brief, specification, issue or existing PR through implementation, review, tests and QA to a ready PR.
softspark/ai-toolkit
Direct technical voice for docs, README, user-facing text. An agent skill from softspark/ai-toolkit.
softspark/ai-toolkit
Detect/generate/debug CI pipeline config (GitHub Actions, GitLab CI).
Categories
Dart/Flutter coding rules: style, patterns, security, testing. Dart Rules is an agent skill from softspark/ai-toolkit. Dart/Flutter coding rules: style, patterns, security, testing.
Dart Rules fits situations like: tasks that involve Cross-platform mobile apps.
Run `npx skills add softspark/ai-toolkit --skill dart-rules -a claude-code`. Or copy the skill folder (app/skills/dart-rules in softspark/ai-toolkit) into .claude/skills/dart-rules in your project. Claude Code loads it when a task matches its description.
Run `npx skills add softspark/ai-toolkit --skill dart-rules -a codex`. Or copy the skill folder (app/skills/dart-rules in softspark/ai-toolkit) into .agents/skills/dart-rules in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add softspark/ai-toolkit --skill dart-rules -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dart-rules, .gemini/skills/dart-rules, .github/skills/dart-rules and .opencode/skills/dart-rules in your project.
Going by SKILL.md and its folder, Dart Rules needs the command-line tools its instructions call (dart and flutter). Its frontmatter pre-approves these tools: Read.
SKILL.md names 1 domain. As links in the text: docs.flutter.dev. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Dart Rules is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Dart Rules: Engine Whats New (flutter/flutter, 179k stars), Flutter Cherry Pick (flutter/flutter, 179k stars), Upgrade Browser (flutter/flutter, 179k stars) and Bump Dart (flutter/flutter, 179k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
softspark (a GitHub user) maintains it in softspark/ai-toolkit, which has 179 GitHub stars. The repository holds 112 skills in this directory. The repository was last updated on October 7, 2026.
Source: softspark/ai-toolkit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.