Skip to content

feat: rebrand to FlashCat for v1 (iOS + Android)#1

Open
Fiona2016 wants to merge 6 commits into
mainfrom
feat/flashcat-v1
Open

feat: rebrand to FlashCat for v1 (iOS + Android)#1
Fiona2016 wants to merge 6 commits into
mainfrom
feat/flashcat-v1

Conversation

@Fiona2016

@Fiona2016 Fiona2016 commented Jul 1, 2026

Copy link
Copy Markdown
Collaborator

Summary

Rebrands this fork (DataDog/dd-sdk-flutter) to the FlashCat platform for a v1 release, keeping the change minimal (in the spirit of the iOS/Android forks). Scope: iOS + Android, supporting RUM, Crash Reporting, and WebView tracking (native path). The Flutter Web target is dropped for v1.

Baseline: v3.0.1 (deliberate)

Based on tag datadog_flutter_plugin/v3.0.1, not develop (upstream v3.4.0). develop calls native APIs (Datadog.flush(), iOS 3.8+/Android 3.8+) that the FlashCat native forks (iOS 3.6 / Android 3.5) don't expose, so it would not compile against our SDKs. v3.0.1's native requirements are a subset of what the forks provide. This is why main for this fork tracks the v3.0.1 baseline.

What changed (and what deliberately did NOT)

Published package name onlydatadog_flutter_pluginflashcat_flutter_plugin, datadog_webview_trackingflashcat_webview_tracking, version 0.1.0.

Note on the Flutter platform: unlike iOS (pod name vs module_name) and Android (maven group vs package), a Dart package's name = import path = pub.dev id — they cannot be separated. Publishing publicly (as the iOS/Android SDKs do to CocoaPods trunk / Maven Central) requires a unique name, and datadog_flutter_plugin is owned by Datadog on pub.dev. So the name must change, and the package: imports change with it. That import churn (~one line per file) is the unavoidable minimum for a public package rename.

