catalogYaml top-level constant
String
const catalogYaml
Implementation
const String catalogYaml =
r'''# The Capability Catalog: the single source of truth for every selectable
# option (FR-018). Versioned engine-compatibility data (§60.3), loaded by
# catalog_loader.dart like the recipe lock (R-201). Binds FR-014, FR-019-021,
# contracts/capability-catalog-schema.md.
#
# IDs are stable and never reused/renumbered (FR-019, INV-CAT2). Dependency
# versions are pins the recipe lock resolves (C-3) — verified against
# pub.dev on 2026-07-21; Recommended-stack pins (flutter_bloc, go_router,
# get_it, dio, freezed/json_serializable, build_runner) match the shipped
# lock/recipe_lock.json exactly (SC-007 continuity).
#
# Options with supportLevel "unsupported" and a "deferred" validation
# requirement are declared but MUST NOT be reachable in the shipped
# configurator (FR-013, FR-064, INV-DEF1) — SupportLevel has no separate
# "deferred" value, so Deferred reuses the existing not-selectable mechanism
# (C-4/INV-SL2) rather than inventing a new enum member (ponytail: the
# guarantee SC-002 needs — "unsupported/deferred selectable count = 0" — is
# already exactly what "unsupported" gives us).
catalogVersion: "3.0.0"
entries:
# --- Application Foundation (all single-select) ---
- capabilityId: foundation.app_initialization
optionId: simple
displayName: Simple Initialization
description: Start the app directly with a small explicit entry point.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/foundation/app_initialization_simple]
validationRequirements: []
- capabilityId: foundation.app_initialization
optionId: bootstrap
displayName: Bootstrap Pattern
description: Run ordered asynchronous setup before starting the app.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/foundation/app_initialization_bootstrap]
validationRequirements: []
- capabilityId: foundation.app_initialization
optionId: production_bootstrap
displayName: Production Bootstrap Pipeline
description: Bootstrap with guarded zones, error capture, and ordered services.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/foundation/app_initialization_production_bootstrap]
validationRequirements: []
- capabilityId: foundation.environment_config
optionId: dart_define
displayName: Dart Define
description: Read compile-time environment values with String.fromEnvironment.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/foundation/environment_config_dart_define]
validationRequirements: []
- capabilityId: foundation.environment_config
optionId: flutter_dotenv
displayName: Flutter Dotenv
description: Load environment values from an application asset.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: flutter_dotenv, version: "6.0.1"}
devDependencies: []
recipeRefs: [recipe/foundation/environment_config_flutter_dotenv]
validationRequirements: []
- capabilityId: foundation.environment_config
optionId: envied
displayName: Envied
description: Generate typed environment accessors at build time.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: envied, version: "1.1.1"}
devDependencies:
- {name: envied_generator, version: "1.1.1"}
recipeRefs: [recipe/foundation/environment_config_envied]
validationRequirements: ["requires:build_runner"]
- capabilityId: foundation.flavors
optionId: basic
displayName: Basic Flavors
description: Model dev, uat, and prod environments in Dart.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/foundation/flavors_basic]
validationRequirements: []
- capabilityId: foundation.flavors
optionId: advanced
displayName: Advanced Flavors
description: Configure Android product flavors and iOS schemes.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios]
dependencies: []
devDependencies: []
recipeRefs: [recipe/foundation/flavors_advanced]
validationRequirements: []
- capabilityId: foundation.logging
optionId: logger
displayName: Logger
description: Structured application logging with the logger package.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: logger, version: "2.7.0"}
devDependencies: []
recipeRefs: [recipe/foundation/logging_logger]
validationRequirements: []
- capabilityId: foundation.logging
optionId: talker
displayName: Talker
description: Logging and error reporting with retained history.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: talker, version: "5.1.19"}
devDependencies: []
recipeRefs: [recipe/foundation/logging_talker]
validationRequirements: []
- capabilityId: foundation.error_handling
optionId: basic
displayName: Basic Exception Handling
description: Handle expected exceptions with native Dart constructs.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/foundation/error_handling_basic]
validationRequirements: []
- capabilityId: foundation.error_handling
optionId: failure_result
displayName: Failure / Result Pattern
description: Return typed success or failure values from fallible work.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/foundation/error_handling_failure_result]
validationRequirements: []
- capabilityId: foundation.error_handling
optionId: global_boundary
displayName: Global Error Boundary
description: Capture Flutter, platform, and uncaught asynchronous errors.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/foundation/error_handling_global_boundary]
validationRequirements: []
- capabilityId: foundation.theme
optionId: basic_themedata
displayName: Basic ThemeData
description: Define a compact light ThemeData configuration.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/foundation/theme_basic_themedata]
validationRequirements: []
- capabilityId: foundation.theme
optionId: material3
displayName: Material 3 Theme System
description: Centralize Material 3 color and typography choices.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/foundation/theme_material3]
validationRequirements: []
- capabilityId: foundation.theme
optionId: design_tokens
displayName: Design Token Theme System
description: Express reusable color, spacing, and typography tokens.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/foundation/theme_design_tokens]
validationRequirements: []
- capabilityId: foundation.localization
optionId: gen_l10n
displayName: Flutter gen-l10n
description: SDK-generated localization delegates from ARB files.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: intl, version: "0.20.2"}
devDependencies: []
recipeRefs: [recipe/l10n/gen_l10n]
validationRequirements: ["requires:flutter_gen_l10n"]
- capabilityId: foundation.localization
optionId: easy_localization
displayName: Easy Localization
description: Load and switch JSON translations with easy_localization.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: easy_localization, version: "3.0.8"}
devDependencies: []
recipeRefs: [recipe/foundation/localization_easy_localization]
validationRequirements: []
- capabilityId: foundation.project_structure
optionId: feature_first
displayName: Feature First
description: Group code by feature. Stored convention; generation is unchanged in 0.3.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/org/feature_first]
validationRequirements: []
- capabilityId: foundation.project_structure
optionId: layer_first
displayName: Layer First
description: Group code by layer. Stored convention; feature generation consumes it later.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: []
validationRequirements: []
- capabilityId: foundation.project_structure
optionId: hybrid
displayName: Hybrid
description: Combine feature and layer grouping. Stored convention; feature generation consumes it later.
supportLevel: official
selectionType: single
requiredCapabilities: []
conflictingCapabilities: []
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: []
validationRequirements: []
# --- Architecture Depth (single, required) ---
- capabilityId: org.architecture_depth
optionId: simple
displayName: Simple
description: Feature-First without a Clean-architecture layer split.
supportLevel: official
selectionType: single
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/org/depth_simple]
validationRequirements: []
- capabilityId: org.architecture_depth
optionId: clean
displayName: Clean Architecture
description: Feature-First with data/domain/presentation layers.
supportLevel: official
selectionType: single
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/org/depth_clean]
validationRequirements: []
# --- State Management (single, required) ---
- capabilityId: org.state_management
optionId: bloc
displayName: Bloc / Cubit
description: Predictable state with flutter_bloc.
supportLevel: official
selectionType: single
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: flutter_bloc, version: "9.1.1"}
devDependencies: []
recipeRefs: [recipe/state/bloc]
validationRequirements: []
- capabilityId: org.state_management
optionId: riverpod
displayName: Riverpod
description: Compile-safe, testable state and dependency graph.
supportLevel: official
selectionType: single
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: flutter_riverpod, version: "3.3.2"}
devDependencies: []
recipeRefs: [recipe/state/riverpod]
validationRequirements: []
- capabilityId: org.state_management
optionId: setstate
displayName: setState / Minimal
description: Plain StatefulWidget state — no state-management library.
supportLevel: official
selectionType: single
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/state/setstate]
validationRequirements: []
# --- Routing (single, required; "skip" conditional on FR-015) ---
- capabilityId: org.routing
optionId: go_router
displayName: GoRouter
description: Declarative, URL-based routing.
supportLevel: official
selectionType: single
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: go_router, version: "14.8.1"}
devDependencies: []
recipeRefs: [recipe/routing/go_router]
validationRequirements: []
- capabilityId: org.routing
optionId: navigator_minimal
displayName: Navigator / Minimal
description: A single explicit Navigator route table — no router package.
supportLevel: official
selectionType: single
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/routing/navigator_minimal]
validationRequirements: []
- capabilityId: org.routing
optionId: skip
displayName: Skip
description: No routing recipe — offered only when the project still passes every gate (FR-015).
supportLevel: official
selectionType: single
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: []
validationRequirements: ["conditional:routing_skip_gate"]
# --- Backend and Networking (multi, optional) ---
- capabilityId: org.backend
optionId: rest_dio
displayName: REST API with Dio
description: HTTP client with interceptors, cancellation, and transforms.
supportLevel: official
selectionType: multi
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: dio, version: "5.10.0"}
devDependencies: []
recipeRefs: [recipe/backend/rest_dio]
validationRequirements: []
- capabilityId: org.backend
optionId: rest_http
displayName: REST API with package:http
description: The lightweight, official Dart HTTP client.
supportLevel: official
selectionType: multi
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: http, version: "1.6.0"}
devDependencies: []
recipeRefs: [recipe/backend/rest_http]
validationRequirements: []
- capabilityId: org.backend
optionId: firebase
displayName: Firebase foundation
description: Firebase core initialization (Deferred — see T078; no matrix row yet).
supportLevel: unsupported
selectionType: multi
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: []
dependencies:
- {name: firebase_core, version: "4.12.1"}
devDependencies: []
recipeRefs: []
validationRequirements: [deferred]
- capabilityId: org.backend
optionId: supabase
displayName: Supabase foundation
description: Supabase client initialization.
supportLevel: official
selectionType: multi
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: supabase_flutter, version: "2.16.0"}
devDependencies: []
recipeRefs: [recipe/backend/supabase]
validationRequirements: []
# --- Local Storage (multi, optional) ---
- capabilityId: org.local_storage
optionId: shared_preferences
displayName: SharedPreferences
description: Simple key-value storage.
supportLevel: official
selectionType: multi
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: shared_preferences, version: "2.5.5"}
devDependencies: []
recipeRefs: [recipe/storage/shared_preferences]
validationRequirements: []
- capabilityId: org.local_storage
optionId: secure
displayName: Flutter Secure Storage
description: Encrypted key-value storage backed by Keychain/Keystore.
supportLevel: official
selectionType: multi
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: flutter_secure_storage, version: "10.3.1"}
devDependencies: []
recipeRefs: [recipe/storage/secure]
validationRequirements: []
- capabilityId: org.local_storage
optionId: drift
displayName: Drift / SQLite
description: Typed, reactive SQL database on top of SQLite.
supportLevel: official
selectionType: multi
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: drift, version: "2.34.2"}
- {name: drift_flutter, version: "0.3.1"}
- {name: sqlite3, version: "3.5.0"}
devDependencies:
- {name: drift_dev, version: "2.34.4"}
- {name: build_runner, version: "2.5.4"}
recipeRefs: [recipe/storage/drift]
validationRequirements: ["requires:build_runner"]
# --- Data Modeling and Serialization (single, required) ---
- capabilityId: org.data_modeling
optionId: freezed_json
displayName: freezed + json_serializable
description: Immutable models with generated unions, copyWith, and JSON.
supportLevel: official
selectionType: single
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: freezed_annotation, version: "2.4.4"}
- {name: json_annotation, version: "4.9.0"}
devDependencies:
- {name: freezed, version: "2.5.8"}
- {name: json_serializable, version: "6.9.5"}
- {name: build_runner, version: "2.5.4"}
recipeRefs: [recipe/model/freezed_json]
validationRequirements: ["requires:build_runner"]
- capabilityId: org.data_modeling
optionId: json_serializable
displayName: json_serializable only
description: Generated JSON (de)serialization without freezed unions.
supportLevel: official
selectionType: single
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: json_annotation, version: "4.9.0"}
devDependencies:
- {name: json_serializable, version: "6.9.5"}
- {name: build_runner, version: "2.5.4"}
recipeRefs: [recipe/model/json_serializable]
validationRequirements: ["requires:build_runner"]
- capabilityId: org.data_modeling
optionId: manual_models
displayName: Manual models
description: Hand-written model classes — no codegen.
supportLevel: official
selectionType: single
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/model/manual]
validationRequirements: []
# --- Dependency Injection (single, required; riverpod_di conditional on FR-016) ---
- capabilityId: org.dependency_injection
optionId: get_it
displayName: GetIt
description: Service-locator style dependency injection.
supportLevel: official
selectionType: single
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: get_it, version: "8.3.0"}
devDependencies: []
recipeRefs: [recipe/di/get_it]
validationRequirements: []
- capabilityId: org.dependency_injection
optionId: riverpod_di
displayName: Riverpod-based injection
description: Providers as the injection graph — selectable only when State Management = Riverpod (FR-016).
supportLevel: official
selectionType: single
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies:
- {name: flutter_riverpod, version: "3.3.2"}
devDependencies: []
recipeRefs: [recipe/di/riverpod]
validationRequirements: ["conditional:requires_state_management_riverpod"]
- capabilityId: org.dependency_injection
optionId: manual_injection
displayName: Manual injection
description: Constructor-passed dependencies — no DI container.
supportLevel: official
selectionType: single
flutterConstraint: ">=3.41.0 <3.42.0"
dartConstraint: "^3.11.0"
platformSupport: [android, ios, web, macos, windows, linux]
dependencies: []
devDependencies: []
recipeRefs: [recipe/di/manual]
validationRequirements: []
''';