2.24.0 (2026-10-13)
🚀 Features
- Network events now include the URL's
subdomain and domain.
🐛 Bug Fixes
- Network
host now keeps a non-default port (e.g. api.example.com:8443), matching the browser SDK.
🔒 Privacy
- If your
beforeSend callback redacts the network url or host, also clear subdomain and domain, which carry the hostname too.
2.23.2 (2026-10-12)
🐛 Bug Fixes
- Session replay now pauses while a session is sampled out and resumes when a later session is sampled in.
SessionReplay.isRecording() now reports whether recording is turned on, including while a sampled-out session pauses capture.
2.23.1 (2026-10-08)
🐛 Bug Fixes
- Sampled-out sessions now start the SDK and keep sending the
traceparent header, so their traces still correlate with your backend services; their own events are still dropped before sending.
- The sample rate now decides which instrumentations run, so a sampled-out session stops collecting events it would discard, and starts reporting in full if it later rotates into being sampled in.
- Session replay no longer records sampled-out sessions, whose recordings could not be opened from the session anyway.
2.23.0 (2026-10-06)
🚀 Features
- Added optional
accountId and accountName to UserContext.
2.22.1 (2026-10-05)
🐛 Bug Fixes
- Cold start is now reported when
CoralogixRum.initialize runs after the first screen is shown, as in React Native and Flutter apps.
- The first warm start after a late
CoralogixRum.initialize is no longer dropped.
- Cold starts longer than 60 seconds, and launches sent to the background before their first frame, no longer report a cold start.
- The first launch of an app process started in the background, for example by a push message, is now reported as a warm start.
- Cold and warm start times now end when the first frame finishes drawing rather than one frame later, so values are about one frame (8 to 16 ms) lower.
2.22.0 (2026-08-24)
🚀 Features
- Added
View.isCoralogixMasked() and View.isInsideCoralogixMaskedSubtree() so wrappers and hybrid plugins can read a view's mask state from the SDK instead of reimplementing the rule.
2.21.1 (2026-08-10)
🐛 Bug Fixes
- Fixed an ANR risk in apps with heavy touch activity: the SDK no longer performs logging work on the main thread for every touch event.
- Network requests reported through
CoralogixRum.reportNetworkRequest — including those from the React Native and Flutter integrations — no longer show a duration of 0; the duration is now consistently handled as milliseconds on every capture path.
- Failed network requests captured by the OkHttp interceptor now report the elapsed time until the failure instead of a duration of 0.
2.21.0 (2026-08-10)
🚀 Features
- Buffered events are now flushed automatically when the app enters the background, so telemetry from the end of a session is no longer lost when the process is killed while backgrounded. The export starts immediately on the background transition; a WorkManager job is enqueued alongside it as a backstop, in case the export does not finish before the system suspends the process.
- The flush is triggered once per process-level background transition, not on activity-to-activity navigation.
- The flush is independent of the configured instrumentations — disabling the
Lifecycle instrumentation does not disable it.
- Adds a dependency on
androidx.work:work-runtime-ktx. Apps that replace the default androidx.startup WorkManager initializer with on-demand initialization keep the immediate flush but skip the backstop job.
2.20.0 (2026-08-09)
🔒 Privacy
- Changed since 2.19.4: user interaction events for a masked element redact only its inner text, matching the Coralogix web SDK. The id, class, resolved element name, and touch coordinates are reported as-is again.
- Interaction events now carry
interaction_context.is_masked_element (always present), so a beforeSend callback can drop masked interactions or blank their coordinates — see the README for recipes.
- Interactions reported through the hybrid bridge (React Native, Flutter) now redact the inner text of masked elements too; previously they were reported in clear.
UserInteractionDetails accepts an optional isMasked so hybrid wrappers that track their own masking can report it directly.
- Tap markers are now suppressed over masked Flutter content, including older Flutter integrations where masked regions appear black.
2.19.4 (2026-08-04)
🔒 Privacy
- Masking now applies to everything inside a masked view or composable, not just the element it was applied to. Masking a container is enough to cover its contents. One exception: a View embedded via Compose's
AndroidView { } does not inherit its enclosing composable's masking — mask it directly with maskView().
- Tapping inside a masked area no longer draws a tap marker in session replays, so a recording of a masked keypad no longer reveals which keys were pressed.
- User interaction events for a masked element, or anything inside one, now report
*** for its text, id, class, and resolved element name. Previously the element's resource name identified it — for a keypad laid out as key_0…key_9 that alone revealed the entered sequence.
- Interaction events are still reported for masked elements and still carry their touch coordinates.
- All Coralogix artifacts must ship under the same version. A mismatched Compose module no longer takes the app down at launch: Compose tracking is disabled and the mismatch is logged.
🐛 Bug Fixes
- Send snapshot context when setUserContext is triggered
- Fixed a memory leak that kept a destroyed
Activity and its whole view tree in memory after a tap on a non-clickable area, or after a scroll or swipe, until the next tap elsewhere in the app.
2.19.3 (2026-08-02)
🐛 Bug Fixes
- Fixed a memory leak that retained every on-screen
Activity for the life of the process when the app also uses LeakCanary, Radiography, or another library that tracks window changes.
- Those libraries keep reporting correctly after the SDK initializes; previously the SDK stopped them from seeing new windows.
- User interaction tracking and session replay no longer go stale when another library starts tracking windows after the SDK has initialized.
2.19.2 (2026-07-30)
🐛 Bug Fixes
- Fixed events being dropped during a session change when per-session sampling is in use.
2.19.1 (2026-07-27)
📦 Version alignment
- No changes. Republished so the Compose module, whose 2.19.0 never reached Maven Central, ships in sync with the core.
2.19.0 (2026-07-27)
🚀 Features
- Added
isSessionSampledIn to EditableCxRum (and session_context on the wire) — beforeSend can now tell whether an event belongs to a sampled-in session or arrived only via excludeFromSampling, e.g. to keep just ANRs and crashes when the session sample rate is low.
reportError(throwable, ...) now accepts optional data and labels, so a handled error can carry structured data and per-event labels in a single call instead of a separate log().
🐛 Bug Fixes
- Call-site labels (from
reportError, log, custom spans, and time measurements) now take precedence over SDK-level labels set via setLabels when a key exists in both, matching the iOS SDK; previously the SDK-level value overwrote the call-site value.
2.18.0 (2026-07-20)
🚀 Features
- Added
CoralogixRum.flush(onComplete) — forces an immediate export of queued telemetry and invokes the callback once the export/upload attempt finishes (immediately when the SDK is not initialized), so a crash can be delivered before the process terminates.
🐛 Bug Fixes
- Crash events now ship immediately instead of waiting for the batch interval: reporting an
isCrash error force-flushes, and the uncaught-exception handler actively drains telemetry before handing off to the previous handler, so a crash is far less likely to die with the process.
- On the hybrid (React Native / Flutter) path, crash events upload directly instead of taking the
beforeSend round trip to the host layer and back, so a dying process is not racing the extra hop.
2.17.2 (2026-07-09)
🐛 Bug Fixes
- Raised the network timeout for RUM data and Session Replay frames from 10s to 45s, so sends on slow connections no longer time out and drop telemetry.
2.17.1 (2026-07-05)
🐛 Bug Fixes
- Fixed
view_number being dropped for the rest of a session after a session rotation while staying on the same screen. The current view is now re-stamped as view 0 on rotation, matching iOS.
2.17.0 (2026-07-05)
🚀 Features
- Added
createNewSession() to start a fresh session on demand (e.g. on logout) without re-initializing the SDK.
2.16.3 (2026-06-29)
🐛 Bug Fixes
- Fixed Flutter Session Replay tap frames rendering as a black screen on slower devices. Native now waits for the masked bitmap instead of discarding it after one vsync.
2.16.2 (2026-06-24)
🐛 Bug Fixes
- Fixed
beforeSend edits (e.g. redacting a URL) on React Native applying to the RUM event but not the matching OpenTelemetry span attributes; both now reflect the edit.
2.16.1 (2026-06-15)
🐛 Bug Fixes
- Fixed crashes caused by reading the view hierarchy off the main thread.
Display.getViewHierarchy() is now marshalled onto the main thread and returns null on failure/timeout instead of emitting an empty hierarchy.
2.16.0 (2026-06-09)
🚀 Features
- Added
view_number and isNavigationEvent to every RUM event under cx_rum for product analytics. Mirrors iOS/Browser.
2.15.1
📦 Version alignment
- The SDK, Compose module, and Gradle Plugin now all ship under the same version number.
2.15.0 (2026-06-08)
🚀 Features
- The SDK now emits a
session_replay_init internal event with the resolved session-replay configuration when SessionReplay.initialize() succeeds.
2.14.1 (2026-06-07)
🐛 Bug Fixes
beforeSend edits now apply to both the RUM payload (text.cx_rum.*) and the OTLP attribute mirror; previously redactions landed on the RUM payload only.
beforeSend can no longer forge spanId, traceId, parentSpanId, or isSnapshotEvent — these are restored from the original. Mirrors iOS.
- Parity fixes between the init-time and
beforeSend attribute paths for labels and session_creation_date.
2.14.0 (2026-06-07)
🐛 Bug Fixes
- Fixed session-replay mask skew (masks drifting behind text during scroll) for classic Views.
- Fixed misaligned Flutter session-replay masks via the new
flutterViewBitmapProvider path.
containsCompose() view-hierarchy walk now runs on the main thread.
frameCapturer.cleanup() is now called from SessionReplayInternal.shutdown(), so draw listeners stop firing after shutdown.
- Bitmap is now recycled if
copyPixelsFromBuffer throws.
NetworkConnectivityMonitor no longer crashes with ConcurrentModificationException when listeners change during a callback.
🚀 Features
SessionReplayOptions.flutterViewBitmapProvider: optional suspend callback for Flutter hosts to composite a pre-masked bitmap into each frame.
2.13.0 (2026-06-03)
🚀 Features
- Added optional
customAttributes parameter to CoralogixErrorDecorator, emitted under errorContext.data. Defaults to null, so existing calls are unaffected. Matches iOS.
2.12.2 (2026-06-02)
🐛 Bug Fixes
- Fixed RUM sessions appearing as 20–24h long.
SessionManager.getSessionId() now refreshes an expired session before returning, so spans can't be stamped with a stale session ID.
2.12.1 (2026-05-24)
🐛 Bug Fixes
- Fixed
IllegalArgumentException: invalid pointerIndex -1 crash in TouchEventDispatcher by filtering multi-touch actions before forwarding to GestureDetector.
- Added
cx_rum.session_context.session_creation_date and hasRecording to instrumentation_data.otelSpan.attributes, matching iOS.
2.12.0 (2026-05-07)
🚀 Features
- Added Custom Time Measurement API:
CoralogixRum.startTimeMeasure(name, labels) / endTimeMeasure(name) emit a Measurement event with the elapsed duration.
- Added
excludeFromSampling to CoralogixOptions to export selected instrumentation categories at 100% even when the session is sampled out.
- Session-sampling decision moved into
SessionManager, re-rolled on every session rotation (matches web).
- Added public enum
ExcludableInstrumentation.
2.11.2 (2026-05-05)
🐛 Bug Fixes
- Fixed Flutter session replay capturing black frames. A new
FlutterSurfaceViewPatchingStrategy patches FlutterSurfaceView content into the frame via per-surface PixelCopy.
2.11.1 (2026-04-26)
🐛 Bug Fixes
getCustomTracer(ignoredInstruments) now takes a Set instead of List.
CoralogixGlobalSpan.runInSpanContext renamed to withContext.
CoralogixCustomSpan.addEvent now accepts an optional timestamp and TimeUnit.
startGlobalSpan returns null when a global span is already active, preventing orphaned spans.
- Custom spans are now exported through the RUM log pipeline with correct
parentSpanId linking.
🚀 Features
- Added a
toJson() convenience method to CoralogixTraceExporterData.
2.11.0 (2026-04-16)
🚀 Features
- Added Custom Spans API:
getCustomTracer(), startGlobalSpan(name), and CoralogixGlobalSpan.startCustomSpan(name). Spans appear in the RUM trace view, correlate with the session, and propagate traceparent to outgoing requests.
- Added
tracesExporter option in CoralogixOptions to receive the raw OTLP span payload alongside the RUM export.
2.10.2 (2026-04-15)
🐛 Bug Fixes
- Fixed
ConcurrentModificationException crash in ActivityLifecycleMonitor.reportLifecycleEvent; monitorListeners is now a CopyOnWriteArrayList.
2.10.1 (2026-04-15)
🐛 Bug Fixes
- Fixed
android-sdk-compose failing to publish to Maven Central — the generated POM was missing the <version> for the com.coralogix:android-sdk dependency.
2.10.0 (2026-04-14)
🚀 Features
- Added Jetpack Compose support via the new
android-sdk-compose artifact.
- Session replay now works for Compose apps on API 26+, fixing previously blank frames.
- Added
CoralogixDomain.US3 for the US3 region.
🐛 Bug Fixes
maskAllTexts, textsToMask, and Modifier.coralogixMasked() now mask Compose text elements.
maskAllImages now masks Compose image composables.
maskInputFieldsOfTypes[PASSWORD] now masks Compose password fields.
2.9.5 (2026-04-05)
🐛 Bug Fixes
- Fixed
ClassCastException crash when using @shopify/react-native-skia. Generated view IDs are now stored in a view tag instead of overwriting View.NO_ID.
2.9.4 (2026-03-23)
🚀 Features
- Added
CoralogixDartObfuscatedStackFrame for obfuscated Dart stack traces from Flutter apps built with --obfuscate.
- Added optional
arch, build_id, and stack_trace_type fields to ErrorContext for Flutter symbolication metadata.
- Added span attribute constants so the new fields survive the OpenTelemetry pipeline and
beforeSend.
2.9.3 (2026-03-17)
🐛 Bug Fixes
- Fixed error count discrepancy between the RUM grid and session drilldown when
beforeSend changes severity from Error or drops the event.
- Fixed hybrid platforms (Flutter/React Native) without a
beforeSendCallback dropping all spans; events are now exported when no callback is set.
- Removed
snapshotContext from EditableCxRum — it is SDK-internal and not user-editable.
2.9.2 (2026-03-15)
🐛 Bug Fixes
- Fixed
request_payload and response_payload schema — both are now serialized as plain strings for cross-platform compatibility.
2.9.1 (2026-03-11)
🐛 Bug Fixes
- Fixed
resolveNetworkCaptureRule using Regex.matches() instead of containsMatchIn(), so patterns like example\.com now match full URLs.
2.9.0 (2026-03-09)
🚀 Features
- Added
networkCaptureConfig option to CoralogixOptions for capturing request/response headers and payloads on matching requests.
- Introduced
NetworkCaptureRule supporting exact URL or regex matching, with per-rule header/payload control.
- Network spans now include
request_headers, response_headers, request_payload, and response_payload when capture rules are configured.
🛠️ Improvements
- Fixed URL path encoding in network requests (
@Path with encoded = true).
- Fixed payload serialization: payloads are surfaced as JSON elements; non-JSON text payloads are preserved as primitives.
2.8.1 (2026-03-08)
🛠️ Improvements
- Native user interaction monitoring is now automatically disabled on hybrid platforms (React Native, Flutter), which should use
reportUserInteraction instead.
2.8.0 (2026-03-02)
🚀 Features
- Added scroll gesture detection (up, down, left, right) on scrollable views.
- Added swipe/fling gesture detection (up, down, left, right) on any view.
- Added
reportUserInteraction public API for hybrid platforms to manually report interactions.
🛠️ Improvements
- Fixed
inner_text not being collected for Button views.
- Network span attributes now conform to the cross-platform
cx_rum.* schema.
2.7.2 (2026-02-10)
🛠️ Improvements
- Fixed severity synchronizing for non native frameworks
- Fixed serialization issues
2.7.0 (2026-02-08)
🛠️ Improvements
- Added support for flutter SessionReplay
- Added configurable Trace-Parent header injection for distributed tracing
2.6.4 (2026-01-29)
🛠️ Improvements
- Fixed some issues reported by Android's
StrictMode API
- Fixed events sent with wrong session details (session refreshed before the event was sent)
- Fixed cold and warm start time calculations
severity changes in beforeSend are now reflected on the resulting log
2.6.3 (2025-12-09)
🛠️ Improvements
- Log Context converts the data into a string and not as json object
2.6.2 (2025-12-07)
🛠️ Improvements
- Network Context duration in millisecond
2.6.1 (2025-11-20)
🛠️ Improvements
- Clear
MobileVitalsInstrumentation measurement windows on navigation events
- Improved threading support in the detector implementations
- Idle mobile vitals event now triggers every 15 seconds per business rules
- Fixed incorrect enabled/disabled detector validation when starting
MobileVitalsInstrumentation
2.6.0 (2025-11-18)
🛠️ Improvements
labels map now supports any value type (Map<String, Any?>)
log data and labels are now Map<String, Any?> and sent as JSON objects instead of escaped strings
📚 Documentation
- Reflected these changes and the latest SDK version in the README
2.5.7 (2025-11-03)
🚀 Features
- Session Replay masking now supports custom text patterns and regex via
textsToMask
- Session Replay adds a
maskAllImages option to mask all image views
🛠️ Improvements
- Enhanced precision in mobile vitals metrics with rounded measurements
📚 Documentation
- Updated the
SessionReplay section and code examples with the new masking options
- Updated the current SDK patch version in
Installation to 2.5.7