Kept datadog internally (minimal):

  • Package directories stay packages/datadog_flutter_plugin/ etc. (directory name doesn't affect consumers — pub caches by package name).
  • Kotlin package com.datadoghq.flutter, Swift/internal type and file names, the C bridge module, and method-channel names all stay datadog*.

Native dependencies point at the FlashCat forks: iOS pods Flashcat* ~> 0.5 / SPM fc-sdk-ios 0.5.0; Android cloud.flashcat:*:0.4.1.

Site model DatadogSiteFlashcatSite { cn, staging } (default cnbrowser.flashcat.cloud). This is functional, not cosmetic — the native forks removed DatadogSite and the endpoints differ; the Dart enum must bridge to the native FlashcatSite.

Logs = no-op for v1 (FlashCat ingest doesn't accept Logs yet): the iOS podspec links FlashcatLogs-NoOp; the API compiles but sends nothing. No feature/public-API removal.

iOS integration files are renamed to the plugin name (podspec + Swift package dir/name/product/target) — Flutter resolves iOS plugins by name, so this is required, not branding. (This accounts for the 15 renames in the diff.)

Fixes found during on-device verification

  • Android init crash (fixed here): cloud.flashcat:dd-sdk-android-core:0.4.1's Gradle module metadata misfiles okhttp under the test-fixtures variant → ClassNotFoundException: okhttp3.Authenticator at init. Worked around by declaring okhttp:4.9.0 in the plugin. Proper fix is upstream in fc-sdk-android (publish okhttp as an api dep of the core runtime variant), after which the workaround can be removed.

Verification

flutter pub publish --dry-run0 warnings on both packages. End-to-end against the staging intake: Android (emulator) RUM batch sent successfully; iOS (simulator, pure SPM) RUM batch HTTP 202 accepted.

Follow-ups (not blocking)

  1. fc-sdk-android: fix okhttp module-metadata scope, then drop the plugin-side workaround.
  2. fc-sdk-ios: FlashcatLogs / FlashcatLogs-NoOp missing from CocoaPods trunk (needed for the CocoaPods integration path).
  3. Cosmetic: iOS podspec metadata (homepage/author) still say Datadog.
  4. Publishing to pub.dev is gated on publisher access for the flashcat_* names.

🤖 Generated with Claude Code

Fiona2016 and others added 4 commits June 30, 2026 20:52
Fork datadog_flutter_plugin / datadog_webview_tracking to the FlashCat
platform. v1 scope = iOS + Android; RUM / Logs / Crash + WebView tracking
via the native path. Flutter-Web platform target dropped.

Native coordinates now point at the FlashCat forks:
- iOS pods  Datadog* ~> 3   -> Flashcat* ~> 0.5 (DictionaryCoder kept)
- iOS SPM   dd-sdk-ios 3.4  -> fc-sdk-ios 0.5.0 (git url + tag)
- Android   com.datadoghq:*:3+ -> cloud.flashcat:*:0.4.1

Site model fully renamed DatadogSite -> FlashcatSite{cn,staging}
(default cn -> browser.flashcat.cloud), mirroring the native forks which
removed DatadogSite entirely. Dart enum + both native bridges + web_helpers
+ tests updated.

Android jnigen bridge regenerated against the fork: descriptors now
reference com/datadog/android/FlashcatSite; stale bindings pruned.

Compile-verified GREEN on both platforms (Runner.app + app-debug.apk).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Publish-facing rebrand of the two v1 packages:
- datadog_flutter_plugin  -> flashcat_flutter_plugin
- datadog_webview_tracking -> flashcat_webview_tracking

Renames the pub package name (and the lib entry file), rewrites all
package:/relative imports across lib, test and example, updates the
webview -> plugin dependency, melos scopes, README code snippets, and
pubspec metadata (description, repository/homepage). Version reset to
0.1.0 for the first FlashCat release; CHANGELOG entries added.

Internal Datadog/Kotlin/Swift namespaces are intentionally preserved
(fork convention). The 8 out-of-scope packages are untouched.

Logs: iOS podspec now links FlashcatLogs-NoOp (matches the SPM
Package.swift). FlashCat ingest does not accept Logs yet, so the Logs
API compiles but sends nothing; no FlashcatLogs pod needs publishing.

Both packages analyze clean; `flutter pub publish --dry-run` passes
(no structural errors).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The FlashCat fork's Gradle module metadata for cloud.flashcat:
dd-sdk-android-core:0.4.1 misfiles com.squareup.okhttp3:okhttp under the
test-fixtures variant instead of the main runtime variant, so it is not
pulled transitively. Without it the app crashes on Datadog.initialize with
`java.lang.ClassNotFoundException: okhttp3.Authenticator`
(Configuration.kt:321). Caught by an on-device end-to-end run.

Declare okhttp 4.9.0 (the version the fork's POM references) explicitly in
the plugin. Proper fix is upstream: fc-sdk-android should publish okhttp as
an api dependency of the core runtime variant; this can be removed then.

Verified: after this change the Android example initializes and a RUM batch
uploads successfully to the FlashCat staging intake.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Flutter resolves iOS plugins by name, so the podspec and Swift package must
match the plugin name (flashcat_flutter_plugin / flashcat_webview_tracking).
Left as datadog_*, `pod install` / SPM failed for consumers. Rename the
podspec file + s.name, the SPM package dir + Package name + product + target
+ Sources dir, for both packages. The internal C bridge module
(datadog_flutter_plugin_c) is kept (imported via #if canImport, not
Flutter-facing).

Package DIRECTORIES are intentionally kept as datadog_* — the directory name
does not affect consumers (pub caches by package name) and keeping it minimal
avoids a large no-op rename. Only the published package name changes.

Verified on device (staging intake): Android RUM batch sent successfully;
iOS RUM batch accepted (HTTP 202) via pure SPM in a fresh consumer app.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Fiona2016 and others added 2 commits July 1, 2026 00:29
Mirror the fc-sdk-ios README pattern: an 'About' section noting the fork
from DataDog/dd-sdk-flutter and a 'Key Differences' list (endpoint, site,
package name vs preserved datadog namespaces, native deps, v1 scope,
not-yet-available features).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The monorepo root README is the GitHub landing page; it was still pure
Datadog. Add the fork note (parity with fc-sdk-ios, whose attribution is
visible because it is a single-package repo) and clarify the two packages
FlashCat v1 actually publishes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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