A Flutter based game engine.
This report summarizes scanner evidence for flame-engine/flame, a Dart project with 10,810 GitHub stars. SynthScan examined 292,061 lines of code across 2509 source files, recording 503 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 2.1 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 470 finding(s).
Are imports declared and package/API names verified? 11 finding(s).
Are wrappers, guards, and repeated structures necessary? 32 finding(s).
Which changes need focused human review? 503 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 503 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/lib/stories/tiled/tiled_culling_example.dart | 141 | /// default. | COMMENT |
| LOW | scripts/customer_testing.dart | 1 | // This file is invoked by the flutter/tests registry entry for Flame | COMMENT |
| LOW | packages/flame_3d_component/lib/flame_3d_component.dart | 1 | /// Renders [flutter_scene](https://pub.dev/packages/flutter_scene) 3D scenes | COMMENT |
| LOW | packages/flame_3d_component/lib/src/component_3d.dart | 1 | import 'dart:math'; | COMMENT |
| LOW | packages/flame_3d_component/lib/src/component_3d.dart | 21 | /// engine's shader libraries. Geometry and materials rely on those, so create | COMMENT |
| LOW | …ame_studio/linux/flutter/generated_plugin_registrant.h | 1 | // | COMMENT |
| LOW | …itories/component_repository/component_repository.dart | 21 | /// Thrown when creating a [Component] whose name is already taken. | COMMENT |
| LOW | …itories/component_repository/component_repository.dart | 61 | /// see [Palette.validateColorName]. | COMMENT |
| LOW | …itories/component_repository/component_repository.dart | 121 | /// Creates a component of [type] called [name], with default properties, | COMMENT |
| LOW | …itories/component_repository/component_repository.dart | 181 | /// Writes the Dart code of [component] to the folder [outputPath], | COMMENT |
| LOW | …omponent_repository/models/component_capabilities.dart | 21 | /// Implemented by every component type backed by a Flame | COMMENT |
| LOW | …tories/component_repository/models/component_tree.dart | 141 | /// The names of the classes this component reserves in the generated | COMMENT |
| LOW | …es/component_repository/models/component_position.dart | 1 | import 'package:equatable/equatable.dart'; | COMMENT |
| LOW | …ries/component_repository/models/component_anchor.dart | 1 | import 'package:equatable/equatable.dart'; | COMMENT |
| LOW | …ories/component_repository/models/component_paint.dart | 1 | import 'package:equatable/equatable.dart'; | COMMENT |
| LOW | …pository/code_generation/component_code_generator.dart | 1 | import 'package:dart_style/dart_style.dart'; | COMMENT |
| LOW | …nent_editor/widgets/property_editors/number_field.dart | 1 | import 'package:flutter/material.dart'; | COMMENT |
| LOW | …ponent_editor/widgets/property_editors/name_field.dart | 1 | import 'package:flutter/material.dart'; | COMMENT |
| LOW | …onent_editor/widgets/property_editors/color_field.dart | 1 | import 'package:flame_studio/repositories/repositories.dart'; | COMMENT |
| LOW | …ponent_editor/widgets/preview/selection_highlight.dart | 1 | import 'package:flame/components.dart' as flame; | COMMENT |
| LOW | …component_editor/widgets/preview/preview_hitboxes.dart | 1 | import 'package:flame/collisions.dart' as flame; | COMMENT |
| LOW | …/lib/component_editor/bloc/component_editor_state.dart | 41 | COMMENT | |
| LOW | …/lib/component_editor/bloc/component_editor_state.dart | 61 | /// [ComponentEditorStatus.codeFailure]). | COMMENT |
| LOW | …o/lib/component_editor/bloc/component_editor_bloc.dart | 1 | import 'package:bloc/bloc.dart'; | COMMENT |
| LOW | packages/flame_studio/windows/runner/utils.h | 1 | #ifndef RUNNER_UTILS_H_ | COMMENT |
| LOW | packages/flame_studio/windows/runner/win32_window.cpp | 1 | #include "win32_window.h" | COMMENT |
| LOW | packages/flame_studio/windows/runner/resource.h | 1 | //{{NO_DEPENDENCIES}} | COMMENT |
| LOW | …e_studio/windows/flutter/generated_plugin_registrant.h | 1 | // | COMMENT |
| LOW | packages/flame_test/lib/test_paths.dart | 1 | /// A set of paths with different kinds of contours, for tests, benchmarks and | COMMENT |
| LOW | packages/flame_test/lib/src/close_to_matrix4.dart | 1 | import 'package:flutter_test/flutter_test.dart'; | COMMENT |
| LOW | packages/flame_test/lib/src/flame_test.dart | 81 | /// widget builder [createGameWidget], a custom [pumpWidget] function and a | COMMENT |
| LOW | packages/flame_test/lib/src/test_golden.dart | 1 | import 'package:flame/game.dart'; | COMMENT |
| LOW | packages/flame_test/lib/src/random_test.dart | 41 | /// `testRandom()` must be obtained through the provided random generator. | COMMENT |
| LOW | packages/flame_test/lib/src/random_test.dart | 101 | /// | COMMENT |
| LOW | packages/flame_test/lib/src/fails_assert.dart | 1 | import 'package:test/test.dart'; | COMMENT |
| LOW | packages/flame_test/lib/src/test_flame_game.dart | 1 | import 'package:flame/game.dart'; | COMMENT |
| LOW | packages/flame_test/lib/src/test_flame_game.dart | 41 | tags: tags, | COMMENT |
| LOW | packages/flame_test/lib/src/expect_color.dart | 1 | import 'dart:ui' show Color; | COMMENT |
| LOW | packages/flame_test/lib/src/expect_color.dart | 61 | /// The alpha component is compared using [closeTo] matcher with a configurable | COMMENT |
| LOW | packages/flame_fire_atlas/lib/flame_fire_atlas.dart | 261 | /// Loads the atlas image into memory so it can be used, this method | COMMENT |
| LOW | packages/flame_lint/lib/flame_lint.dart | 1 | /// The flame_lint package doesn't ship any dart source code. | COMMENT |
| LOW | packages/flame_audio/lib/bgm.dart | 1 | import 'package:audioplayers/audioplayers.dart'; | COMMENT |
| LOW | packages/flame_audio/lib/flame_audio.dart | 21 | /// | COMMENT |
| LOW | packages/flame_splash_screen/lib/src/theme.dart | 101 | /// Wraps the splash screen layout options. | COMMENT |
| LOW | …viors/lib/src/behaviors/screen_collision_behavior.dart | 1 | import 'package:flame/components.dart'; | COMMENT |
| LOW | …viors/lib/src/behaviors/screen_collision_behavior.dart | 21 | /// parent.position.x = screen.position.x; | COMMENT |
| LOW | …/lib/src/behaviors/propagating_collision_behavior.dart | 41 | /// the collision through to any [CollisionBehavior]s that are attached to the | COMMENT |
| LOW | packages/flame_isolate/lib/flame_isolate.dart | 1 | import 'package:flame/components.dart'; | COMMENT |
| LOW | packages/flame_isolate/lib/flame_isolate.dart | 21 | /// | COMMENT |
| LOW | packages/flame_isolate/lib/flame_tailored_isolate.dart | 1 | import 'package:flame/components.dart'; | COMMENT |
| LOW | packages/flame_isolate/lib/flame_tailored_isolate.dart | 21 | /// | COMMENT |
| LOW | …ges/flame_devtools/lib/widgets/behavior_tree_view.dart | 1 | import 'package:flame_devtools/behavior_tree_snapshot.dart'; | COMMENT |
| LOW | …ges/flame_behavior_tree/lib/src/has_behavior_tree.dart | 1 | import 'dart:math'; | COMMENT |
| LOW | …ges/flame_behavior_tree/lib/src/has_behavior_tree.dart | 21 | /// owner: this, | COMMENT |
| LOW | packages/flame_behavior_tree/lib/src/nodes/move_to.dart | 1 | import 'package:behavior_tree/behavior_tree.dart'; | COMMENT |
| LOW | …ges/flame_behavior_tree/lib/src/nodes/play_effect.dart | 1 | import 'package:behavior_tree/behavior_tree.dart'; | COMMENT |
| LOW | …ges/flame_behavior_tree/lib/src/nodes/play_effect.dart | 21 | /// ), | COMMENT |
| LOW | …ior_tree/lib/src/devtools/behavior_tree_connector.dart | 1 | import 'dart:convert'; | COMMENT |
| LOW | …es/flame_behavior_tree/behavior_tree/lib/src/node.dart | 1 | import 'package:behavior_tree/behavior_tree.dart'; | COMMENT |
| LOW | …es/flame_behavior_tree/behavior_tree/lib/src/node.dart | 21 | /// It does not have any effect on how the node behaves, but it makes a tree | COMMENT |
| 374 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …enny/test/structure/expressions/operators/or_test.dart | 0 | line: false true true line: false true line: true true true line: false false false false | STRING |
| HIGH | …nny/test/structure/expressions/operators/xor_test.dart | 0 | line: false true true line: false true line: true true true line: false false false false | STRING |
| HIGH | …nny/test/structure/expressions/operators/and_test.dart | 0 | line: false true true line: false true line: true true true line: false false false false | STRING |
| HIGH | …nny/test/structure/expressions/operators/not_test.dart | 0 | line: false true true line: false true line: true true true line: false false false false | STRING |
| HIGH | …cture/expressions/operators/greater_or_equal_test.dart | 0 | line: false true true line: false true line: true true true line: false false false false | STRING |
| HIGH | …tructure/expressions/operators/less_or_equal_test.dart | 0 | line: false true true line: false true line: true true true line: false false false false | STRING |
| HIGH | …ny/test/structure/expressions/functions/bool_test.dart | 0 | line: false true true line: false true line: true true true line: false false false false | STRING |
| HIGH | …ents/component_mixins/tertiary_tap_callbacks_test.dart | 0 | does not receive an event when double-tapping a position far from the component | STRING |
| HIGH | …nts/component_mixins/secondary_tap_callbacks_test.dart | 0 | does not receive an event when double-tapping a position far from the component | STRING |
| HIGH | …events/component_mixins/double_tap_callbacks_test.dart | 0 | does not receive an event when double-tapping a position far from the component | STRING |
| HIGH | packages/flame/lib/src/components/sprite_component.dart | 0 | if size is set, autoresize should be false or size should be null when autoresize is true. | STRING |
| HIGH | …s/flame/lib/src/components/sprite_group_component.dart | 0 | if size is set, autoresize should be false or size should be null when autoresize is true. | STRING |
| HIGH | …ame/lib/src/components/sprite_animation_component.dart | 0 | if size is set, autoresize should be false or size should be null when autoresize is true. | STRING |
| HIGH | …b/src/components/sprite_animation_group_component.dart | 0 | if size is set, autoresize should be false or size should be null when autoresize is true. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | doc/_sphinx/extensions/dart_domain.py | 221 | # ---------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | doc/_sphinx/extensions/dart_domain.py | 223 | # ---------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doc/_sphinx/extensions/flutter_app.py | 14 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM | doc/_sphinx/extensions/flutter_app.py | 16 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM | doc/_sphinx/extensions/flutter_app.py | 266 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM | doc/_sphinx/extensions/flutter_app.py | 268 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM | doc/_sphinx/extensions/flutter_app.py | 292 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM | doc/_sphinx/extensions/flutter_app.py | 294 | # ------------------------------------------------------------------------------ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | packages/flame/test/components/component_test.dart | 808 | game.world.children.first.children.elementAt(0), | CODE |
| CRITICAL | packages/flame/test/components/component_test.dart | 812 | game.world.children.first.children.elementAt(1), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/flame_test/lib/src/expect_color.dart | 13 | /// Example usage: | COMMENT |
| LOW | packages/flame_test/lib/src/expect_color.dart | 66 | /// Example usage: | COMMENT |
| LOW | …ages/flame/lib/src/experimental/padding_component.dart | 23 | /// Example usage: | COMMENT |
| LOW | packages/flame/lib/src/experimental/row_component.dart | 21 | /// Example usage: | COMMENT |
| LOW | …kages/flame/lib/src/experimental/column_component.dart | 21 | /// Example usage: | COMMENT |
| LOW | …ges/flame/lib/src/experimental/expanded_component.dart | 23 | /// Example usage: | COMMENT |
| LOW | packages/flame/lib/src/components/icon_component.dart | 19 | /// Example usage: | COMMENT |
| LOW | packages/flame/lib/src/components/component_pool.dart | 11 | /// Example usage: | COMMENT |
| LOW | …flame/lib/src/components/core/component_tree_root.dart | 210 | /// Example usage: | COMMENT |
| LOW | packages/flame/lib/src/text/renderers/text_paint.dart | 32 | /// Example usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | doc/other_modules/jenny/language/markup.md | 1 | <!-- cSpell:ignore lorem ipsum dolor sit amet, consectetur adipiscing elit --> | CODE |
| LOW | doc/other_modules/jenny/language/markup.md | 1 | <!-- cSpell:ignore lorem ipsum dolor sit amet, consectetur adipiscing elit --> | CODE |
| LOW⚡ | doc/other_modules/jenny/language/markup.md | 33 | Lorem ipsum dolor sit amet, [bold]consectetur adipiscing elit[/] | CODE |
| LOW⚡ | doc/other_modules/jenny/language/markup.md | 33 | Lorem ipsum dolor sit amet, [bold]consectetur adipiscing elit[/] | CODE |
| LOW⚡ | doc/other_modules/jenny/language/markup.md | 42 | Lorem ipsum dolor sit amet, [wave/] consectetur adipiscing elit. | CODE |
| LOW⚡ | doc/other_modules/jenny/language/markup.md | 42 | Lorem ipsum dolor sit amet, [wave/] consectetur adipiscing elit. | CODE |
| LOW⚡ | doc/other_modules/jenny/language/markup.md | 50 | Lorem ipsum [color name=$color]dolor sit amet[/color] | CODE |
| LOW⚡ | doc/other_modules/jenny/language/markup.md | 50 | Lorem ipsum [color name=$color]dolor sit amet[/color] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | doc/_sphinx/extensions/dart_domain.py | 158 | def _scan_source_file_if_needed(self): | CODE |
| LOW⚡ | doc/_sphinx/extensions/dart_domain.py | 225 | def _generate_node_for_declaration(self, data: Dict, level: int) -> Element: | CODE |
| LOW | doc/_sphinx/extensions/dart_domain.py | 252 | def _generate_class_signature_node(self, data: Dict, level: int) -> Element: | CODE |
| LOW | doc/_sphinx/extensions/dart_domain.py | 280 | def _generate_function_signature_node(self, data: Dict, level: int) -> Element: | CODE |
| LOW | doc/_sphinx/extensions/dart_domain.py | 327 | def _generate_field_signature_node(self, data: Dict, level: int) -> Element: | CODE |
| LOW | doc/_sphinx/extensions/dart_domain.py | 353 | def _generate_type_parameters_node(self, data: Dict) -> Optional[Element]: | CODE |
| LOW | doc/_sphinx/extensions/dart_domain.py | 376 | def _generate_constructors_section(self, data: Dict, level: int) -> Optional[Element]: | CODE |
| LOW | doc/_sphinx/extensions/dart_domain.py | 387 | def _generate_methods_section(self, data: Dict, level: int) -> Optional[Element]: | CODE |
| LOW | doc/_sphinx/extensions/dart_domain.py | 398 | def _generate_properties_section(self, data: Dict, level: int) -> Optional[Element]: | CODE |
| LOW | doc/_sphinx/scripts/versions.js | 26 | function convertVersionsToHtmlLinks(versionsList, currentVersion) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/lib/stories/widgets/widgets.dart | 54 | can use the `NineTileBox` which is showcased here, don't forget to check | CODE |
| LOW | examples/lib/stories/widgets/widgets.dart | 86 | you can create a `SpriteButton`, don't forget to check out the settings | CODE |
| LOW | examples/lib/stories/widgets/widgets.dart | 110 | you can create a `SpriteWidget`, don't forget to check out the settings | CODE |
| LOW | examples/lib/stories/widgets/widgets.dart | 161 | a `SpriteWidget`, don't forget to check out the settings in the knobs | CODE |
| LOW | examples/lib/stories/widgets/widgets.dart | 188 | tree you can create a `SpriteAnimationWidget`, don't forget to check out | CODE |
| LOW | packages/flame_3d/lib/src/game/notifying_vector3.dart | 10 | /// subscribe to notifications, don't forget to eventually unsubscribe in | COMMENT |
| LOW | …ckages/flame_3d/lib/src/game/notifying_quaternion.dart | 12 | /// subscribe to notifications, don't forget to eventually unsubscribe in | COMMENT |
| LOW | packages/flame/lib/src/game/notifying_vector2.dart | 9 | /// subscribe to notifications, don't forget to eventually unsubscribe in | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …rc/events/dispatchers/multi_drag_scale_dispatcher.dart | 81 | /// [component], then enables drag and/or scale as requested. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …lame/lib/src/experimental/linear_layout_component.dart | 342 | // Essentially the same as start, but gap is set. | COMMENT |
| MEDIUM | packages/flame/lib/src/components/core/component.dart | 763 | /// This method is robust towards being called from any place in the user | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | doc/_sphinx/extensions/package.py | 24 | CODE | |
| LOW | doc/_sphinx/extensions/dart_domain.py | 398 | CODE | |
| LOW | doc/_sphinx/extensions/dart_domain.py | 441 | CODE | |
| LOW | doc/_sphinx/extensions/dart_domain.py | 564 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/flame/lib/src/experimental/raycast_result.dart | 11 | /// NOTE: This class might be subject to breaking changes in an upcoming | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | doc/_sphinx/extensions/yarn_lexer.py | 4 | CODE |