Skip to content

feat!: replace Flutter bridge with Dart OpenFeature provider - #79

Draft
nicklasl wants to merge 22 commits into
mainfrom
nicklasl/dart-client-provider
Draft

nicklasl wants to merge 22 commits into
mainfrom
nicklasl/dart-client-provider

Conversation

@nicklasl

@nicklasl nicklasl commented Sep 16, 2026

Copy link
Copy Markdown
Member

Replace the native Flutter bridge with confidence_openfeature_provider at the repository root. The provider resolves flags in Dart, supports synchronous typed OpenFeature reads and context reconciliation, and reports exposures only after successful reads.

Migrate native visitor identity, cached flags and queued telemetry with durable import checkpoints. An atomic JSON outbox provides batching, retries and public flush; its 4 MiB budget drops the oldest unsent records. The documented trade-offs include asynchronous persistence and possible duplicate delivery after a crash. A small Foundation helper preserves legacy Swift calendar values without a native Confidence SDK dependency.

Update the public-API example, credential-free CI, migration guide and release configuration. Publishing remains disabled with publish_to: none.

Validation:

  • 157 offline tests, static analysis and formatting pass.
  • Live resolution, exposure delivery and tutorial-event acceptance pass for both Flutter SDK IDs.
  • Retained-sandbox upgrades pass on Android API 36 and iOS 26.3, including offline import, replay after restart and no repeat replay. These use native fixtures and simulated HTTP.
  • Android and iOS integration tests and Android, iOS SPM and CocoaPods builds pass.
  • Publication dry run passes with five documented warnings for deliberate dependency pins. No package has been published; broader OS coverage and publisher ownership remain first-release checks.

Generated with Codex.

nicklasl and others added 2 commits September 15, 2026 19:08
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Comment on lines +17 to +27
static Uri _flagEndpoint(
ConfidenceConfiguration configuration,
String operation,
) {
final base =
configuration.resolveBaseUrl ??
Uri.https(_host('resolver', configuration.region));
// Preserve proxy path prefixes and append the API path exactly once here.
final prefix = base.path.replaceFirst(RegExp(r'/+$'), '');
return base.replace(path: '$prefix/v1/flags:$operation');
}

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is overkill. we don't need the _flagEndpoint function. just do what publish does.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do we need this at all?

nicklasl and others added 20 commits September 16, 2026 15:49
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
@nicklasl nicklasl changed the title feat: scaffold Dart OpenFeature provider package feat!: replace Flutter bridge with Dart OpenFeature provider Sep 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant