PackageTrack
Sign in Get early access

app_intents_codegen

Code generator for Flutter AppIntents. Produces Swift and Dart code from @IntentSpec and @EntitySpec annotations.

0.15.0 359 downloads/mo #942 most downloaded on pub.dev touyou/flutter_intents

What this package is like to depend on

Last release 3 days ago

21 Aug 2026

Ships fairly regularly

a new release about every 4 weeks

Nearly every release is documented

notes for 30 of 30 stable releases

Nothing withdrawn

no release was ever pulled

7 months old

30 releases · first in 2026

30 releases in the last 12 months

see the full history below

Release timeline

30 releases · Jan 2026 to Aug 2026
Release Pre-release

Releases

latest 30
  1. 0.15.0 21 Aug 2026
    Release notes

    Two follow-ups to the AppIntentsBridge distribution work in v0.14.0. If you added the Swift package by path in 0.14.0, see Migration below.

    app_intents

    Fix: import AppIntentsBridge did not resolve on the CocoaPods route (#105)

    app_intents_bridge.podspec had no s.module_name, so CocoaPods derived the module name from s.name and emitted framework module app_intents_bridge. Every generate_widget_swift output opens with import AppIntentsBridge, so the generated code could not be built as generated by a CocoaPods consumer.

    The failure was easy to misread: the import line itself often reported nothing, and only the types surfaced, as Cannot find 'AppIntentsEntityCache' in scope.

    Fixed by declaring s.module_name = 'AppIntentsBridge'. All three routes now take the same import line. Verified against the generated modulemap, which now reads framework module AppIntentsBridge.

    AppIntentsBridge is now a product of the plugin's own Swift package

    v0.14.0 recommended adding the bridge from ios/.symlinks/plugins/…, but .symlinks is created only by flutter_install_all_ios_pods while CocoaPods evaluates a Podfile. An app that had migrated to Swift Package Manager and run pod deintegrate — which the Flutter tool itself suggests once every plugin is a Swift Package — had no version-following local path at all, and was left with .package(url:), the one route that is not pinned to the pub version.

    AppIntentsBridge is now a second product of the plugin's own Swift package, so the recommended route is:

    File → Add Package Dependencies… → Add Local…ios/Flutter/ephemeral/Packages/.packages/app_intents → add the AppIntentsBridge library

    Flutter's Swift Package Manager integration generates that symlink, so the path needs no Podfile and survives app_intents upgrades. Add only AppIntentsBridge to an extension target — the sibling app-intents library links Flutter.

    It has to be that package rather than a sibling directory: Xcode normalizes local-package paths lexically, so …/.packages/app_intents/../AppIntentsBridge collapses to .packages/AppIntentsBridge and fails to resolve.

    Route Needs a Podfile? Follows the pub version?
    Local Swift package (recommended) no yes
    CocoaPods app_intents_bridge pod yes yes
    Remote .package(url:) no no — pin the vX.Y.Z tag

    The CocoaPods pod and the root-manifest .package(url:) route are otherwise unchanged. app_intents.podspec still globs app_intents/Sources/app_intents/** only, so the two pods carry no duplicate symbols.

    Migration

    If you added the Swift package by path in 0.14.0 (ios/.symlinks/plugins/app_intents/ios/AppIntentsBridge), re-point it at ios/Flutter/ephemeral/Packages/.packages/app_intents and select the AppIntentsBridge library.

    CocoaPods and .package(url:) users need no change beyond the version bump — though CocoaPods users can now drop any import app_intents_bridge workaround.

    app_intents_codegen / app_intents_annotations

    No code changes; released in lockstep.

    Also in this release

    The example app gained a real TaskWidget app-extension target. app/ios/TaskWidget was previously a bare directory of generated Swift verified only by swiftc -typecheck; it now compiles in a genuine extension target, links the AppIntentsBridge product over the path above, and carries its own App Groups entitlement — so the downstream integration story is exercised on every example-app build.

    Note for contributors: swift test in the bridge directory is gone. The plugin's package is iOS-only because it links Flutter, so the Swift tests run via xcodebuild test -scheme AppIntentsBridge on a simulator, which is what CI already did.

    Full Changelog: v0.14.0...v0.15.0

    Open source →
    Release notes
    • No codegen changes. The import AppIntentsBridge line that generate_widget_swift emits now resolves on the CocoaPods route too (#105), and the module ships as a product of the plugin's Swift package (#102 follow-up) — see the app_intents changelog and docs/usage.md → "Consuming AppIntentsBridge".
    • Bumps app_intents_annotations dependency to ^0.15.0.
    Open source →
  2. 0.14.0 21 Aug 2026
    Release notes

    app_intents

    • Fix: AppIntentsBridge could not be reached from a downstream app (#102). The Swift package now ships inside the pub package at ios/AppIntentsBridge/, so import AppIntentsBridge — which the generate_widget_swift output requires — resolves without a separately versioned dependency. Three consumption routes, all building the same sources:

      Route How
      Local Swift package (recommended, projects with a Podfile) File → Add Package Dependencies… → Add Local…ios/.symlinks/plugins/app_intents/ios/AppIntentsBridge
      CocoaPods pod 'app_intents_bridge', :path => '.symlinks/plugins/app_intents/ios'
      Remote Swift package (required for Podfile-less SPM projects) https://github.com/touyou/flutter_intentsAppIntentsBridge

      A new standalone app_intents_bridge podspec carries no Flutter dependency, so an App Extension target — which must not link Flutter and therefore sits outside flutter_install_all_ios_pods — can take it. app_intents.podspec deliberately does not include these sources, so a target may take both pods without duplicate symbols. The repository root Package.swift keeps the same AppIntentsBridge product, so existing .package(url:) consumers are unaffected.

      Previously the package lived only in the repository's ios-spm/ subdirectory, which neither pub nor CocoaPods shipped and which SPM cannot resolve over a Git URL — a Widget Extension target failed with No such module 'AppIntentsBridge'.

    • Docs: AppIntentsEntityCacheKey.forEntity now states that its result is the cache key, not the raw UserDefaults key. The plugin namespaces it as app_intents.<storageIdentifier>.cache.<cacheKey>; reading with the un-namespaced key returns nil silently, which only surfaces as an empty widget configuration picker. Same note added to docs/usage.md / docs/usage.ja.md.

    app_intents_codegen

    • Widens the analyzer constraint to >=7.0.0 <15.0.0, so the package can be used alongside analyzer 14.x. Verified against analyzer 14.1.0 / _fe_analyzer_shared 105.0.0: analysis clean, full test suite passing, and build_runner, generate_swift, generate_widget_swift and generate_kotlin all producing byte-identical output to the 13.x resolution.
    • Bumps app_intents_annotations to ^0.14.0.

    app_intents_annotations

    • No user-facing changes; released in lockstep.

    Also in this release

    • Example app: removed three stale, never-compiled copies of AppIntentsBridge sources (#104).
    • Toolchain: AGP 9.2.1 → 9.3.1, Gradle wrapper 9.6.1 → 9.7.0, build 4.0.8, build_test 3.5.17, dart_style 3.1.12.
    • RELEASING.md now lists the two podspecs, the three per-package READMEs, and the ^X.Y.Z pins in docs/ — all of which the checklist had been omitting.

    Full Changelog: v0.13.0...v0.14.0

    Open source →
    Release notes
    • Widens the analyzer constraint to >=7.0.0 <15.0.0, so this package can be used alongside analyzer 14.x. Verified against analyzer 14.1.0 / _fe_analyzer_shared 105.0.0: analysis is clean, the full test suite passes, and build_runner, generate_swift, generate_widget_swift and generate_kotlin all produce byte-identical output to the 13.x resolution.
    • Bumps app_intents_annotations dependency to ^0.14.0.
    • Docs: the Swift emitted by generate_widget_swift opens with import AppIntentsBridge; that package now ships inside the app_intents pub package, so a Widget Extension target can resolve it. See docs/usage.md → "Consuming AppIntentsBridge" (#102).
    Open source →
  3. 0.13.0 21 Aug 2026
    Release notes
    • feat: App Extension entity access + WidgetConfigurationIntent codegen (#97/#98, #99)
    • fix(codegen): normalize entity id property to id for AppEntity conformance (#100)

    Also fixes version references that were missed in the 0.12.0 release:
    the iOS podspec (left at 0.11.0) and the ^0.11.0 dependency snippets in
    docs/ and the per-package READMEs.

    Co-Authored-By: Claude Opus 5 [email protected]

    Open source →
    Release notes
    • Fix: entity @EntityId fields not named id generated Swift that does not compile. AppEntity refines Identifiable, which requires a stored property literally named id; SwiftGenerator emitted the Dart field name verbatim, so @EntityId on e.g. teamId produced type 'X' does not conform to protocol 'AppEntity' / 'Identifiable' (and a confusing 'ObjectIdentifier' does not conform to 'EntityIdentifierConvertible'). The Swift identifier property is now always emitted as id, while the Dart field name survives as the cache/dictionary key (dict["teamId"]) — matching what the Dart cache projection writes, and matching the rest of the generator, which already read <entity>.id unconditionally when serializing entity-typed intent parameters. Entities whose field is already named id generate byte-identical output. The unnormalizable case (@EntityId on a non-id field plus a separate field named id) now throws InvalidGenerationSourceError instead of emitting two var id declarations.
    • @WidgetConfigurationSpec codegen + the generate_widget_swift CLI — emits a WidgetConfigurationIntent plus a cache-backed EntityQuery for a Widget Extension target, which reads the App Group entity cache instead of going through FlutterBridge (#98). WidgetSwiftGenerator applies the same id normalization described above.
    • Bumps app_intents_annotations dependency to ^0.13.0.
    Open source →
  4. 0.12.0 20 Jun 2026
    Release notes

    Follow-up release after v0.11.0 reflecting the matsudate WWDC 2026 review #4 survey: three additive, opt-in items (#55 intent donation, #52 IntentParameter.ValueState, and the system.searchInApp schema rename) plus the deferred-items punch list in CLAUDE.md. All three packages are released together at the same version.

    app_intents 0.12.0

    • New API AppIntents().donateIntent(identifier, params) (#55): wraps AppIntent.donate() (stable iOS 16+) so the Dart side can record an executed intent for Siri / Apple Intelligence to learn from. The call is forwarded through AppIntentsPlugin.intentDonationForwarder (set in AppDelegate, mirroring relevantEntitiesDonationForwarder) to FlutterBridge.shared.donateIntent, which invokes the per-intent reverse-executor emitted by @IntentSpec(donatable: true) codegen. iOS-only; a no-op on other platforms.
    • iOS native:
      • AppIntentsPlugin.intentDonationForwarder static hook for AppDelegate wiring. The donateIntent MethodChannel case returns DONATION_NOT_CONFIGURED when the forwarder is not set.
      • FlutterBridge.shared.registerIntentDonator(intentIdentifier:_:) / donateIntent(intentIdentifier:params:) / hasIntentDonator(for:); the donators dictionary is cleared by clearExecutors() alongside the other executor slots.
    • Docs (docs/usage.md): adds the intentDonationForwarder wiring example next to the existing relevantEntitiesDonationForwarder block, plus the matching register<Intent>Donator() call site.

    app_intents_annotations 0.12.0

    • @IntentSpec(donatable: true) — opt-in for AppIntent.donate() so Siri / Apple Intelligence learns the user performed the action in-app (#55). Inert unless the donation experimental feature is enabled in app_intents_codegen. MVP restricts to primitive parameter types (String / int / double / bool / DateTime, optionals allowed); entity / file / enum / union / collection params are rejected at codegen time.
    • @IntentParam(useValueState: true) — opt-in for IntentParameter.ValueState (@available(iOS 18.2, *) stable — no #if gating required). Distinguishes unset / set / cleared for an optional update parameter so the Dart handler can tell "don't touch" from "explicitly cleared." Only valid on a nullable Dart type; analyzer rejects use on non-optional params.
    • AppSchemas.system.searchInApp — typed accessor for the iOS 27 system search-in-app schema (iOS 17 used .system.search; iOS 27 renamed it). The iOS-17 identifier remains reachable via AppSchemas.of(AppSchemaDomain.system, 'search'). Also adds AppSchemas.system.open.

    app_intents_codegen 0.12.0

    • @IntentSpec(donatable: true) (#55, requires --experimental=donation): emits a #if APP_INTENTS_WWDC26-gated register<Intent>Donator() reverse-executor that reconstructs the concrete intent from a [String: Any] params dict and calls intent.donate() (stable iOS 16+). Analyzer enforces the MVP primitive-only contract; rejects entityType / enumType / fileType / entityCollectionType / @UnionValue / non-primitive Dart types at codegen time.
    • @IntentParam(useValueState: true) (#52): emits if #available(iOS 18.2, *) { switch $field.valueState { … @unknown default … } } in perform() and adds a sibling "<field>State": "unset" | "cleared" | "set" entry to the wire dict. The state key is added via if let in both FlutterBridge and cache-mode emit paths, so it is absent on iOS < 18.2 and the Dart handler can distinguish "no state info" from a present state. Analyzer rejects opt-in on non-optional Dart params. The Swift output uses @unknown default to future-proof against Swift 6's non-frozen enum errors. No experimental flag — this is a normal feature (the SDK symbol is stable iOS 18.2).
    • AppSchemas.system.searchInApp — codegen consumes the schema string verbatim through the existing @AppIntent(schema:) / @AppEntity(schema:) macro emission (the app-schema experimental gate is unchanged); no codegen change beyond the typed accessor that lives in app_intents_annotations.
    • Bumps app_intents_annotations dependency to ^0.12.0.

    Repo meta

    CLAUDE.md adds a new Deferred WWDC26 punch list section reserving ADR numbers 0005–0010 for the seven defer-with-ADR items uncovered by the matsudate review #4 audit (snippetView, dialogFullSupporting, requestValue, PlaceDescriptor export, LongRunningIntent progress/cancel forwarding, SyncableEntityIdentifier dual-id, @AppIntentsPackage). One document-only item (notificationEntity) is also tracked.

    Verification

    • All three Dart unit-test suites green (annotations, codegen, plugin), Swift AppIntentsBridge suite green (26 tests, .serialized trait fixed the shared-singleton race when adding the new intent-donator tests).
    • swiftc -typecheck of the useValueState emit pattern against the Xcode 27 beta iOS 27 SDK (target iOS 17.0): exit 0, no warnings.
    • The example app's regenerated Swift is byte-identical to the previous commit — the opt-in design means existing intents that don't opt in are completely unaffected.
    Open source →
    Release notes
    • @IntentSpec(donatable: true) (#55, requires --experimental=donation): emits a #if APP_INTENTS_WWDC26-gated register<Intent>Donator() reverse-executor that reconstructs the concrete intent from a [String: Any] params dict and calls intent.donate() (stable iOS 16+). Analyzer enforces the MVP primitive-only contract; rejects entityType / enumType / fileType / entityCollectionType / @UnionValue / non-primitive Dart types at codegen time.
    • @IntentParam(useValueState: true) (#52): emits if #available(iOS 18.2, *) { switch $field.valueState { … @unknown default … } } in perform() and adds a sibling "<field>State": "unset" | "cleared" | "set" entry to the wire dict. The state key is added via if let in both FlutterBridge and cache-mode emit paths, so it is absent on iOS < 18.2 and the Dart handler can distinguish "no state info" from a present state. Analyzer rejects opt-in on non-optional Dart params. The Swift output uses @unknown default to future-proof against Swift 6's non-frozen enum errors. No experimental flag — this is a normal feature (the SDK symbol is stable iOS 18.2).
    • AppSchemas.system.searchInApp — codegen consumes the schema string verbatim through the existing @AppIntent(schema:) / @AppEntity(schema:) macro emission (the app-schema experimental gate is unchanged); no codegen change beyond the typed accessor that lives in app_intents_annotations.
    • Bumps app_intents_annotations dependency to ^0.12.0.
    Open source →
  5. 0.11.0 09 Jun 2026
    Release notes

    First release since v0.10.1 to ship the accumulated WWDC26 App Intents work (opt-in, default OFF), plus a documentation audit pass. All three packages are released together at the same version.

    app_intents 0.11.0

    • WWDC26 experimental bridges (opt-in; exercised only when experimental Swift generation is enabled):
      • IntentValueQuery (#51): registerValueQueryHandler + platform queryValuesAsync (generic inbound value query; the visual SemanticContentDescriptor variant is out of scope)
      • Donations & discovery (#55): donateRelevantEntities(id, entities, context:) via a reverse executor, wired through AppIntentsPlugin.relevantEntitiesDonationForwarder
      • Onscreen-awareness scaffold (#56): setOnscreenEntity(typeId, instanceId, title:) / clearOnscreenEntity() backed by NSUserActivity, plus AppIntentsPlugin.onscreenEntityBinder
      • Extended the platform interface, method channel, and iOS AppIntentsPlugin.swift accordingly
    • Docs: fix the Android setup README (compileSdk/targetSdk 37, minSdk 36 — the previous "36" would fail the appfunctions:1.0.0-alpha09 AAR-metadata check) and replace the placeholder example app READMEs with real content

    app_intents_annotations 0.11.0

    • WWDC26 App Intents annotation surfaces (opt-in; inert unless experimental code generation is enabled in app_intents_codegen):
      • Intent execution control (#52): @IntentSpec(longRunning:, cancellable:, executionTargets:) + the IntentExecutionTarget enum
      • App Schema (#49): schema: on @EntitySpec / @IntentSpec / @EnumSpec, plus the AppSchemas catalog (messages / mail / photos)
      • Semantic indexing (#50): @EntityProperty(title:, indexingKey:)
      • Entity ownership (#55): @EntitySpec(ownership:) + EntityOwnershipState
      • Rich parameter types (#53): Duration parameters, the new PersonName value type, @IntentParam(entityCollectionType:), and @UnionValueSpec / @UnionCase (which codegen lowers to a native @UnionValue enum)
      • Cross-app export (#54): @EntitySpec(exportAs:) + EntityExportType
      • IntentValueQuery (#51) and donations/discovery (#55): @EntitySpec(valueQuery:, syncable:, relevantEntities:)

    app_intents_codegen 0.11.0

    • WWDC26 experimental code generation (opt-in, default OFF). Master switch --experimental-wwdc26 + per-feature --experimental=<flag> (app-schema, ownership, long-running, rich-types, value-query, value-representation, donation). Experimental Swift is emitted inside #if APP_INTENTS_WWDC26 with a mandatory stable #else fallback, so released-SDK builds (without the flag) still compile.
      • Intent execution control (#52): LongRunningIntent / CancellableIntent / execution targets
      • App Schema (#49) + semantic indexing (#50): @AppEntity/@AppIntent/@AppEnum(schema:) and @Property(indexingKey:) (indexing ships as a normal iOS 18.4 feature)
      • Entity ownership (#55): additive OwnershipProvidingEntity conformance
      • Rich parameter types (#53): native Duration / PersonNameComponents / EntityCollection / @UnionValue parameters with compile-everywhere fallbacks, plus a generated union fromMap factory
      • IntentValueQuery (#51), cross-app export (#54, IntentPerson), and SyncableEntity / RelevantEntities donation (#55)
      • Dual-branch output verified via swiftc -typecheck (with and without APP_INTENTS_WWDC26) against the Xcode 27 beta SDK; see scripts/verify_experimental_swift.sh
    • AppIntentsTesting scaffold for the example app (#57, compile-checked, inert on stable Xcode)
    • Docs: correct the @EnumSpec / @EnumCaseDisplay examples, the Dart SDK constraint (^3.10.0) and dependency ranges, the Android toolchain versions, and add the ownership experimental flag to the feature tables

    Published to pub.dev:

    Full Changelog: v0.10.1...v0.11.0

    Open source →
    Release notes
    • WWDC26 experimental code generation (opt-in, default OFF). Master switch --experimental-wwdc26 + per-feature --experimental=<flag> (app-schema, ownership, long-running, rich-types, value-query, value-representation, donation). Experimental Swift is emitted inside #if APP_INTENTS_WWDC26 with a mandatory stable #else fallback, so released-SDK builds (without the flag) still compile.
      • Intent execution control (#52): LongRunningIntent / CancellableIntent / execution targets.
      • App Schema (#49) + semantic indexing (#50): @AppEntity/@AppIntent/@AppEnum(schema:) and @Property(indexingKey:) (indexing ships as a normal iOS 18.4 feature).
      • Entity ownership (#55): additive OwnershipProvidingEntity conformance.
      • Rich parameter types (#53): native Duration / PersonNameComponents / EntityCollection / @UnionValue parameters with compile-everywhere fallbacks, plus a generated union fromMap factory.
      • IntentValueQuery (#51), cross-app export (#54, IntentPerson), and SyncableEntity / RelevantEntities donation (#55).
      • Dual-branch output verified via swiftc -typecheck (with and without APP_INTENTS_WWDC26) against the Xcode 27 beta SDK; see scripts/verify_experimental_swift.sh.
    • AppIntentsTesting scaffold for the example app (#57, compile-checked, inert on stable Xcode).
    • Docs: correct the @EnumSpec / @EnumCaseDisplay examples, the Dart SDK constraint (^3.10.0) and dependency ranges, the Android toolchain versions, and add the ownership experimental flag to the feature tables.
    Open source →
  6. 0.10.1 05 Jun 2026
    Release notes

    app_intents 0.10.1

    • Fix Android build on Kotlin 2.3+ / AGP 9.1.0+: migrate the plugin's android/build.gradle.kts from the deprecated kotlinOptions DSL to the modern compilerOptions DSL (#20, thanks @cpbritton)
      • The kotlinOptions block now causes "Script compilation errors" with recent Kotlin Gradle Plugin / AGP toolchains; compilerOptions { jvmTarget.set(JvmTarget.JVM_17) } is the supported replacement
    • Maintenance: dependency bumps and OSS infrastructure hardening (CI, issue/PR templates, Dependabot)

    app_intents_annotations 0.10.1 / app_intents_codegen 0.10.1

    • No API changes; version-aligned with app_intents 0.10.1
    • codegen: dependency maintenance (analyzer, source_gen, build, build_test, dart_style, test)

    Published to pub.dev:

    Full Changelog: v0.10.0...v0.10.1

    Open source →
    Release notes
    • No codegen changes; version bump aligns with app_intents 0.10.1 (Android compilerOptions DSL fix for Kotlin 2.3+ / AGP 9.1.0+, #20)
    • Maintenance: dependency bumps (analyzer, source_gen, build, build_test, dart_style, test)
    Open source →
  7. 0.10.0 27 May 2026
    Release notes

    app_intents 0.10.0

    • Add Swift Package Manager (SPM) support for the iOS plugin (#29, #30)
      • New manifest at ios/app_intents/Package.swift; native sources moved to ios/app_intents/Sources/app_intents/ (SPM-standard layout)
      • app_intents.podspec now points source_files/resource_bundles at the shared Sources/ location, so CocoaPods and SPM build the same files (both remain supported during the transition)
      • Fixes Flutter reporting app_intents as "does not support Swift Package Manager" when host apps enable SPM
      • Host apps that enable SPM need Flutter 3.24+; CocoaPods users are unaffected (flutter: '>=3.3.0' unchanged)
      • The privacy manifest is now actually bundled (previously commented out in the podspec)
    • Declare the NSPrivacyAccessedAPICategoryUserDefaults required-reason API in PrivacyInfo.xcprivacy
      • Reasons CA92.1 (UserDefaults accessible only to the app itself) and 1C8F.1 (UserDefaults shared within the App Group, for cross-process cache/EntityQuery data)
      • Required for App Store review of downstream apps that bundle the plugin

    app_intents_annotations 0.10.0 / app_intents_codegen 0.10.0

    • No API changes; version-aligned with app_intents 0.10.0

    Published to pub.dev:

    Open source →
    Release notes
    • No codegen changes; version bump aligns with app_intents 0.10.0 (Swift Package Manager support for the iOS plugin, #29)
    Open source →
  8. 0.9.0 21 May 2026
    Release notes
    • @AppShortcutsBuilder annotation in generated AppShortcuts (#25)
    • App Group UserDefaults fallback for EntityQuery cold-start (#26)
      • New @EntitySpec.persistedCacheKey field
      • Defaults to app_intents.entities. when enumerable/indexed

    Co-Authored-By: Claude Opus 4.7 (1M context) [email protected]

    Open source →
    Release notes
    • Generated Swift EntityQuery now reads cached entities from App Group UserDefaults before waiting on the Flutter executor, mitigating the cold-start entityQueryNotConfigured error when iOS has killed the host app (#26)
    • SwiftGenerator emits the new App Group fallback path when @EntitySpec(persistedCacheKey: ...) is set, or when enumerable: true / indexed: true provides a default key app_intents.entities.<identifier>
    • Generated Swift AppShortcuts struct now uses the @AppShortcutsBuilder result builder annotation per Apple's AppShortcutsProvider protocol requirement (#25)
    Open source →
  9. 0.8.0 20 May 2026
    Release notes

    Bump all packages to v0.8.0 to publish the AppFunctions alpha09
    upgrade (#23). Downstream Android hosts need AGP 9.1.0+, Gradle
    9.3.1+, compileSdk 37, and the android.newDsl=false /
    android.builtInKotlin=false shims in gradle.properties. Regenerate
    Kotlin output with dart run app_intents_codegen:generate_kotlin
    after upgrading.

    Co-Authored-By: Claude Opus 4.7 (1M context) [email protected]

    Open source →
    Release notes
    • Upgrade androidx.appfunctions from 1.0.0-alpha07 to 1.0.0-alpha09 in the example app (#23)
    • KotlinGenerator now emits @AppFunction(isDescribedByKDoc = true) and @AppFunctionSerializable(isDescribedByKDoc = true) (uppercase D) to match the renamed parameter introduced in alpha08
    • Breaking for downstream Android hosts: alpha09's AAR metadata requires AGP 9.1.0+, Gradle 9.3.1+, and compileSdk = 37. Hosts also need android.newDsl=false (Flutter Gradle plugin compatibility) and android.builtInKotlin=false (KSP compatibility) in android/gradle.properties. Regenerate Kotlin output with dart run app_intents_codegen:generate_kotlin after upgrading. See docs/usage.md for the full setup.
    Open source →
  10. 0.7.8 11 May 2026
    Release notes

    Fix: Android AppIntentsPlugin now handles iOS-only cache methods
    (getCachedValue/setCachedValue/clearCachedValue/configureStorage/
    processPendingActions) as no-ops returning null, instead of throwing
    MissingPluginException. Prevents silent failures in release builds
    where PlatformDispatcher.onError swallows the exception (#22).

    Co-Authored-By: Claude Opus 4.7 (1M context) [email protected]

    Open source →
    Release notes
    • No codegen changes; version bump to align with plugin fix release (Android cache no-op handlers)
    Open source →
  11. 0.7.7 05 Apr 2026
    Release notes
    • No codegen changes; version bump to align with plugin fix release
    Open source →
  12. 0.7.6 30 Mar 2026
    Release notes
    • No codegen changes; version bump to align with plugin bug fix release (App Group storage fix)
    Open source →
  13. 0.7.5 05 Mar 2026
    Release notes
    • Fix: Kotlin codegen file parameter (IntentFile) now includes mimeType and filename in generated map (#15)
    • Docs: Add waitForPlugin() pattern explanation with timeout rationale and failure behavior (#16)
    • Docs: Document processPendingActions() initialization order and cold start race condition (#17)
    • Docs: Add updateAppShortcutParameters() migration guide for users migrating from other libraries (#18)
    Open source →
  14. 0.7.4 04 Mar 2026
    Release notes
    • Fix: Use ${param} placeholder format in xcstrings keys for ParameterSummary and AppShortcut phrases (#14)
      • Swift key-path syntax \(\.$param) requires ${param} in xcstrings keys, not {param}
      • YAML translations support both {param} and ${param} key formats
    • Revert: Remove LocalizedStringResource wrapper from IntentDescription (unnecessary for localization)
    Open source →
  15. 0.7.3 04 Mar 2026
    Release notes
    • Fix: Wrap IntentDescription with LocalizedStringResource for proper localization support (#14)
    Open source →
  16. 0.7.2 03 Mar 2026
    Release notes
    • Fix: Escape newlines in Swift IntentDescription("...") string literal to prevent compile errors
    Open source →
  17. 0.7.1 03 Mar 2026
    Release notes
    • Fix: Kotlin KDoc multiline description now correctly adds * prefix to continuation lines
    • Fix: Add missing import AppIntentsBridge in generated Swift code for FlutterBridge mode and entity queries
    Open source →
  18. 0.7.0 03 Mar 2026
    Release notes
    • Add .xcstrings String Catalog generation for iOS localization
      • New XcstringsGenerator class collects all localizable strings from annotations
      • Translations YAML file support for multi-language localization
      • Merge mode preserves existing translations when regenerating
      • {param} placeholders converted to %@ / %1$@ format; ${applicationName} preserved
    • Add CLI options to generate_swift: --xcstrings, --translations, --source-language
    • Add yaml package dependency
    Open source →
  19. 0.6.2 28 Feb 2026
    Release notes
    • Fix: _toUpperSnakeCase no longer prepends underscore to uppercase-starting enum names in KotlinGenerator
    • Fix: Add missing return keyword in displayRepresentation for entities without nullable image
    • Fix: Deduplicate generateAppShortcutsProvider / _generateShortcutsProviderBody in SwiftGenerator
    • Fix: Simplify _cleanClassName to single-pass Spec suffix removal
    • Fix: Extract _isNullableParam helper to eliminate triple-computation in DartGenerator
    • Fix: Remove unnecessary intermediate StringBuffer in generateAll
    • Fix: Add temp file cleanup in generated Swift code for FlutterBridge execution mode
    • Improve: Analyzer error reporting — InvalidGenerationSourceError instead of silent null for missing required fields
    • Improve: Fix _toDisplayTitle docstring accuracy in EnumAnalyzer
    • Improve: Inline _formatType dead abstraction in EntityAnalyzer
    • Improve: Type _extractPhrases parameter as DartObject? instead of dynamic in ShortcutAnalyzer
    Open source →
  20. 0.6.1 27 Feb 2026
    Release notes
    • Fix: Map IntentFile/IntentFile? to String/String? in KotlinGenerator for KSP compatibility (#11)
      • KSP compiler does not support IntentFile as @AppFunction parameter type
      • File parameters now generate mapOf("path" to value) for Dart-side IntentFile.fromMap() compatibility
    • Documentation fixes: correct outdated code examples and API references
    Open source →
  21. 0.6.0 27 Feb 2026
    Release notes
    • BREAKING: Remove inputType/outputType from IntentInfo model
    • Generate type-safe XxxParams class for each intent with parameters
      • fromMap(Map<String, dynamic>) for MethodChannel / cache mode
      • fromQueryParameters(Map<String, String>) for URL scheme deep links
      • Supports String, int, double, bool, DateTime, IntentFile types
    • Handler registration now uses Params class and always returns empty map
    • Remove _extractTypeArguments() from IntentAnalyzer
    Open source →
  22. 0.5.2 27 Feb 2026
    Release notes
    • Fix Swift 6 strict concurrency errors in FlutterBridge.swift when used as SPM package
      • Add sending keyword to all non-Sendable parameters and return types crossing actor boundaries
      • Affects invoke(), queryEntities(), suggestedEntities(), and all executor/handler closures
    Open source →
  23. 0.5.1 27 Feb 2026
    Release notes
    • Add root Package.swift so AppIntentsBridge can be fetched via standard SPM from repository URL
    Open source →
  24. 0.5.0 27 Feb 2026
    Release notes
    • Fix AppShortcut phrase {paramName} to generate \(\.$paramName) Swift syntax
    • Add imageName support in @EnumCaseDisplay code generation (asset bundle image)
    • Add displayImageName support in @EntitySpec for entity DisplayRepresentation image
      • Static image via named: for entity type, per-instance @EntityImage via systemName: takes priority
    • Add EnumerableEntityQuery extension generation when enumerable: true
    • Add IndexedEntity extension generation when indexed: true (iOS 26+, import CoreSpotlight)
    • Update EnumAnalyzer to extract imageName from @EnumCaseDisplay
    • Update EntityAnalyzer to extract displayImageName, indexed, enumerable from @EntitySpec
    • 189 tests (28 new tests for all new features)
    Open source →
  25. 0.4.1 27 Feb 2026
    Release notes
    • Widen dependency constraints to resolve conflicts with other codegen packages (e.g., go_router_builder)
      • source_gen: ">=2.0.0 <5.0.0" (was ^2.0.0)
      • analyzer: ">=7.0.0 <11.0.0" (was ^7.0.0)
      • build: ">=2.4.0 <5.0.0" (was ^2.4.0)
      • build_test: ">=2.2.0 <4.0.0" (was ^2.2.0)
    • Migrate to TypeChecker.fromUrl() for compatibility with source_gen 4.x
    • Migrate to LibraryElement.classes/.enums API for compatibility with analyzer 10.x
    • Fix nullable element.name handling for analyzer 10.x
    Open source →
  26. 0.4.0 27 Feb 2026
    Release notes
    • Add supportedModes support in SwiftGenerator
      • Generates @available(iOS 26.0, *) static var supportedModes: IntentModes { .foreground }
      • Generates static var openAppWhenRun: Bool { true } for backward compatibility
      • Both properties generated when supportedModes: foreground or urlScheme is set
    • Add IntentFile parameter support in SwiftGenerator
      • @Parameter(supportedTypeIdentifiers:) for file type parameters
      • File serialization code generation (write to temp file, extract path/mimeType/filename)
      • import UniformTypeIdentifiers when file params present
    • Add cache mode in SwiftGenerator (_writeCachePerformMethod)
      • Auto-generated when supportedModes: foreground without urlScheme
      • Caches params to UserDefaults via AppIntentsPlugin.setPendingAction()
      • processPendingActions() delivers cached actions via existing executeIntent mechanism
    • Add IntentFile.fromMap() extraction in DartGenerator for file parameters
    • Fix: Use Map.from() for IntentFile params from MethodChannel (avoid type cast errors)
    • Add IntentModeType enum and fileType field to codegen models
    • Update IntentAnalyzer to parse supportedModes and fileType annotations
    Open source →
  27. 0.3.0 27 Feb 2026
    Release notes
    • Add KotlinGenerator for Android AppFunctions code generation
      • @AppFunction(isDescribedByKdoc = true) annotated methods
      • @AppFunctionSerializable data classes for entities
      • AppFunctionsBridge singleton for MethodChannel communication
      • Enum class generation with fromValue() companion object
    • Add CLI command generate_kotlin for Kotlin file output
    • Extract shared analyzeSources() utility for Swift/Kotlin CLI commands
    • 154 tests (38 new Kotlin generator tests)
    • Update documentation for cross-platform support
    Open source →
  28. 0.2.1 27 Feb 2026
    Release notes
    • Documentation updates to reflect v0.2.0 features
    • No code changes
    Open source →
  29. 0.2.0 27 Feb 2026
    Release notes
    • BREAKING: Raise iOS minimum to 17.0
    • Add IntentResult & ProvidesDialog support via resultDialogTemplate
    • Add ParameterSummary generation via parameterSummary
    • Add AppEnum code generation (@EnumSpec, EnumAnalyzer, _generateEnumBody)
    • Add entity image support in DisplayRepresentation (SF Symbol icons)
    • Add {applicationName} to \(.applicationName) phrase conversion for AppShortcuts
    • Fix AppShortcutsProvider to use Swift result builder pattern (no array literals)
    • Fix error handling: throw AppIntentError.custom(...) instead of silent return .result()
    • Fix double-quote escaping in dialog templates
    • Fix shortcut intentIdentifier to className resolution in CLI
    • 116 tests covering all analyzers, generators, and builder
    Open source →
  30. 0.1.0 03 Jan 2026
    Release notes
    • Initial release
    • IntentAnalyzer and EntityAnalyzer for annotation parsing
    • ShortcutAnalyzer for @AppShortcut and @AppShortcutsProvider support
    • SwiftGenerator for iOS 17+ App Intent Swift code generation
    • DartGenerator for handler initialization code generation
    • CLI tool generate_swift for Swift code output
    • Integration with build_runner via AppIntentsBuilder
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive