Update EventMergeRequest webhook to handle non-string merge param values by @klew00 in #1317This change it potentially breaking existing code reading the value (type change)
Support Navigation 3 integration for multi-Activity and multi-Fragment applications, where each Activity or Fragment has its own SentryNavEffect (#6305)
Session Replay: Fix a native crash (SIGABRT on the RenderThread) when stopping a replay that uses the canvas screenshot strategy (#6342)
Session Replay: Keep the segment videos of a replay that stopped before the startup cleanup of previous replays ran (#6343)
Report the number of dropped spans in client reports when a batched span envelope item is discarded, instead of a quantity of 1 (e.g. for Flutter span streaming) (#6265)
Session Replay: Keep the flushed video and do not reuse its segment id when stop() is called right after flush() in buffer mode (#6340)
Keep sending events from Android 7.1.0 and older devices after Sentry changes its TLS certificate authority (#6227)
In February 2027, Sentry moves its TLS certificates from DigiCert to Let's Encrypt and Google Trust Services (announcement).
Android 7.1.0 (API 25) and older don't trust the Let's Encrypt root certificate (ISRG Root X1), so without this fix, the SDK on those devices can no longer send events to Sentry after the switch.
The SDK now bundles ISRG Root X1 and trusts it in addition to the device's root certificates on API 25 and lower. This only applies to the SDK's own uploads to Sentry SaaS (DSNs on sentry.io), not to self-hosted Sentry, not to any other connection your app makes, and not if you set your own SentryOptions.setSslSocketFactory.
Apps need to update to an SDK version with this fix to keep sending events from these devices.
Session Replay: Use a software canvas for video encoding on the Android Emulator to avoid a native crash in eglDestroySurface (#6282)
Internal
Measure the hostname cache TTL on the monotonic ticker the options provide, so that a device time change no longer shortens or extends it (#6100)
Measure Session Replay's 1h recording cap and its touch-move debounce on a monotonic clock, so a device time change no longer stops a healthy recording early, keeps a finished one alive, or suppresses gesture events (#6090)
Add ScreenshotUtils.takeMaskedScreenshot so Hybrid SDKs can capture screenshots masked according to SentryAndroidOptions.getScreenshot() (#6281)
Drop telemetry when a beforeSend* callback throws and report it using DiscardReason.CALLBACK_ERROR.
Drop transactions when tracesSampler throws instead of inheriting the parent sampling decision or falling back to tracesSampleRate (#6163).
Drop spans when beforeSpan throws without disrupting requests, covering OkHttp, OpenFeign, GraphQL, Ktor, and Apollo—including Apollo 5 (#6167, #6238).
Drop telemetry and record callback_error when a customer event processor throws instead of continuing with a potentially partially processed item. SDK-owned processor failures are logged and processing continues.
Drop breadcrumbs when beforeBreadcrumb throws instead of storing exception details on the breadcrumb.
No longer fail Spring requests when a TransactionNameProvider throws, falling back to <unlabeled transaction> (#6241).
No longer fail Spring requests when a SentryUserProvider throws and overwrite the user with an empty user object (#6240).
Disable profiling when profilesSampler throws instead of falling back to profilesSampleRate or inheriting the parent profiling decision (#6164).
Report attached profiles dropped by transaction callback errors as callback_error in client reports and OnDiscardCallback (#6166).
Skip replay capture when beforeErrorSampling throws while retaining the error event (#6165).
Skip Android screenshots or view hierarchies when their capture callbacks throw while retaining the error event (#6167).
Keep the Android feedback form available when its options configurator throws (#6239).
Isolate nonfatal callback throwables while continuing to propagate fatal JVM errors (#6251).
Internal
Hold the hostname cache on SentryOptions instead of a static singleton (#6117)
Capture direct Sentry.logger() and Sentry.metrics() calls regardless of options.getLogs().isEnabled() and options.getMetrics().isEnabled() (#6184)
Automatic logging integrations still only capture logs when options.getLogs().isEnabled() is true. options.getMetrics().setEnabled(...) currently has no effect because there are no automatic Metrics integrations. Both enable options will be removed in the upcoming major release, and each logging integration will then have a separate opt-in flag.
Use options.getLogs().setBeforeSend(...) and options.getMetrics().setBeforeSend(...) to filter manually emitted telemetry. Return null from either callback to drop it.
Fixes
Keep the videos of already captured session replay segments when the replay stops, so segments that are still queued are no longer sent without their video (#6177)
Features
Deprecate sendDefaultPii in favor of dataCollection ahead of its removal in 9.0 (#6158)
Make the tombstone merge time threshold configurable via SentryAndroidOptions.setTombstoneMergeTimeThresholdMillis and the io.sentry.tombstone.merge-time-threshold-millis manifest option (#6154)
Add sentry-apollo-5 integration for Apollo Kotlin 5, providing HTTP tracing and failed GraphQL request reporting (#6074)
Add OkHttp autoconfiguration for Spring Boot (#5797)
Fixes
Prevent infinite loops when capturing exceptions with cyclic cause chains (#6073)
Improvements
Recover Android 17 MemoryLimiter app exits recorded as ApplicationExitInfo.REASON_MEMORY_LIMITER (#6174)
Add LocalSentrySpan to sentry-compose so apps can provide a parent ISpan to a composable subtree and have nested SentryTraced spans attach to it ([#6112]#6112)
Add dataCollection, a fine-grained replacement for sendDefaultPii, for controlling data collected automatically by SDK integrations. See the Data Collection documentation for Android, Java, and Spring Boot (#5759)
[!WARNING] sendDefaultPii will be removed in the next major SDK version. Migrate to dataCollection before upgrading.
Fixes
Disable URL caching when reading META-INF/MANIFEST.MF files during version detection so that the SDK no longer keeps jar file handles open for the life of the process (#6124
Keep the EventListener wrapped by SentryOkHttpEventListener per Call (#6003)
Measure HTTP rate-limit backoff on a monotonic clock instead of the wall clock, so that a device time change no longer lifts or extends an active rate limit (#6030)
Features
Add Android SDK support for reporting MemoryLimiter app exits recovered from ApplicationExitInfo (#6111).
Sentry can now configure Log4j2 automatically for Spring Boot 4 when sentry-log4j2 is on the classpath and Log4j2 Core is the active logging backend (#5403)
Enable automatic appender registration with:
sentry.logging.enabled=true
Automatic registration is disabled by default for now and will be enabled by default in the next major release.
The appender is attached to the root logger by default. To attach it to specific loggers instead, configure one or more non-overlapping logger names:
Configure the minimum level for creating breadcrumbs. The default is INFO:
sentry.logging.minimum-breadcrumb-level=INFO
Configure the minimum level for creating Sentry error events. The default is ERROR:
sentry.logging.minimum-event-level=ERROR
Configure the minimum level for sending Sentry structured logs. The default is INFO:
sentry.logging.minimum-level=INFO
Structured logs must also be enabled:
sentry.logs.enabled=true
Sentry can now configure Log4j2 automatically for Spring Boot 3 when sentry-log4j2 is on the classpath and Log4j2 Core is the active logging backend (#6072)
Disabled by default for now; enable it and configure levels the same way as described in the Spring Boot 4 entry above (sentry.logging.enabled=true)
Fixes
Support ws and wss URL parsing for WebSocket instrumentation (#6064)
Keep resolving the server name after Sentry.close() or a re-init. Closing the SDK shut down the shared hostname cache for the life of the process, so server_name silently froze at the value it had last resolved (#6119)
Order breadcrumbs by the timestamp they carry rather than by when they were created in the current process, so breadcrumbs restored from disk or handed over by a hybrid SDK no longer sort as if they had just happened (#6097)
Internal
Deprecate RateLimiter(ICurrentDateProvider, SentryOptions) in favor of RateLimiter(SentryOptions), whose backoff is measured on a monotonic ticker (#6030)
Deprecate AndroidCurrentDateProvider.getInstance() in favor of MonotonicTicker, which counts time spent in deep sleep and cannot be confused with the epoch-based CurrentDateProvider (#6103)
Update SentryTraced so that it now honors options.setIgnoredSpanOrigins (#6058)
SentryTraced now checks for its owning transaction dynamically rather than once per app process. The latter caused SentryTraced spans to be dropped process-wide once the original transaction finished (#6057)
Fix typos in Spring GraphQL integration names (GrahQL to GraphQL) (#6061)
Populate the Android connection status cache during the first two minutes after boot, instead of treating the empty cache as up to date (#6029)
Prevent SentryTraced from producing dangling spans if recomposition is abandoned or drawing fails (#6049)
Report a consistent app start type across the app start measurement, contexts.app and the app.start span attributes (#6006)
Improvements
Emit a single ui.compose span per SentryTraced on initial composition instead of one on every recomposition, and set the origin on ui.render spans (#6051)
Internal
Add an internal MonotonicTicker abstraction with Deadline and Stopwatch primitives (#6028)
Add internal Timestamp, EpochClock and AnchoredClock, so related instants project from one wall-clock reading instead of each reading the clock (#6045)
Keep dropped tombstone and ANR events dropped, instead of reporting the same app exit again at every app start (#6002)
Clear the persisted replay id on SDK init, so a replay id from a previous process is no longer attached to ANR events from the current one (#6033)
Apply Sentry.withScope and Sentry.withIsolationScope data to events captured inside the callback when globalHubMode is enabled (#6004)
globalHubMode is enabled by default on Android, where tags, extras, contexts and level set inside the callback were silently dropped
Scopes that are explicitly made current, e.g. via Sentry.setCurrentScopes or the SentryContext coroutine integration, are now also honoured when globalHubMode is enabled
Sentry.pushScope, Sentry.pushIsolationScope and Sentry.popScope remain no-ops when globalHubMode is enabled
Drop the profiler_id from transactions and spans when no Perfetto profile covers them, e.g. when Android's ProfilingManager rate limits the profiling request (#6015)
Prevent events from being dropped when feature flags are added while an event is being captured (#5989)
Internal
Add InternalSentrySdk.captureEnvelopeNonTerminating for hybrid SDKs (e.g. Flutter) so unhandled exceptions that don't terminate the process no longer end the session as crashed (#5921)
Add InternalSentrySdk.updateSessionForDroppedEventNonTerminating so hybrid SDKs can still update the session when an error is dropped by sampling (#5990)
Set app.vitals.start.screen and app.vitals.start.type on standalone app.start children (#6005)
Add screenshot attachment button to the Android user feedback widget (#5828)
Users can now attach a screenshot when submitting feedback. Enabled by default; can be disabled via SentryFeedbackOptions.setEnableAttachScreenshot(false) or the io.sentry.feedback.enable-attach-screenshot manifest flag.
Requires the androidx.activity>=1.8.2 dependency
Add manual Session Replay controls through Sentry.replay() (#5978)
Explicit start() and startBuffering() calls bypass the configured replay sample rates; sampling still controls automatic startup.
start() starts a full-session replay and does nothing if one is already recording.
startBuffering() keeps a rolling buffer that is sent on flush() or an error, then continues in session mode.
stop() ends the current replay; the next start() creates a new replay session.
pause() suspends recording until resume() and remains paused across background and foreground transitions and automatic replay restarts in the same process.
resume() continues the same manually paused replay.
flush() sends the current replay data, or starts a full-session replay when recording is stopped.
Fixes
Prevents inclusion of null. prefix before default-package class names when parsing Java and JNI frames from Android ANR thread dumps (#5979)
Prevent duplicated breadcrumbs on tombstone-merged native crash events (#5888)
Prevent a class of Session Replay deadlocks by confining lifecycle state changes to Android's main thread (#5965)
Symbolicate tombstone native frames for libraries loaded directly from APKs (#5992)
Prevent a deadlock between the app start extension and the Android performance event processor (#6007)
Performance
Defer starting Session Replay off the SDK initialization critical path (#5965)
Use manifest metadata resolved at build time to reduce Android SDK initialization overhead (#5976)
Dependencies
Bump Native SDK from v0.16.2 to v0.16.4 (#5962, #5996)
Allow child spans to use explicit start timestamps through ISpan (#5929)
Make ISpan.startChild overloads with SpanOptions public (#5927)
Add Sentry.feedback().enableOnShake(), Sentry.feedback().disableOnShake(), and Sentry.feedback().isOnShakeEnabled() to toggle and query shake-to-report at runtime (#5827)
Improvements
Remove ApiStatus.Experimental annotation from SentrySQLiteDriver (#5938)
Fixes
Clear contexts when calling Scope.clear() (#5902)
Preserve custom Throwable identities when R8 optimizes Android apps (#5881)
Report the correct cpu usage for the first performance sample of a transaction, which was measured against the time since device boot (#5926)
Prevent an ANR when the Session Replay video encoder gets stuck (#5842)
Some hardware encoders never signal end-of-stream, which made the replay worker spin forever while holding the encoder lock. The app's lifecycle callbacks then blocked on that lock and the app froze until the system killed it. The encoder now gives up instead of spinning, and closing the replay cache no longer waits indefinitely for a wedged encoder.
Performance
Read the clock once per performance collection round instead of once per in-flight transaction (#5934)
Reduce allocations while collecting cpu usage during transactions by reading the process cpu time via Process.getElapsedCpuTime() instead of parsing /proc/self/stat (33.6kB to 16 bytes per sample on a Pixel 3) (#5926)
Store performance measurements as primitives, removing a boxed allocation per measurement per performance sample (#5935)
Prevent inflated cold app start when the OS spawns the process in the background (e.g. FCM push) on API 35+ (#5841, #5880)
Preserve single-sample ANR profile chunks so profiles remain available on ANR events (#5872)
Avoid a CPU busy-loop when recording discarded log or metric envelopes under rate limiting (#5835)
ClientReportRecorder now reads the item count from the envelope item header instead of deserializing the payload, which under sustained rate limiting could pin CPU cores while repeatedly throwing exceptions
Report tasks handed to a no-op ISentryExecutorService as cancelled (#5874)
NoOpSentryExecutorService previously returned a Future that was never run and never cancelled, so callers could not tell a dropped task from a queued one and get() would block until its timeout
Performance
Defer use of reflection by SentryFrameMetricsCollector during Sentry.init (#5886)
Avoid waiting up to shutdownTimeoutMillis when closing the SDK with a pending transaction timeout or session-end task (#5851)
Use RGB_565 instead of ARGB_8888 for screenshot and replay capture bitmaps, halving per-frame memory usage (#5821)
Remove an unused lock from SentryPerformanceProvider, which was allocated on every cold start in ContentProvider.onCreate without ever being acquired (#5871)
Reduce main-thread allocations when parsing the app start profiling config (#5867)
Batch and coalesce scope-persistence disk writes to reduce startup cost (#5791)
Scope mutations are now coalesced (latest value per field) and breadcrumbs are appended in batches behind a single fsync, instead of one synchronous disk write per mutation.
Reduce the number of SDK threads: the HostnameCache worker thread now times out while idle instead of staying alive for the whole process lifetime (#5817)
Use Android's ProfilingManager (Perfetto) for continuous profiling on API 35+ devices (#5251)
On API 35+ devices, continuous profiling now automatically uses Android's system ProfilingManager with Perfetto-based stack sampling, providing lower-overhead and more accurate profiles. No configuration change is required.
Devices below API 35 keep using the legacy Debug-based profiler.
Added an enableLegacyProfiling option (default true) to disable the legacy Debug-based profiler. Setting it to false disables continuous profiling on API < 35 devices as well as transaction-based profiling (profilesSampleRate/profilesSampler) on all devices, since transaction-based profiling is not supported by Perfetto.
It can also be configured via the io.sentry.profiling.enable-legacy-profiling manifest flag.
The outbox and cache directories are no longer created by Sentry.init (#5792)
They are now created lazily by whichever component first writes into them, off the init thread. As a result, the directories at SentryOptions.getOutboxPath() and SentryOptions.getCacheDirPath() are not guaranteed to exist once Sentry.init returns.
If you write envelopes into the outbox path yourself instead of going through the SDK — as hybrid SDKs do for captureEnvelope — create the directory first, e.g. new File(outboxPath).mkdirs().
Improvements
Skip building Android manifest metadata debug log messages when debug logging is disabled, reducing allocations during SDK init (#5790)
Fixes
Use the original app build's ProGuard UUID for ANR profile chunks (#5852)
Fix potential ANR/deadlock in Session Replay when checkCanRecord runs on the replay executor thread (#5837)
Prevent concurrent PixelCopy access during Session Replay masking and bitmap cleanup (#5808)
Release MediaMuxer when the replay video encoder fails to start to avoid a resource leak (#5607)
Set the correct platform (android instead of java) on ANR profile chunks so they are billed as UI Profile Hours rather than Continuous Profile Hours (#5836)
Skip encoding and capturing buffered session replay segments while rate-limited, so we don't waste resources on envelopes the transport will drop (#5813)
These skipped replays are now reported as ratelimit_backoff discarded events in client reports, so they no longer disappear from drop statistics. One event is recorded per buffer flush rather than per segment.
Buffer mode is also kept while rate-limited instead of switching to session mode, so the rolling buffer stays warm and the next error after the rate limit expires can send a complete replay.
Performance
Create the outbox and cache directories lazily in their consumers instead of during SDK init, moving the mkdirs() calls off the init (main) thread (#5792)
Reduce the number of SDK threads: LifecycleWatcher now schedules the session-end task on the shared timer executor instead of creating a dedicated java.util.Timer thread (#5819)
Reduce the number of SDK threads: RateLimiter now schedules its rate-limit-lifted notifications on the shared timer executor instead of creating a dedicated java.util.Timer thread (#5814)
Speed up deserialization of arbitrary JSON objects by typing numbers without throwing exceptions (#5783)
Pin the published Sentry Android SDK's AAR metadata minCompileSdk to our minSdk (21) instead of AGP 9's new default of the SDK's own compileSdk (37), so apps that depend on the SDK aren't forced to raise their compileSdk (#5823)
We've put Android 17 through a set of rigorous tests. We're now officially giving it the Sentry stamp of compatibility .(#5796)
Fixes
Reduce main-thread work during Sentry.init by resolving the shake-detector accelerometer off the main thread (~1.75ms on a Pixel 10) (#5784)
Backfill release, environment, distribution, tags, and app version/build—and use the matching replay-on-error sample rate—for ApplicationExitInfo ANR and native crash events captured before SDK initialization, without reusing options cached by a later app update (#5762)
SentryTagModifierNode.isImportantForBounds now matches the default behavior and returns true (#5789)
Prevent a StackOverflowError when a beforeSend, beforeBreadcrumb, beforeSendLog, or beforeEnvelope callback triggers another capture (directly or through a logging integration such as Timber) (#5737)
Captures made from within a user callback (event, transaction, breadcrumb, log, envelope, or check-in) are now dropped while that callback runs, instead of recursing. Captures made by event processors are unaffected.
Replace deprecated ThrowableProxy with LogEvent#getThrown() in sentry-log4j2 (#5751)
Session Replay: Fix first recording segment missing for replays in buffer mode (#5753)
Session Replay: Fix error-to-replay linkage in buffer mode (#5754)
Prevent logs and metrics from remaining queued after a flush scheduling race (#5756)
Fix main thread identification for tombstone (native crash) events (#5742)
Prevent malformed JDBC URLs, which may contain credentials, from being printed to stdout (#5656)
Restrict JVM-global proxy authentication credentials to challenges from the configured proxy host (#5656)
Sanitize Spring 7 and Spring Jakarta WebClient span descriptions to prevent embedded URL credentials from being sent to Sentry (#5656)
Respect tracePropagationTargets when injecting Sentry tracing headers through the OpenTelemetry OTLP propagator (#5656)
Performance
Schedule transaction idle/deadline timeouts on a shared, dedicated executor instead of spawning a Timer thread per transaction (#5670)
Dependencies
Bump OpenTelemetry to support Spring Boot 4.1 (#5573)
If this causes issues for you because you are also using Spring Boot Dependency Management Plugin (io.spring.dependency-management),
which may downgrade the OpenTelemetry SDK, please have a look at the changelog entry above that explains how to use sentry-opentelemetry-bom.
OpenTelemetry to 1.63.0 (was 1.60.1)
OpenTelemetry Instrumentation to 2.29.0 (was 2.26.0)
OpenTelemetry Instrumentation Alpha to 2.29.0-alpha (was 2.26.0-alpha)
OpenTelemetry Semantic Conventions to 1.42.0 (was 1.40.0)
OpenTelemetry Semantic Conventions Alpha to 1.42.0-alpha (was 1.40.0-alpha)
Add Sentry.extendAppStart(), Sentry.finishExtendedAppStart(), and Sentry.getExtendedAppStartSpan() to extend the app start measurement past the first frame for extra launch-time work on Android (#5604)
Requires standalone app start tracing (options.isEnableStandaloneAppStartTracing). Call extendAppStart() in Application.onCreate after SDK init and finishExtendedAppStart() when done:
Sentry.extendAppStart()// Optionally, retrieve the extended app start span to attach your own child spans
valchild=Sentry.getExtendedAppStartSpan()?.startChild("preload","Preload resources")// ... extra launch-time work ...
child?.finish()Sentry.finishExtendedAppStart()
Add trace_metric_byte data category and record byte-level client reports when trace metrics are discarded (#5626)
Expose sentry-native's heartbeat-based app-hang detection through SentryAndroidOptions (#5623)
Enable via setEnableNdkAppHangTracking(true) (disabled by default) and tune the timeout with setNdkAppHangTimeoutIntervalMillis(...) (default 5000 ms), or the io.sentry.ndk.app-hang.enable / io.sentry.ndk.app-hang.timeout-interval-millis manifest entries
Intended for hybrid SDKs: emit the heartbeat by calling the native sentry_app_hang_heartbeat() from the thread you want monitored. Independent of the JVM-based ANR detection (setAnrEnabled)
Support the io.sentry.tombstone.report-historical manifest option to enable historical tombstone reporting via AndroidManifest.xml<meta-data> (#5683)
Fixes
Fix NoSuchMethodError from using Math.floorDiv/Math.floorMod overloads that are unavailable on Java 8 (#5743)
Fix main thread identification parsing for ApplicationExitInfo ANRs (#5733)
Do not send threads without stacktraces for ApplicationExitInfo ANRs (#5733)
Record byte-level client reports when event processors discard logs or trace metrics (#5718)
Name the device-info caching thread SentryDeviceInfoCache so all threads spawned by the SDK are identifiable (#5684)
Apply byte-category rate limits to log and trace metric envelope items (#5716)
Performance
Skip Hint allocation in Scope.addBreadcrumb when no beforeBreadcrumb callback is set (#5689)
Speed up scope persistence by detecting the Sentry executor thread via a marker instead of a Thread.getName() name scan on every scope mutation (#5691)
The single-threaded SentryExecutorService queued the prewarm work ahead of the first useful task, so it could only delay init work, never speed it up; the thread and class loading it warmed are paid identically by the first real task submitted right after.
SentryOkHttpInterceptor::intercept now throws IOException. This is a source-only and Java-only breaking change (#5654)
Fixes
Fix fragment tracing not working with detach/attach navigation (#5660)
Don't start a redundant UI interaction transaction when a transaction is already bound to the Scope (#5491)
Previously, SentryGestureListener always started a UI transaction and only afterwards skipped binding it to the Scope when a manually-bound transaction already existed, leaving the new transaction to be dropped as an idle transaction without children.
Fix potential NPE within Scope.endSession() (#5657)
Fix memory leak in ReplayIntegration due to persisting executor not being shut down (#5627)
Fix AbstractMethodError when compose-ui 1.11+ is used in combination with Modifier.sentryTag() or the Sentry Kotlin compiler plugin (#5672)
Performance
Speed up touch gesture target detection on deeply nested view hierarchies by hit-testing in local coordinates instead of calling getLocationOnScreen per view (#5595)
Probe class availability without initializing the class during SDK init (#5635)
Avoid constructing an exception per view when resolving view ids during view-hierarchy and gesture capture (#5631)
Start the frame metrics thread lazily on first collection instead of during SDK init (#5641)
Reduce SentryId and SpanId allocation overhead by replacing their per-instance LazyEvaluator (and its lock) with a lightweight lazily-generated String. (#5645)
Lazily allocate the ReentrantLock backing AutoClosableReentrantLock to avoid eager lock allocations for SDK objects that never contend during SentryAndroid.init (#5643)
On Android 15+ (API 35), the standalone app.start transaction now reports why the OS started the process via app.vitals.start.reason trace data (e.g. launcher, broadcast, service, content_provider), derived from ApplicationStartInfo.getReason(). You can search and group by this attribute in the Trace Explorer. (#5552)
Fixes
Use System.nanoTime() for cron check-in duration measurement to avoid incorrect durations from wall-clock adjustments (#5611)
Fix crash when getHistoricalProcessStartReasons is called from an isolated or wrong-userId process (#5597)
Release MediaMuxer when a replay segment has no encodable frames to avoid a resource leak (#5583)
Add enableStandaloneAppStartTracing option to send app start as a standalone transaction instead of attaching it as a child span of the first activity transaction (#5342)
Disabled by default; opt in via options.isEnableStandaloneAppStartTracing = true or manifest meta-data io.sentry.standalone-app-start-tracing.enable
Emits a transaction named App Start with op app.start, carrying the existing app start measurements and phase spans (process.load, contentprovider.load, application.load, activity lifecycle spans) as direct children of the root
The standalone transaction shares the same traceId as the first ui.load activity transaction so they remain linked in the trace view
Also covers non-activity starts (broadcast receivers, services, content providers)
Replace Date with a unix timestamp in SentryNanotimeDate to improve performance (#5550)
SentryNanotimeDate is now marked @ApiStatus.Internal. A new (long unixDateMillis, long nanos) constructor was added, where unixDateMillis is milliseconds since the epoch. The existing (Date, long) constructor is retained but deprecated.
Session Replay: Add ReplayFrameObserver for observing captured replay frames (#5386)
SentryAndroid.init(context){options->options.sessionReplay.frameObserver=SentryReplayOptions.ReplayFrameObserver{hint,frameTimestamp,screenName->valbitmap=hint.getAs(TypeCheckHint.REPLAY_FRAME_BITMAP,Bitmap::class.java)if(bitmap!=null){try{// Process the masked replay frame
myAnalyzer.processFrame(bitmap,frameTimestamp,screenName)}finally{bitmap.recycle()}}}}
Parse ART memory and garbage collector info from ANR tombstones into ART context (#5428)
Fix: [Block 8 compromised eMudhra intermediate certificates][Mozilla_eMudhra]. Note that this
update is not necessary for Android devices with Google Play Services as Google has issued an
[automatic update][Google_eMudhra]. This change protects JVMs and AOSP devices that are exposed
to the compromised certificates.
This release introduces opt-in support for [Encrypted Client Hello (ECH)]. This new feature
improves user privacy by encrypting domain names in transit. With regular TLS, your coffee shop’s
Wi-Fi router can see that you’re visiting wikipedia.com, but it cannot see which page you’re
looking at. With ECH, the router observes only the IP address. This additional privacy is most
effective on sites hosted by big CDNs because the IP address doesn’t imply a particular website.
This requires ECH support in the platform’s TLS stack. Today this is only Android 17 (API 37,
released June 2026). When other TLS stacks add ECH support, we'll integrate them.
ECH took a lot of work to implement because the encryption keys are published over DNS in the
[HTTPS resource record], and we needed to write new code to fetch these records. This release
includes a major update to OkHttp’s DNS API: it now supports multiple resource record types (not
just IP addresses!), asynchronous streaming results, and in-memory caching.
To opt in, you can use DnsOverHttps:
// DnsOverHttps itself uses OkHttpClient. Build both clients upon the
// same bootstrap client so they share a connection pool and dispatcher.
valbootstrapClient=OkHttpClient()// This sample uses Cloudflare's 1.1.1.1 DnsOverHttps service.
valclient=bootstrapClient.newBuilder().dns(DnsOverHttps.Builder().client(bootstrapClient).url("https://1.1.1.1/dns-query".toHttpUrl()).build()).build()
You could also opt in with our new AndroidDns API. Unfortunately, the privacy benefits of ECH are
thwarted because its DNS queries are not encrypted by default.
// AndroidDns fetches the HTTPS DNS resource records necessary for ECH.
valclient=OkHttpClient.Builder().dns(AndroidDns()).build()
New: OkHttp artifacts are now signed with our [new signing key]. This project and three sibling
projects ([Retrofit], [Okio], and [SQLDelight]) recently joined [the Commonhaus Foundation].
Fix: MockWebServer’s @StartStop annotation now supports @Nested JUnit 5 tests.
Fix: Our default TLS hostname verifier now reject hosts that fail IP canonicalization.
Fix: Closing a multipart part's sink no longer closes the entire request body.
Fix: Flush HTTP/1 request bodies before detaching the timeout. We had a bug where timeouts
weren’t applied correctly.
Fix: Follow [RFC 1008]'s requirements for HTTP QUERY redirects.
Fix: Fall back to no proxy when the system proxy selector throws. Previously this would cause
the HTTP call to crash.
New: Add superpowers to interceptors. Interceptors can now override anything settable on OkHttpClient.Builder, such as the cache, connection pool, socket factory, and DNS. We expect
this will allow most users to use interceptors everywhere, insted of mixing and matching
interceptors with custom Call.Factory wrappers.
Fix: Limit each HTTP/2 response to 256 KiB of total headers.
Upgrade: [kotlinx.coroutines 1.11.0][coroutines_1_11_0]. This is used by the optional okhttp-coroutines artifact.
[!WARNING]
This is a breaking change, which affects permission handling and what will be available to your bot. Please report any bugs / unexpected results you might encounter with JDA behavior.
Channels for interactions will use snapshots of the channel instead, utilizing the IDetachableEntity handling previously introduced for user-installed commands. These channels carry the current information about the channel, such as name and topic. They also have the permissions for the member that used the interaction, to allow permission checks to still work as expected for that specific member through member.hasPermission(channel, permissions).
This is a minor release adding a few new features before a bigger change coming in 6.7.0 which will introduce handling for Obfuscated Channels.
If you can, please try out and give feedback on Add handling for obfuscated channels #3042. To enable obfuscated channels early for testing purposes, you can toggle a switch in your application dashboard as described here.
New Features
Add file type filtering in slash command attachment options and modal attachment uploads by @freya022 in #3113
guild.searchMessages().attachmentFilenames("cat.png").includeAuthorTypes(MessageSearchAction.AuthorType.USER).queue(response->{if(response.isNotReady()){intretryAfter=response.asNotReady().getRetryAfter();event.reply("The server is still indexing messages, try again later").queue();return;}List<Message>messages=response.asResults().getMessages();event.reply("Found %s messages of cats!".formatted(messages.size())).queue();});
Additionally, we made a minor change in the handling for received messages. For messages received in guilds JDA now handles events with missing member objects, which is necessary to handle messages that arrive shortly after a user is banned from the guild. These messages will contain members which are not added to cache and have no roles.
This PR contains the following updates:
| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [maven](https://maven.apache.org/) ([source](https://github.com/apache/maven)) | `3.9.15` → `3.10.0` |  |  |
| [com.google.code.gson:gson](https://github.com/google/gson) | `2.14.0` → `2.15.0` |  |  |
| [org.gitlab4j:gitlab4j-api](https://gitlab4j.github.io/gitlab4j-api/) ([source](https://github.com/gitlab4j/gitlab4j-api)) | `6.2.0` → `6.3.0` |  |  |
| [io.sentry:sentry](https://github.com/getsentry/sentry-java) | `8.41.0` → `8.62.0` |  |  |
| [com.squareup.okhttp3:okhttp-jvm](https://lysine.dev/okhttp/) ([source](https://github.com/lysine-dev/okhttp)) | `5.3.2` → `5.5.1` |  |  |
| [dev.arbjerg:lavaplayer](https://github.com/lavalink-devs/lavaplayer) | `2.2.6` → `2.2.7` |  |  |
| [net.dv8tion:JDA](https://github.com/discord-jda/JDA) | `6.4.1` → `6.7.0` |  |  |
| [org.apache.maven.plugins:maven-jar-plugin](https://maven.apache.org/plugins/) ([source](https://github.com/apache/maven-jar-plugin)) | `3.5.0` → `3.5.1` |  |  |
| [org.apache.maven.plugins:maven-surefire-plugin](https://maven.apache.org/surefire/) ([source](https://github.com/apache/maven-surefire)) | `3.5.5` → `3.6.1` |  |  |
---
### Release Notes
<details>
<summary>apache/maven (maven)</summary>
### [`v3.10.0`](https://github.com/apache/maven/releases/tag/maven-3.10.0): 3.10.0
[Compare Source](https://github.com/apache/maven/compare/maven-3.9.16...maven-3.10.0)
<!-- Optional: add a release summary here -->
#### 🚀 New features and improvements
- Maven 3.10.x should use Maven 3.1 validation in strict mode ([#​1542](https://github.com/apache/maven/pull/1542)) [@​gnodet](https://github.com/gnodet)
- Do not depend on maven-resolver-supplier-mvn3 ([#​13266](https://github.com/apache/maven/pull/13266)) [@​cstamas](https://github.com/cstamas)
- [\[MNG-6797\]](https://issues.apache.org/jira/browse/MNG-6797) - Remember if Maven model problems were encountered. ([#​298](https://github.com/apache/maven/pull/298)) [@​wilx](https://github.com/wilx)
- feat: add relativePath validation ([#​12742](https://github.com/apache/maven/pull/12742)) [@​cstamas](https://github.com/cstamas)
- Add validation for Plexus-based plugin dependency injection ([#​12651](https://github.com/apache/maven/pull/12651)) [@​slawekjaranowski](https://github.com/slawekjaranowski)
- Introduce validation control ([#​12549](https://github.com/apache/maven/pull/12549)) [@​cstamas](https://github.com/cstamas)
- Update to Resolver 2.0.21 ([#​12504](https://github.com/apache/maven/pull/12504)) [@​cstamas](https://github.com/cstamas)
- [\[MNG-5913\]](https://issues.apache.org/jira/browse/MNG-5913) - Allow defining aliases for existing server configurations in settings.xml ([#​12475](https://github.com/apache/maven/pull/12475)) [@​slawekjaranowski](https://github.com/slawekjaranowski)
#### 🐛 Bug Fixes
- Issue [#​13265](https://github.com/apache/maven/issues/13265): let a settings server declare the repository origins its credentials may be used with ([#​13275](https://github.com/apache/maven/pull/13275)) [@​slawekjaranowski](https://github.com/slawekjaranowski)
- Backport [#​13040](https://github.com/apache/maven/issues/13040): treat reactor BOM imports as ProjectSorter edges so -am includes them ([#​13263](https://github.com/apache/maven/pull/13263)) [@​gnodet](https://github.com/gnodet)
- [\[MNG-8174\]](https://issues.apache.org/jira/browse/MNG-8174) - Fix NPE when a property references itself in a plugin configuration (backport [#​12932](https://github.com/apache/maven/issues/12932)) ([#​12936](https://github.com/apache/maven/pull/12936)) [@​elharo](https://github.com/elharo)
- Fix [#​13200](https://github.com/apache/maven/issues/13200): publish a complete set from MavenProject.getArtifacts ([#​13204](https://github.com/apache/maven/pull/13204)) [@​gnodet](https://github.com/gnodet)
- Fixes [#​13135](https://github.com/apache/maven/issues/13135): ensure completeness of the reactor summary, privilege f… ([#​13173](https://github.com/apache/maven/pull/13173)) [@​rmannibucau](https://github.com/rmannibucau)
- \[3.10.x] Fix [#​13084](https://github.com/apache/maven/issues/13084): sandbox profile activation context for external model builds ([#​13114](https://github.com/apache/maven/pull/13114)) [@​gnodet](https://github.com/gnodet)
- Fix [#​13100](https://github.com/apache/maven/issues/13100): honor repositories from legitimately-active external model profiles ([#​13116](https://github.com/apache/maven/pull/13116)) [@​gnodet](https://github.com/gnodet)
- Add support for MAVEN_PROJECTBASEDIR substitution in jvm.config (backport of MNG-8598 to 3.10.x) ([#​13115](https://github.com/apache/maven/pull/13115)) [@​gnodet](https://github.com/gnodet)
- Scope server credentials and validate legacy relocation coordinates ([#​12954](https://github.com/apache/maven/pull/12954)) [@​slachiewicz](https://github.com/slachiewicz)
- Honour configured policy and validate inputs on the legacy compat paths ([#​12978](https://github.com/apache/maven/pull/12978)) [@​gnodet](https://github.com/gnodet)
- Add unit test for [#​12600](https://github.com/apache/maven/issues/12600) null-guard in forked executions ([#​12923](https://github.com/apache/maven/pull/12923)) [@​gnodet](https://github.com/gnodet)
- Fix: make ProjectIndex thread-safe for parallel builds (backport [#​12832](https://github.com/apache/maven/issues/12832)) ([#​12927](https://github.com/apache/maven/pull/12927)) [@​gnodet](https://github.com/gnodet)
- Fail on misconfigured plugin-requested toolchains ([#​12616](https://github.com/apache/maven/pull/12616)) [@​wilx](https://github.com/wilx)
- Resolve classified POM artifacts from the reactor in Maven 3.x ([#​12659](https://github.com/apache/maven/pull/12659)) [@​wilx](https://github.com/wilx)
- \[3.10.x] Convert paths for MSYS2 and jvm.config placeholders in bin/mvn ([#​12567](https://github.com/apache/maven/pull/12567)) [@​gnodet](https://github.com/gnodet)
- Preserve dependency scope in plugin artifacts - fix [#​12497](https://github.com/apache/maven/issues/12497) ([#​12503](https://github.com/apache/maven/pull/12503)) [@​slawekjaranowski](https://github.com/slawekjaranowski)
#### 📝 Documentation updates
- docs: document plugin.xml V4 vs V3 ([#​13261](https://github.com/apache/maven/pull/13261)) [@​gnodet](https://github.com/gnodet)
- \[maven-3.10.x] Port the site documentation from APT to Markdown ([#​12712](https://github.com/apache/maven/pull/12712)) [@​slachiewicz](https://github.com/slachiewicz)
- improve doc about deprecating plugin descriptor's requirement ([#​12555](https://github.com/apache/maven/pull/12555)) [@​hboutemy](https://github.com/hboutemy)
- Drop mention of Plexus XML ([#​12482](https://github.com/apache/maven/pull/12482)) [@​cstamas](https://github.com/cstamas)
#### 👻 Maintenance
- \[3.10.x] maintenance: Align use of profiles ([#​13274](https://github.com/apache/maven/pull/13274)) [@​cstamas](https://github.com/cstamas)
- Remove version from rat directory deployment ([#​13046](https://github.com/apache/maven/pull/13046)) [@​slawekjaranowski](https://github.com/slawekjaranowski)
- Update NOTICE file in distribution packages ([#​13044](https://github.com/apache/maven/pull/13044)) [@​slawekjaranowski](https://github.com/slawekjaranowski)
- Restrict what a repository-resolved model contributes to the build ([#​12953](https://github.com/apache/maven/pull/12953)) [@​slachiewicz](https://github.com/slachiewicz)
- Validate coordinates and repository precedence during artifact resolution ([#​12952](https://github.com/apache/maven/pull/12952)) [@​slachiewicz](https://github.com/slachiewicz)
- [\[MNG-8129\]](https://issues.apache.org/jira/browse/MNG-8129) - Clarify relativePath validation comment ([#​12966](https://github.com/apache/maven/pull/12966)) [@​gnodet](https://github.com/gnodet)
- \[12811] Keep plexus-cipher at 2.0: POM note ([#​12879](https://github.com/apache/maven/pull/12879)) [@​slachiewicz](https://github.com/slachiewicz)
- \[3.10.x] Use try-with-resources ([#​12845](https://github.com/apache/maven/pull/12845)) [@​slachiewicz](https://github.com/slachiewicz)
- Migrate the embedder-test-project fixture to JUnit 5 ([#​12717](https://github.com/apache/maven/pull/12717)) [@​slachiewicz](https://github.com/slachiewicz)
- \[maven-3.10.x] Port the site documentation from APT to Markdown ([#​12712](https://github.com/apache/maven/pull/12712)) [@​slachiewicz](https://github.com/slachiewicz)
- Migrate legacy plugin Javadoc annotations in Maven Embedder tests ([#​12708](https://github.com/apache/maven/pull/12708)) [@​wilx](https://github.com/wilx)
- Replace custom `GraphLogger` with `DependencyGraphDumper` in dependency resolution ([#​12639](https://github.com/apache/maven/pull/12639)) [@​slawekjaranowski](https://github.com/slawekjaranowski)
- Fix UT: do not use checkout directly ([#​12483](https://github.com/apache/maven/pull/12483)) [@​cstamas](https://github.com/cstamas)
#### 🔧 Build
- Replace nicoulaj checksum plugin with maveniverse checksum plugin ([#​13053](https://github.com/apache/maven/pull/13053)) [@​slawekjaranowski](https://github.com/slawekjaranowski)
- 3.10.x Build by JDK 25, limit JDK to min and max LTS in build ([#​12848](https://github.com/apache/maven/pull/12848)) [@​slawekjaranowski](https://github.com/slawekjaranowski)
- Update Maven version to 3.10.0-rc-1 in GH configuration ([#​12847](https://github.com/apache/maven/pull/12847)) [@​slawekjaranowski](https://github.com/slawekjaranowski)
#### 📦 Dependency updates
- \[3.10.x] deps: Update to Maven Resolver 2.0.24 ([#​13271](https://github.com/apache/maven/pull/13271)) [@​cstamas](https://github.com/cstamas)
- build: bump xmlunitVersion from 2.13.0 to 2.14.0 ([#​13237](https://github.com/apache/maven/pull/13237)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- build: bump org.apache.maven:maven-parent from 49 to 50 ([#​13242](https://github.com/apache/maven/pull/13242)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Resolver 2.0.23 and validation cleanup ([#​13078](https://github.com/apache/maven/pull/13078)) [@​cstamas](https://github.com/cstamas)
- Bump org.codehaus.mojo:build-helper-maven-plugin from 3.6.1 to 3.6.2 ([#​13134](https://github.com/apache/maven/pull/13134)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump org.codehaus.mojo:buildnumber-maven-plugin from 3.3.0 to 3.3.1 ([#​13132](https://github.com/apache/maven/pull/13132)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump org.codehaus.mojo:exec-maven-plugin from 3.6.3 to 3.6.4 ([#​13130](https://github.com/apache/maven/pull/13130)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump org.codehaus.mojo:animal-sniffer-maven-plugin from 1.27 to 1.28 ([#​13129](https://github.com/apache/maven/pull/13129)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump actions/setup-java from 6.0.0 to 6.0.1 ([#​13110](https://github.com/apache/maven/pull/13110)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump jlineVersion from 3.30.16 to 3.30.17 ([#​13111](https://github.com/apache/maven/pull/13111)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump slf4jVersion from 2.0.18 to 2.0.19 ([#​13074](https://github.com/apache/maven/pull/13074)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump org.codehaus.modello:modello-maven-plugin from 2.8.0 to 2.8.1 ([#​13028](https://github.com/apache/maven/pull/13028)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- \[12811] Keep plexus-cipher at 2.0: POM note ([#​12879](https://github.com/apache/maven/pull/12879)) [@​slachiewicz](https://github.com/slachiewicz)
- Bump actions/setup-java from 5.7.0 to 6.0.0 ([#​12860](https://github.com/apache/maven/pull/12860)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Deps: Bump to Resolver 2.0.22 ([#​12803](https://github.com/apache/maven/pull/12803)) [@​cstamas](https://github.com/cstamas)
- Bump resolverVersion from 2.0.21 to 2.0.22 ([#​12823](https://github.com/apache/maven/pull/12823)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump org.codehaus.plexus:plexus-interpolation from 1.29 to 1.30.0 ([#​12825](https://github.com/apache/maven/pull/12825)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump com.google.guava:guava from 33.7.0-jre to 33.7.1-jre ([#​12796](https://github.com/apache/maven/pull/12796)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump org.codehaus.plexus:plexus-utils from 3.6.1 to 3.6.2 ([#​12795](https://github.com/apache/maven/pull/12795)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump org.codehaus.plexus:plexus-testing from 2.1.0 to 2.2.0 ([#​12794](https://github.com/apache/maven/pull/12794)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump org.codehaus.modello:modello-maven-plugin from 2.7.0 to 2.8.0 ([#​12793](https://github.com/apache/maven/pull/12793)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump org.codehaus.plexus:plexus-classworlds from 2.12.0 to 2.12.1 ([#​12792](https://github.com/apache/maven/pull/12792)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump com.google.guava:guava from 33.6.0-jre to 33.7.0-jre ([#​12776](https://github.com/apache/maven/pull/12776)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump xmlunitVersion from 2.12.0 to 2.13.0 ([#​12673](https://github.com/apache/maven/pull/12673)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump actions/setup-java from 5.6.0 to 5.7.0 ([#​12666](https://github.com/apache/maven/pull/12666)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump apache/maven-gh-actions-shared/.github/workflows/release-drafter.yml from 4 to 5 ([#​12496](https://github.com/apache/maven/pull/12496)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Deps: Bump to Eclipse Sisu 1.1.0 ([#​12547](https://github.com/apache/maven/pull/12547)) [@​cstamas](https://github.com/cstamas)
- Bump resolverVersion from 2.0.21-SNAPSHOT to 2.0.21 ([#​12545](https://github.com/apache/maven/pull/12545)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump jlineVersion from 3.30.15 to 3.30.16 ([#​12518](https://github.com/apache/maven/pull/12518)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump actions/checkout from 7.0.0 to 7.0.1 ([#​12514](https://github.com/apache/maven/pull/12514)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Update to Resolver 2.0.21 ([#​12504](https://github.com/apache/maven/pull/12504)) [@​cstamas](https://github.com/cstamas)
- Bump actions/setup-java from 5.5.0 to 5.6.0 ([#​12501](https://github.com/apache/maven/pull/12501)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump apache/maven-gh-actions-shared/.github/workflows/pr-automation.yml from 4 to 5 ([#​12495](https://github.com/apache/maven/pull/12495)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump actions/setup-java from 5.4.0 to 5.5.0 ([#​12439](https://github.com/apache/maven/pull/12439)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
### [`v3.9.16`](https://github.com/apache/maven/releases/tag/maven-3.9.16): 3.9.16
[Compare Source](https://github.com/apache/maven/compare/maven-3.9.15...maven-3.9.16)
<!-- Optional: add a release summary here -->
#### 🐛 Bug Fixes
- Trim `threadConfiguration` to accept input surrounded with spaces ([#​12042](https://github.com/apache/maven/pull/12042)) [@​slawekjaranowski](https://github.com/slawekjaranowski)
- Backport: Maven 3.10.x fixed plugin resolution ([#​12022](https://github.com/apache/maven/pull/12022)) [@​cstamas](https://github.com/cstamas)
#### 📦 Dependency updates
- Bump org.codehaus.plexus:plexus-classworlds from 2.9.0 to 2.11.0 ([#​12039](https://github.com/apache/maven/pull/12039)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- \[3.9.x] Bump to parent POM 48 ([#​12024](https://github.com/apache/maven/pull/12024)) [@​cstamas](https://github.com/cstamas)
- Bump commons-io:commons-io from 2.21.0 to 2.22.0 ([#​11980](https://github.com/apache/maven/pull/11980)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump com.google.guava:guava from 33.5.0-jre to 33.6.0-jre ([#​11951](https://github.com/apache/maven/pull/11951)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
- Bump actions/cache from 5.0.4 to 5.0.5 ([#​11943](https://github.com/apache/maven/pull/11943)) @​[dependabot\[bot\]](https://github.com/apps/dependabot)
</details>
<details>
<summary>gitlab4j/gitlab4j-api (org.gitlab4j:gitlab4j-api)</summary>
### [`v6.3.0`](https://github.com/gitlab4j/gitlab4j-api/releases/tag/6.3.0)
[Compare Source](https://github.com/gitlab4j/gitlab4j-api/compare/6.2.0...6.3.0)
#### What's Changed
- Adding projectId field in DownstreamPipeline by [@​mbench777](https://github.com/mbench777) in [#​1301](https://github.com/gitlab4j/gitlab4j-api/pull/1301)
- Add support for `ci_pipeline_variables_minimum_override_role` in updateProject by [@​nikitaBarkov](https://github.com/nikitaBarkov) in [#​1303](https://github.com/gitlab4j/gitlab4j-api/pull/1303)
- Fix javadoc in ProjectApi#listProjectAccessTokens() by [@​jmini](https://github.com/jmini) in [#​1306](https://github.com/gitlab4j/gitlab4j-api/pull/1306)
- Add getters to ProjectFilter by [@​inoorinoor](https://github.com/inoorinoor) in [#​1308](https://github.com/gitlab4j/gitlab4j-api/pull/1308)
- Update Jackson dependencies to version 2.18.6 by [@​michix](https://github.com/michix) in [#​1316](https://github.com/gitlab4j/gitlab4j-api/pull/1316)
- Add the draft option to the Merge Request creation by [@​mhagnumdw](https://github.com/mhagnumdw) in [#​1311](https://github.com/gitlab4j/gitlab4j-api/pull/1311)
- Fix Accept Header to use MediaType.WILDCARD by [@​exceptionfactory](https://github.com/exceptionfactory) in [#​1318](https://github.com/gitlab4j/gitlab4j-api/pull/1318)
- Missing push rules properties by [@​wilvdb](https://github.com/wilvdb) in [#​1319](https://github.com/gitlab4j/gitlab4j-api/pull/1319)
- Add missing token scopes to all scope enums by [@​jschneider](https://github.com/jschneider) in [#​1313](https://github.com/gitlab4j/gitlab4j-api/pull/1313)
- Update EventMergeRequest webhook to handle non-string merge param values by [@​klew00](https://github.com/klew00) in [#​1317](https://github.com/gitlab4j/gitlab4j-api/pull/1317) **This change it potentially breaking existing code reading the value (type change)**
#### New Contributors
- [@​mbench777](https://github.com/mbench777) made their first contribution in [#​1301](https://github.com/gitlab4j/gitlab4j-api/pull/1301)
- [@​nikitaBarkov](https://github.com/nikitaBarkov) made their first contribution in [#​1303](https://github.com/gitlab4j/gitlab4j-api/pull/1303)
- [@​inoorinoor](https://github.com/inoorinoor) made their first contribution in [#​1308](https://github.com/gitlab4j/gitlab4j-api/pull/1308)
- [@​exceptionfactory](https://github.com/exceptionfactory) made their first contribution in [#​1318](https://github.com/gitlab4j/gitlab4j-api/pull/1318)
- [@​wilvdb](https://github.com/wilvdb) made their first contribution in [#​1319](https://github.com/gitlab4j/gitlab4j-api/pull/1319)
- [@​klew00](https://github.com/klew00) made their first contribution in [#​1317](https://github.com/gitlab4j/gitlab4j-api/pull/1317)
**Full Changelog**: <https://github.com/gitlab4j/gitlab4j-api/compare/6.2.0...6.3.0>
</details>
<details>
<summary>getsentry/sentry-java (io.sentry:sentry)</summary>
### [`v8.62.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8620)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.61.1...8.62.0)
##### Improvements
- Support Navigation 3 integration for multi-Activity and multi-Fragment applications, where each Activity or Fragment has its own `SentryNavEffect` ([#​6305](https://github.com/getsentry/sentry-java/pull/6305))
- See the [Navigation for Android docs](https://docs.sentry.io/platforms/android/integrations/navigation/#supported-setups) for a detailed list of supported vs unsupported app setups.
##### Fixes
- Fix a D8 crash (`NullPointerException: Cannot invoke "String.length()"`) when dexing the SDK with AGP 8.0 and older, a regression from 8.61.1 ([#​6356](https://github.com/getsentry/sentry-java/pull/6356))
- Always remove the first-draw listener after the first frame, even if no layout pass follows it ([#​6152](https://github.com/getsentry/sentry-java/pull/6152))
- Prevent Reactor pool maintenance tasks from retaining unbounded Sentry scope chains ([#​6283](https://github.com/getsentry/sentry-java/pull/6283))
### [`v8.61.1`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8611)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.61.0...8.61.1)
##### Fixes
- Session Replay: Fix a native crash (`SIGABRT` on the RenderThread) when stopping a replay that uses the canvas screenshot strategy ([#​6342](https://github.com/getsentry/sentry-java/pull/6342))
- Session Replay: Keep the segment videos of a replay that stopped before the startup cleanup of previous replays ran ([#​6343](https://github.com/getsentry/sentry-java/pull/6343))
- Report the number of dropped spans in client reports when a batched span envelope item is discarded, instead of a quantity of 1 (e.g. for Flutter span streaming) ([#​6265](https://github.com/getsentry/sentry-java/pull/6265))
- Session Replay: Keep the flushed video and do not reuse its segment id when `stop()` is called right after `flush()` in buffer mode ([#​6340](https://github.com/getsentry/sentry-java/pull/6340))
- Keep sending events from Android 7.1.0 and older devices after Sentry changes its TLS certificate authority ([#​6227](https://github.com/getsentry/sentry-java/pull/6227))
- In February 2027, Sentry moves its TLS certificates from DigiCert to Let's Encrypt and Google Trust Services ([announcement](https://sentry.io/changelog/were-changing-our-tls-certificate-authority-in-february-2027)).
- Android 7.1.0 (API 25) and older don't trust the Let's Encrypt root certificate (ISRG Root X1), so without this fix, the SDK on those devices can no longer send events to Sentry after the switch.
- The SDK now bundles ISRG Root X1 and trusts it in addition to the device's root certificates on API 25 and lower. This only applies to the SDK's own uploads to Sentry SaaS (DSNs on `sentry.io`), not to self-hosted Sentry, not to any other connection your app makes, and not if you set your own `SentryOptions.setSslSocketFactory`.
- Apps need to update to an SDK version with this fix to keep sending events from these devices.
- Session Replay: Use a software canvas for video encoding on the Android Emulator to avoid a native crash in `eglDestroySurface` ([#​6282](https://github.com/getsentry/sentry-java/pull/6282))
##### Internal
- Measure the hostname cache TTL on the monotonic ticker the options provide, so that a device time change no longer shortens or extends it ([#​6100](https://github.com/getsentry/sentry-java/pull/6100))
- Measure Session Replay's 1h recording cap and its touch-move debounce on a monotonic clock, so a device time change no longer stops a healthy recording early, keeps a finished one alive, or suppresses gesture events ([#​6090](https://github.com/getsentry/sentry-java/pull/6090))
- Add `ScreenshotUtils.takeMaskedScreenshot` so Hybrid SDKs can capture screenshots masked according to `SentryAndroidOptions.getScreenshot()` ([#​6281](https://github.com/getsentry/sentry-java/pull/6281))
##### Dependencies
- Bump Native SDK from v0.17.3 to v0.17.4 ([#​6278](https://github.com/getsentry/sentry-java/pull/6278))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0174)
- [diff](https://github.com/getsentry/sentry-native/compare/0.17.3...0.17.4)
### [`v8.61.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8610)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.60.0...8.61.0)
##### Fixes
- Session Replay: Backfill release, environment and SDK info for replays sent on the next launch after the app was killed or crashed ([#​6253](https://github.com/getsentry/sentry-java/pull/6253))
- Fix SDK callback error handling ([#​6140](https://github.com/getsentry/sentry-java/pull/6140))
- Drop telemetry when a `beforeSend*` callback throws and report it using `DiscardReason.CALLBACK_ERROR`.
- Drop transactions when `tracesSampler` throws instead of inheriting the parent sampling decision or falling back to `tracesSampleRate` ([#​6163](https://github.com/getsentry/sentry-java/pull/6163)).
- Drop spans when `beforeSpan` throws without disrupting requests, covering OkHttp, OpenFeign, GraphQL, Ktor, and Apollo—including Apollo 5 ([#​6167](https://github.com/getsentry/sentry-java/pull/6167), [#​6238](https://github.com/getsentry/sentry-java/pull/6238)).
- Drop telemetry and record `callback_error` when a customer event processor throws instead of continuing with a potentially partially processed item. SDK-owned processor failures are logged and processing continues.
- Drop breadcrumbs when `beforeBreadcrumb` throws instead of storing exception details on the breadcrumb.
- No longer fail Spring requests when a `TransactionNameProvider` throws, falling back to `<unlabeled transaction>` ([#​6241](https://github.com/getsentry/sentry-java/pull/6241)).
- No longer fail Spring requests when a `SentryUserProvider` throws and overwrite the user with an empty user object ([#​6240](https://github.com/getsentry/sentry-java/pull/6240)).
- Disable profiling when `profilesSampler` throws instead of falling back to `profilesSampleRate` or inheriting the parent profiling decision ([#​6164](https://github.com/getsentry/sentry-java/pull/6164)).
- Report attached profiles dropped by transaction callback errors as `callback_error` in client reports and `OnDiscardCallback` ([#​6166](https://github.com/getsentry/sentry-java/pull/6166)).
- Skip replay capture when `beforeErrorSampling` throws while retaining the error event ([#​6165](https://github.com/getsentry/sentry-java/pull/6165)).
- Skip Android screenshots or view hierarchies when their capture callbacks throw while retaining the error event ([#​6167](https://github.com/getsentry/sentry-java/pull/6167)).
- Keep the Android feedback form available when its options configurator throws ([#​6239](https://github.com/getsentry/sentry-java/pull/6239)).
- Isolate nonfatal callback throwables while continuing to propagate fatal JVM errors ([#​6251](https://github.com/getsentry/sentry-java/pull/6251)).
##### Internal
- Hold the hostname cache on `SentryOptions` instead of a static singleton ([#​6117](https://github.com/getsentry/sentry-java/pull/6117))
##### Dependencies
- Bump Native SDK from v0.17.2 to v0.17.3 ([#​6250](https://github.com/getsentry/sentry-java/pull/6250))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0173)
- [diff](https://github.com/getsentry/sentry-native/compare/0.17.2...0.17.3)
### [`v8.60.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8600)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.59.0...8.60.0)
##### Features
- Add support for Android Navigation 3 through the new `sentry-android-navigation3` library ([#​6233](https://github.com/getsentry/sentry-java/pull/6233))
- Use `SentryNavEffect` to record navigation transactions, breadcrumbs, screen names, and additional context as your nav back stack changes.
- See the [Navigation for Android docs](https://docs.sentry.io/platforms/android/integrations/navigation/) for additional details.
- Report the cellular network technology generation in `device.connection_effective_type`, for example `4g` or `5g` ([#​6146](https://github.com/getsentry/sentry-java/pull/6146))
##### Dependencies
- Bump Native SDK from v0.17.1 to v0.17.2 ([#​6230](https://github.com/getsentry/sentry-java/pull/6230))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0172)
- [diff](https://github.com/getsentry/sentry-native/compare/0.17.1...0.17.2)
### [`v8.59.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8590)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.58.0...8.59.0)
##### Breaking Changes
- Capture direct `Sentry.logger()` and `Sentry.metrics()` calls regardless of `options.getLogs().isEnabled()` and `options.getMetrics().isEnabled()` ([#​6184](https://github.com/getsentry/sentry-java/pull/6184))
- Automatic logging integrations still only capture logs when `options.getLogs().isEnabled()` is `true`. `options.getMetrics().setEnabled(...)` currently has no effect because there are no automatic Metrics integrations. Both enable options will be removed in the upcoming major release, and each logging integration will then have a separate opt-in flag.
- Use `options.getLogs().setBeforeSend(...)` and `options.getMetrics().setBeforeSend(...)` to filter manually emitted telemetry. Return `null` from either callback to drop it.
##### Fixes
- Keep the videos of already captured session replay segments when the replay stops, so segments that are still queued are no longer sent without their video ([#​6177](https://github.com/getsentry/sentry-java/pull/6177))
##### Features
- Deprecate `sendDefaultPii` in favor of `dataCollection` ahead of its removal in 9.0 ([#​6158](https://github.com/getsentry/sentry-java/pull/6158))
- Make the tombstone merge time threshold configurable via `SentryAndroidOptions.setTombstoneMergeTimeThresholdMillis` and the `io.sentry.tombstone.merge-time-threshold-millis` manifest option ([#​6154](https://github.com/getsentry/sentry-java/pull/6154))
- Add `sentry-apollo-5` integration for Apollo Kotlin 5, providing HTTP tracing and failed GraphQL request reporting ([#​6074](https://github.com/getsentry/sentry-java/pull/6074))
- Add OkHttp autoconfiguration for Spring Boot ([#​5797](https://github.com/getsentry/sentry-java/pull/5797))
##### Fixes
- Prevent infinite loops when capturing exceptions with cyclic cause chains ([#​6073](https://github.com/getsentry/sentry-java/pull/6073))
##### Improvements
- Recover Android 17 `MemoryLimiter` app exits recorded as `ApplicationExitInfo.REASON_MEMORY_LIMITER` ([#​6174](https://github.com/getsentry/sentry-java/pull/6174))
##### Dependencies
- Bump Native SDK from v0.16.6 to v0.17.1 ([#​6135](https://github.com/getsentry/sentry-java/pull/6135))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0171)
- [diff](https://github.com/getsentry/sentry-native/compare/0.16.6...0.17.1)
### [`v8.58.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8580)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.57.0...8.58.0)
##### Features
- Add `LocalSentrySpan` to `sentry-compose` so apps can provide a parent `ISpan` to a composable subtree and have nested `SentryTraced` spans attach to it (\[[#​6112](https://github.com/getsentry/sentry-java/issues/6112)][#​6112](https://github.com/getsentry/sentry-java/pull/6112))
- Add `dataCollection`, a fine-grained replacement for `sendDefaultPii`, for controlling data collected automatically by SDK integrations. See the Data Collection documentation for [Android](https://docs.sentry.io/platforms/android/configuration/options/#dataCollection), [Java](https://docs.sentry.io/platforms/java/configuration/options/#dataCollection), and [Spring Boot](https://docs.sentry.io/platforms/java/guides/spring-boot/configuration/options/#dataCollection) ([#​5759](https://github.com/getsentry/sentry-java/pull/5759))
> \[!WARNING]
> `sendDefaultPii` will be removed in the next major SDK version. Migrate to `dataCollection` before upgrading.
##### Fixes
- Disable URL caching when reading `META-INF/MANIFEST.MF` files during version detection so that the SDK no longer keeps jar file handles open for the life of the process ([#​6124](https://github.com/getsentry/sentry-java/pull/6124)
- Keep the `EventListener` wrapped by `SentryOkHttpEventListener` per `Call` ([#​6003](https://github.com/getsentry/sentry-java/pull/6003))
### [`v8.57.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8570)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.56.0...8.57.0)
##### Behavioral Changes
- Measure HTTP rate-limit backoff on a monotonic clock instead of the wall clock, so that a device time change no longer lifts or extends an active rate limit ([#​6030](https://github.com/getsentry/sentry-java/pull/6030))
##### Features
- Add Android SDK support for reporting `MemoryLimiter` app exits recovered from `ApplicationExitInfo` ([#​6111](https://github.com/getsentry/sentry-java/pull/6111)).
- Sentry can now configure Log4j2 automatically for Spring Boot 4 when `sentry-log4j2` is on the classpath and Log4j2 Core is the active logging backend ([#​5403](https://github.com/getsentry/sentry-java/pull/5403))
- Enable automatic appender registration with:
```properties
sentry.logging.enabled=true
```
Automatic registration is disabled by default for now and will be enabled by default in the next major release.
- The appender is attached to the root logger by default. To attach it to specific loggers instead, configure one or more non-overlapping logger names:
```properties
sentry.logging.loggers[0]=com.example
sentry.logging.loggers[1]=org.example
```
- Configure the minimum level for creating breadcrumbs. The default is `INFO`:
```properties
sentry.logging.minimum-breadcrumb-level=INFO
```
- Configure the minimum level for creating Sentry error events. The default is `ERROR`:
```properties
sentry.logging.minimum-event-level=ERROR
```
- Configure the minimum level for sending Sentry structured logs. The default is `INFO`:
```properties
sentry.logging.minimum-level=INFO
```
Structured logs must also be enabled:
```properties
sentry.logs.enabled=true
```
- Sentry can now configure Log4j2 automatically for Spring Boot 3 when `sentry-log4j2` is on the classpath and Log4j2 Core is the active logging backend ([#​6072](https://github.com/getsentry/sentry-java/pull/6072))
- Disabled by default for now; enable it and configure levels the same way as described in the Spring Boot 4 entry above (`sentry.logging.enabled=true`)
##### Fixes
- Support `ws` and `wss` URL parsing for WebSocket instrumentation ([#​6064](https://github.com/getsentry/sentry-java/pull/6064))
- Keep resolving the server name after `Sentry.close()` or a re-init. Closing the SDK shut down the shared hostname cache for the life of the process, so `server_name` silently froze at the value it had last resolved ([#​6119](https://github.com/getsentry/sentry-java/pull/6119))
- Order breadcrumbs by the timestamp they carry rather than by when they were created in the current process, so breadcrumbs restored from disk or handed over by a hybrid SDK no longer sort as if they had just happened ([#​6097](https://github.com/getsentry/sentry-java/pull/6097))
##### Internal
- Deprecate `RateLimiter(ICurrentDateProvider, SentryOptions)` in favor of `RateLimiter(SentryOptions)`, whose backoff is measured on a monotonic ticker ([#​6030](https://github.com/getsentry/sentry-java/pull/6030))
- Deprecate `AndroidCurrentDateProvider.getInstance()` in favor of `MonotonicTicker`, which counts time spent in deep sleep and cannot be confused with the epoch-based `CurrentDateProvider` ([#​6103](https://github.com/getsentry/sentry-java/pull/6103))
### [`v8.56.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8560)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.55.0...8.56.0)
##### Fixes
- Update `SentryTraced` so that it now honors `options.setIgnoredSpanOrigins` ([#​6058](https://github.com/getsentry/sentry-java/pull/6058))
- `SentryTraced` now checks for its owning transaction dynamically rather than once per app process. The latter caused `SentryTraced` spans to be dropped process-wide once the original transaction finished ([#​6057](https://github.com/getsentry/sentry-java/pull/6057))
- Fix typos in Spring GraphQL integration names (`GrahQL` to `GraphQL`) ([#​6061](https://github.com/getsentry/sentry-java/pull/6061))
- Populate the Android connection status cache during the first two minutes after boot, instead of treating the empty cache as up to date ([#​6029](https://github.com/getsentry/sentry-java/pull/6029))
- Prevent `SentryTraced` from producing dangling spans if recomposition is abandoned or drawing fails ([#​6049](https://github.com/getsentry/sentry-java/pull/6049))
- Report a consistent app start type across the app start measurement, `contexts.app` and the `app.start` span attributes ([#​6006](https://github.com/getsentry/sentry-java/pull/6006))
##### Improvements
- Emit a single `ui.compose` span per `SentryTraced` on initial composition instead of one on every recomposition, and set the origin on `ui.render` spans ([#​6051](https://github.com/getsentry/sentry-java/pull/6051))
##### Internal
- Add an internal `MonotonicTicker` abstraction with `Deadline` and `Stopwatch` primitives ([#​6028](https://github.com/getsentry/sentry-java/pull/6028))
- Add internal `Timestamp`, `EpochClock` and `AnchoredClock`, so related instants project from one wall-clock reading instead of each reading the clock ([#​6045](https://github.com/getsentry/sentry-java/pull/6045))
##### Dependencies
- Bump Native SDK from v0.16.5 to v0.16.6 ([#​6079](https://github.com/getsentry/sentry-java/pull/6079))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0166)
- [diff](https://github.com/getsentry/sentry-native/compare/0.16.5...0.16.6)
### [`v8.55.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8550)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.54.0...8.55.0)
##### Features
- Add `Session.State.Unhandled` for unhandled errors that do not terminate the process ([#​5919](https://github.com/getsentry/sentry-java/pull/5919))
##### Improvements
- Move ANR profiling out of experimental ([#​6042](https://github.com/getsentry/sentry-java/pull/6042))
##### Fixes
- Keep dropped tombstone and ANR events dropped, instead of reporting the same app exit again at every app start ([#​6002](https://github.com/getsentry/sentry-java/pull/6002))
- Clear the persisted replay id on SDK init, so a replay id from a previous process is no longer attached to ANR events from the current one ([#​6033](https://github.com/getsentry/sentry-java/pull/6033))
- Apply `Sentry.withScope` and `Sentry.withIsolationScope` data to events captured inside the callback when `globalHubMode` is enabled ([#​6004](https://github.com/getsentry/sentry-java/pull/6004))
- `globalHubMode` is enabled by default on Android, where tags, extras, contexts and level set inside the callback were silently dropped
- Scopes that are explicitly made current, e.g. via `Sentry.setCurrentScopes` or the `SentryContext` coroutine integration, are now also honoured when `globalHubMode` is enabled
- `Sentry.pushScope`, `Sentry.pushIsolationScope` and `Sentry.popScope` remain no-ops when `globalHubMode` is enabled
- Drop the `profiler_id` from transactions and spans when no Perfetto profile covers them, e.g. when Android's `ProfilingManager` rate limits the profiling request ([#​6015](https://github.com/getsentry/sentry-java/pull/6015))
- Prevent events from being dropped when feature flags are added while an event is being captured ([#​5989](https://github.com/getsentry/sentry-java/pull/5989))
##### Internal
- Add `InternalSentrySdk.captureEnvelopeNonTerminating` for hybrid SDKs (e.g. Flutter) so unhandled exceptions that don't terminate the process no longer end the session as `crashed` ([#​5921](https://github.com/getsentry/sentry-java/pull/5921))
- Add `InternalSentrySdk.updateSessionForDroppedEventNonTerminating` so hybrid SDKs can still update the session when an error is dropped by sampling ([#​5990](https://github.com/getsentry/sentry-java/pull/5990))
##### Dependencies
- Bump Native SDK from v0.16.4 to v0.16.5 ([#​6034](https://github.com/getsentry/sentry-java/pull/6034))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0165)
- [diff](https://github.com/getsentry/sentry-native/compare/0.16.4...0.16.5)
### [`v8.54.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8540)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.53.0...8.54.0)
##### Features
- Set `app.vitals.start.screen` and `app.vitals.start.type` on standalone `app.start` children ([#​6005](https://github.com/getsentry/sentry-java/pull/6005))
- Add screenshot attachment button to the Android user feedback widget ([#​5828](https://github.com/getsentry/sentry-java/pull/5828))
- Users can now attach a screenshot when submitting feedback. Enabled by default; can be disabled via `SentryFeedbackOptions.setEnableAttachScreenshot(false)` or the `io.sentry.feedback.enable-attach-screenshot` manifest flag.
- Requires the `androidx.activity` `>=1.8.2` dependency
- Add manual Session Replay controls through `Sentry.replay()` ([#​5978](https://github.com/getsentry/sentry-java/pull/5978))
- Explicit `start()` and `startBuffering()` calls bypass the configured replay sample rates; sampling still controls automatic startup.
- `start()` starts a full-session replay and does nothing if one is already recording.
- `startBuffering()` keeps a rolling buffer that is sent on `flush()` or an error, then continues in session mode.
- `stop()` ends the current replay; the next `start()` creates a new replay session.
- `pause()` suspends recording until `resume()` and remains paused across background and foreground transitions and automatic replay restarts in the same process.
- `resume()` continues the same manually paused replay.
- `flush()` sends the current replay data, or starts a full-session replay when recording is stopped.
##### Fixes
- Prevents inclusion of `null.` prefix before default-package class names when parsing Java and JNI frames from Android ANR thread dumps ([#​5979](https://github.com/getsentry/sentry-java/pull/5979))
- Prevent duplicated breadcrumbs on tombstone-merged native crash events ([#​5888](https://github.com/getsentry/sentry-java/pull/5888))
- Prevent a class of Session Replay deadlocks by confining lifecycle state changes to Android's main thread ([#​5965](https://github.com/getsentry/sentry-java/pull/5965))
- Symbolicate tombstone native frames for libraries loaded directly from APKs ([#​5992](https://github.com/getsentry/sentry-java/pull/5992))
- Prevent a deadlock between the app start extension and the Android performance event processor ([#​6007](https://github.com/getsentry/sentry-java/pull/6007))
##### Performance
- Defer starting Session Replay off the SDK initialization critical path ([#​5965](https://github.com/getsentry/sentry-java/pull/5965))
- Use manifest metadata resolved at build time to reduce Android SDK initialization overhead ([#​5976](https://github.com/getsentry/sentry-java/pull/5976))
##### Dependencies
- Bump Native SDK from v0.16.2 to v0.16.4 ([#​5962](https://github.com/getsentry/sentry-java/pull/5962), [#​5996](https://github.com/getsentry/sentry-java/pull/5996))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0164)
- [diff](https://github.com/getsentry/sentry-native/compare/0.16.2...0.16.4)
### [`v8.53.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8530)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.52.0...8.53.0)
##### Features
- Allow child spans to use explicit start timestamps through `ISpan` ([#​5929](https://github.com/getsentry/sentry-java/pull/5929))
- Make `ISpan.startChild` overloads with `SpanOptions` public ([#​5927](https://github.com/getsentry/sentry-java/pull/5927))
- Add `Sentry.feedback().enableOnShake()`, `Sentry.feedback().disableOnShake()`, and `Sentry.feedback().isOnShakeEnabled()` to toggle and query shake-to-report at runtime ([#​5827](https://github.com/getsentry/sentry-java/pull/5827))
##### Improvements
- Remove `ApiStatus.Experimental` annotation from `SentrySQLiteDriver` ([#​5938](https://github.com/getsentry/sentry-java/pull/5938))
##### Fixes
- Clear contexts when calling `Scope.clear()` ([#​5902](https://github.com/getsentry/sentry-java/pull/5902))
- Preserve custom `Throwable` identities when R8 optimizes Android apps ([#​5881](https://github.com/getsentry/sentry-java/pull/5881))
- Report the correct cpu usage for the first performance sample of a transaction, which was measured against the time since device boot ([#​5926](https://github.com/getsentry/sentry-java/pull/5926))
- Prevent an ANR when the Session Replay video encoder gets stuck ([#​5842](https://github.com/getsentry/sentry-java/pull/5842))
- Some hardware encoders never signal end-of-stream, which made the replay worker spin forever while holding the encoder lock. The app's lifecycle callbacks then blocked on that lock and the app froze until the system killed it. The encoder now gives up instead of spinning, and closing the replay cache no longer waits indefinitely for a wedged encoder.
##### Performance
- Read the clock once per performance collection round instead of once per in-flight transaction ([#​5934](https://github.com/getsentry/sentry-java/pull/5934))
- Reduce allocations while collecting cpu usage during transactions by reading the process cpu time via `Process.getElapsedCpuTime()` instead of parsing `/proc/self/stat` (33.6kB to 16 bytes per sample on a Pixel 3) ([#​5926](https://github.com/getsentry/sentry-java/pull/5926))
- Store performance measurements as primitives, removing a boxed allocation per measurement per performance sample ([#​5935](https://github.com/getsentry/sentry-java/pull/5935))
##### Dependencies
- Bump Native SDK from v0.16.1 to v0.16.2 ([#​5910](https://github.com/getsentry/sentry-java/pull/5910))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0162)
- [diff](https://github.com/getsentry/sentry-native/compare/0.16.1...0.16.2)
### [`v8.52.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8520)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.51.0...8.52.0)
##### Fixes
- Restore the interrupt flag when cached envelope processing is interrupted between files ([#​5884](https://github.com/getsentry/sentry-java/pull/5884))
- Reduce false-positive SDK crash attribution for host app SQLite cursor crashes ([#​5883](https://github.com/getsentry/sentry-java/pull/5883))
- Prevent inflated cold app start when the OS spawns the process in the background (e.g. FCM push) on API 35+ ([#​5841](https://github.com/getsentry/sentry-java/pull/5841), [#​5880](https://github.com/getsentry/sentry-java/pull/5880))
- Preserve single-sample ANR profile chunks so profiles remain available on ANR events ([#​5872](https://github.com/getsentry/sentry-java/pull/5872))
- Avoid a CPU busy-loop when recording discarded log or metric envelopes under rate limiting ([#​5835](https://github.com/getsentry/sentry-java/pull/5835))
- `ClientReportRecorder` now reads the item count from the envelope item header instead of deserializing the payload, which under sustained rate limiting could pin CPU cores while repeatedly throwing exceptions
- Report tasks handed to a no-op `ISentryExecutorService` as cancelled ([#​5874](https://github.com/getsentry/sentry-java/pull/5874))
- `NoOpSentryExecutorService` previously returned a `Future` that was never run and never cancelled, so callers could not tell a dropped task from a queued one and `get()` would block until its timeout
##### Performance
- Defer use of reflection by `SentryFrameMetricsCollector` during `Sentry.init` ([#​5886](https://github.com/getsentry/sentry-java/pull/5886))
- Avoid waiting up to `shutdownTimeoutMillis` when closing the SDK with a pending transaction timeout or session-end task ([#​5851](https://github.com/getsentry/sentry-java/pull/5851))
- Use `RGB_565` instead of `ARGB_8888` for screenshot and replay capture bitmaps, halving per-frame memory usage ([#​5821](https://github.com/getsentry/sentry-java/pull/5821))
- Remove an unused lock from `SentryPerformanceProvider`, which was allocated on every cold start in `ContentProvider.onCreate` without ever being acquired ([#​5871](https://github.com/getsentry/sentry-java/pull/5871))
- Reduce main-thread allocations when parsing the app start profiling config ([#​5867](https://github.com/getsentry/sentry-java/pull/5867))
- Batch and coalesce scope-persistence disk writes to reduce startup cost ([#​5791](https://github.com/getsentry/sentry-java/pull/5791))
- Scope mutations are now coalesced (latest value per field) and breadcrumbs are appended in batches behind a single fsync, instead of one synchronous disk write per mutation.
- Reduce the number of SDK threads: the `HostnameCache` worker thread now times out while idle instead of staying alive for the whole process lifetime ([#​5817](https://github.com/getsentry/sentry-java/pull/5817))
##### Dependencies
- Bump Native SDK from v0.16.0 to v0.16.1 ([#​5879](https://github.com/getsentry/sentry-java/pull/5879))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0161)
- [diff](https://github.com/getsentry/sentry-native/compare/0.16.0...0.16.1)
### [`v8.51.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8510)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.50.1...8.51.0)
##### Features
- Use Android's `ProfilingManager` (Perfetto) for continuous profiling on API 35+ devices ([#​5251](https://github.com/getsentry/sentry-java/pull/5251))
- On API 35+ devices, continuous profiling now automatically uses Android's system `ProfilingManager` with Perfetto-based stack sampling, providing lower-overhead and more accurate profiles. No configuration change is required.
- Devices below API 35 keep using the legacy `Debug`-based profiler.
- Added an `enableLegacyProfiling` option (default `true`) to disable the legacy `Debug`-based profiler. Setting it to `false` disables continuous profiling on API < 35 devices as well as transaction-based profiling (`profilesSampleRate`/`profilesSampler`) on all devices, since transaction-based profiling is not supported by Perfetto.
- It can also be configured via the `io.sentry.profiling.enable-legacy-profiling` manifest flag.
- See the [Android profiling docs](https://docs.sentry.io/platforms/android/profiling/) for details.
##### Behavioral Changes
- The outbox and cache directories are no longer created by `Sentry.init` ([#​5792](https://github.com/getsentry/sentry-java/pull/5792))
- They are now created lazily by whichever component first writes into them, off the init thread. As a result, the directories at `SentryOptions.getOutboxPath()` and `SentryOptions.getCacheDirPath()` are not guaranteed to exist once `Sentry.init` returns.
- If you write envelopes into the outbox path yourself instead of going through the SDK — as hybrid SDKs do for `captureEnvelope` — create the directory first, e.g. `new File(outboxPath).mkdirs()`.
##### Improvements
- Skip building Android manifest metadata debug log messages when debug logging is disabled, reducing allocations during SDK init ([#​5790](https://github.com/getsentry/sentry-java/pull/5790))
##### Fixes
- Use the original app build's ProGuard UUID for ANR profile chunks ([#​5852](https://github.com/getsentry/sentry-java/pull/5852))
- Fix potential ANR/deadlock in Session Replay when `checkCanRecord` runs on the replay executor thread ([#​5837](https://github.com/getsentry/sentry-java/pull/5837))
- Prevent concurrent PixelCopy access during Session Replay masking and bitmap cleanup ([#​5808](https://github.com/getsentry/sentry-java/pull/5808))
- Release `MediaMuxer` when the replay video encoder fails to start to avoid a resource leak ([#​5607](https://github.com/getsentry/sentry-java/pull/5607))
- Set the correct platform (`android` instead of `java`) on ANR profile chunks so they are billed as UI Profile Hours rather than Continuous Profile Hours ([#​5836](https://github.com/getsentry/sentry-java/pull/5836))
- Skip encoding and capturing buffered session replay segments while rate-limited, so we don't waste resources on envelopes the transport will drop ([#​5813](https://github.com/getsentry/sentry-java/pull/5813))
- These skipped replays are now reported as `ratelimit_backoff` discarded events in client reports, so they no longer disappear from drop statistics. One event is recorded per buffer flush rather than per segment.
- Buffer mode is also kept while rate-limited instead of switching to session mode, so the rolling buffer stays warm and the next error after the rate limit expires can send a complete replay.
##### Performance
- Create the outbox and cache directories lazily in their consumers instead of during SDK init, moving the `mkdirs()` calls off the init (main) thread ([#​5792](https://github.com/getsentry/sentry-java/pull/5792))
- Reduce the number of SDK threads: `LifecycleWatcher` now schedules the session-end task on the shared timer executor instead of creating a dedicated `java.util.Timer` thread ([#​5819](https://github.com/getsentry/sentry-java/pull/5819))
- Reduce the number of SDK threads: `RateLimiter` now schedules its rate-limit-lifted notifications on the shared timer executor instead of creating a dedicated `java.util.Timer` thread ([#​5814](https://github.com/getsentry/sentry-java/pull/5814))
- Speed up deserialization of arbitrary JSON objects by typing numbers without throwing exceptions ([#​5783](https://github.com/getsentry/sentry-java/pull/5783))
##### Dependencies
- Bump Native SDK from v0.15.4 to v0.16.0 ([#​5845](https://github.com/getsentry/sentry-java/pull/5845))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0160)
- [diff](https://github.com/getsentry/sentry-native/compare/0.15.4...0.16.0)
### [`v8.50.1`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8501)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.50.0...8.50.1)
##### Fixes
- Pin the published Sentry Android SDK's AAR metadata `minCompileSdk` to our `minSdk` (`21`) instead of AGP 9's new default of the SDK's own `compileSdk` (`37`), so apps that depend on the SDK aren't forced to raise their `compileSdk` ([#​5823](https://github.com/getsentry/sentry-java/pull/5823))
### [`v8.50.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8500)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.49.0...8.50.0)
##### Android 17 support
- We've put Android 17 through a set of rigorous tests. We're now officially giving it the Sentry stamp of compatibility .([#​5796](https://github.com/getsentry/sentry-java/pull/5796))
##### Fixes
- Reduce main-thread work during `Sentry.init` by resolving the shake-detector accelerometer off the main thread (\~1.75ms on a Pixel 10) ([#​5784](https://github.com/getsentry/sentry-java/pull/5784))
- Backfill release, environment, distribution, tags, and app version/build—and use the matching replay-on-error sample rate—for `ApplicationExitInfo` ANR and native crash events captured before SDK initialization, without reusing options cached by a later app update ([#​5762](https://github.com/getsentry/sentry-java/pull/5762))
- `SentryTagModifierNode.isImportantForBounds` now matches the default behavior and returns `true` ([#​5789](https://github.com/getsentry/sentry-java/pull/5789))
- Prevent a `StackOverflowError` when a `beforeSend`, `beforeBreadcrumb`, `beforeSendLog`, or `beforeEnvelope` callback triggers another capture (directly or through a logging integration such as Timber) ([#​5737](https://github.com/getsentry/sentry-java/pull/5737))
- Captures made from within a user callback (event, transaction, breadcrumb, log, envelope, or check-in) are now dropped while that callback runs, instead of recursing. Captures made by event processors are unaffected.
- Replace deprecated `ThrowableProxy` with `LogEvent#getThrown()` in `sentry-log4j2` ([#​5751](https://github.com/getsentry/sentry-java/pull/5751))
##### Dependencies
- Bump Native SDK from v0.15.3 to v0.15.4 ([#​5793](https://github.com/getsentry/sentry-java/pull/5793))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0154)
- [diff](https://github.com/getsentry/sentry-native/compare/0.15.3...0.15.4)
- The SDK is now compiled with Android Gradle Plugin 9.2.1 ([#​5779](https://github.com/getsentry/sentry-java/pull/5779))
### [`v8.49.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8490)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.48.0...8.49.0)
##### Features
- Session Replay: Record segment names (transaction names) ([#​5763](https://github.com/getsentry/sentry-java/pull/5763))
- Add `io.sentry:sentry-opentelemetry-bom` to align Sentry OpenTelemetry modules with tested OpenTelemetry dependencies ([#​5629](https://github.com/getsentry/sentry-java/pull/5629))
- Spring Boot Gradle plugin: add the Sentry BOM to `dependencyManagement`; explicit imports are applied after Spring Boot's implicit BOM
```kotlin
dependencyManagement {
imports {
mavenBom("io.sentry:sentry-opentelemetry-bom:<sentry-version>")
}
}
```
- Gradle: import it as a platform and omit versions from Sentry OpenTelemetry and OpenTelemetry dependencies
```kotlin
implementation(platform("io.sentry:sentry-opentelemetry-bom:<sentry-version>"))
```
- Maven: import it before Spring Boot's BOM in the same `<dependencyManagement>` block, or in the child POM when using `spring-boot-starter-parent`
```xml
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-opentelemetry-bom</artifactId>
<version>${sentry.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
```
##### Fixes
- Session Replay: Fix first recording segment missing for replays in `buffer` mode ([#​5753](https://github.com/getsentry/sentry-java/pull/5753))
- Session Replay: Fix error-to-replay linkage in `buffer` mode ([#​5754](https://github.com/getsentry/sentry-java/pull/5754))
- Prevent logs and metrics from remaining queued after a flush scheduling race ([#​5756](https://github.com/getsentry/sentry-java/pull/5756))
- Fix main thread identification for tombstone (native crash) events ([#​5742](https://github.com/getsentry/sentry-java/pull/5742))
- Prevent malformed JDBC URLs, which may contain credentials, from being printed to stdout ([#​5656](https://github.com/getsentry/sentry-java/pull/5656))
- Restrict JVM-global proxy authentication credentials to challenges from the configured proxy host ([#​5656](https://github.com/getsentry/sentry-java/pull/5656))
- Sanitize Spring 7 and Spring Jakarta WebClient span descriptions to prevent embedded URL credentials from being sent to Sentry ([#​5656](https://github.com/getsentry/sentry-java/pull/5656))
- Respect `tracePropagationTargets` when injecting Sentry tracing headers through the OpenTelemetry OTLP propagator ([#​5656](https://github.com/getsentry/sentry-java/pull/5656))
##### Performance
- Schedule transaction idle/deadline timeouts on a shared, dedicated executor instead of spawning a `Timer` thread per transaction ([#​5670](https://github.com/getsentry/sentry-java/pull/5670))
##### Dependencies
- Bump OpenTelemetry to support Spring Boot 4.1 ([#​5573](https://github.com/getsentry/sentry-java/pull/5573))
- If this causes issues for you because you are also using Spring Boot Dependency Management Plugin (io.spring.dependency-management),
which may downgrade the OpenTelemetry SDK, please have a look at the changelog entry above that explains how to use `sentry-opentelemetry-bom`.
- OpenTelemetry to 1.63.0 (was 1.60.1)
- OpenTelemetry Instrumentation to 2.29.0 (was 2.26.0)
- OpenTelemetry Instrumentation Alpha to 2.29.0-alpha (was 2.26.0-alpha)
- OpenTelemetry Semantic Conventions to 1.42.0 (was 1.40.0)
- OpenTelemetry Semantic Conventions Alpha to 1.42.0-alpha (was 1.40.0-alpha)
- Bump Native SDK from v0.15.2 to v0.15.3 ([#​5728](https://github.com/getsentry/sentry-java/pull/5728))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0153)
- [diff](https://github.com/getsentry/sentry-native/compare/0.15.2...0.15.3)
### [`v8.48.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8480)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.47.0...8.48.0)
##### Features
- Add `Sentry.extendAppStart()`, `Sentry.finishExtendedAppStart()`, and `Sentry.getExtendedAppStartSpan()` to extend the app start measurement past the first frame for extra launch-time work on Android ([#​5604](https://github.com/getsentry/sentry-java/pull/5604))
- Requires standalone app start tracing (`options.isEnableStandaloneAppStartTracing`). Call `extendAppStart()` in `Application.onCreate` after SDK init and `finishExtendedAppStart()` when done:
```kotlin
Sentry.extendAppStart()
// Optionally, retrieve the extended app start span to attach your own child spans
val child = Sentry.getExtendedAppStartSpan()?.startChild("preload", "Preload resources")
// ... extra launch-time work ...
child?.finish()
Sentry.finishExtendedAppStart()
```
- Add `trace_metric_byte` data category and record byte-level client reports when trace metrics are discarded ([#​5626](https://github.com/getsentry/sentry-java/pull/5626))
- Expose sentry-native's heartbeat-based app-hang detection through `SentryAndroidOptions` ([#​5623](https://github.com/getsentry/sentry-java/pull/5623))
- Enable via `setEnableNdkAppHangTracking(true)` (disabled by default) and tune the timeout with `setNdkAppHangTimeoutIntervalMillis(...)` (default `5000` ms), or the `io.sentry.ndk.app-hang.enable` / `io.sentry.ndk.app-hang.timeout-interval-millis` manifest entries
- Intended for hybrid SDKs: emit the heartbeat by calling the native `sentry_app_hang_heartbeat()` from the thread you want monitored. Independent of the JVM-based ANR detection (`setAnrEnabled`)
- Support the `io.sentry.tombstone.report-historical` manifest option to enable historical tombstone reporting via `AndroidManifest.xml` `<meta-data>` ([#​5683](https://github.com/getsentry/sentry-java/pull/5683))
##### Fixes
- Fix `NoSuchMethodError` from using `Math.floorDiv`/`Math.floorMod` overloads that are unavailable on Java 8 ([#​5743](https://github.com/getsentry/sentry-java/pull/5743))
- Fix main thread identification parsing for ApplicationExitInfo ANRs ([#​5733](https://github.com/getsentry/sentry-java/pull/5733))
- Do not send threads without stacktraces for ApplicationExitInfo ANRs ([#​5733](https://github.com/getsentry/sentry-java/pull/5733))
- Record byte-level client reports when event processors discard logs or trace metrics ([#​5718](https://github.com/getsentry/sentry-java/pull/5718))
- Name the device-info caching thread `SentryDeviceInfoCache` so all threads spawned by the SDK are identifiable ([#​5684](https://github.com/getsentry/sentry-java/pull/5684))
- Apply byte-category rate limits to log and trace metric envelope items ([#​5716](https://github.com/getsentry/sentry-java/pull/5716))
##### Performance
- Skip `Hint` allocation in `Scope.addBreadcrumb` when no `beforeBreadcrumb` callback is set ([#​5689](https://github.com/getsentry/sentry-java/pull/5689))
- Speed up scope persistence by detecting the Sentry executor thread via a marker instead of a `Thread.getName()` name scan on every scope mutation ([#​5691](https://github.com/getsentry/sentry-java/pull/5691))
- Remove executor prewarm during SDK init ([#​5681](https://github.com/getsentry/sentry-java/pull/5681))
- The single-threaded `SentryExecutorService` queued the prewarm work ahead of the first useful task, so it could only delay init work, never speed it up; the thread and class loading it warmed are paid identically by the first real task submitted right after.
##### Dependencies
- Bump Native SDK from v0.15.2 to v0.15.3 ([#​5623](https://github.com/getsentry/sentry-java/pull/5623))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0153)
- [diff](https://github.com/getsentry/sentry-native/compare/0.15.2...0.15.3)
### [`v8.47.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8470)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.46.0...8.47.0)
##### Behavioral Changes
- `SentryOkHttpInterceptor::intercept` now throws `IOException`. This is a source-only and Java-only breaking change ([#​5654](https://github.com/getsentry/sentry-java/pull/5654))
##### Fixes
- Fix fragment tracing not working with detach/attach navigation ([#​5660](https://github.com/getsentry/sentry-java/pull/5660))
- Don't start a redundant UI interaction transaction when a transaction is already bound to the Scope ([#​5491](https://github.com/getsentry/sentry-java/issues/5491))
- Previously, `SentryGestureListener` always started a UI transaction and only afterwards skipped binding it to the Scope when a manually-bound transaction already existed, leaving the new transaction to be dropped as an idle transaction without children.
- Fix potential NPE within `Scope.endSession()` ([#​5657](https://github.com/getsentry/sentry-java/pull/5657))
- Fix memory leak in `ReplayIntegration` due to persisting executor not being shut down ([#​5627](https://github.com/getsentry/sentry-java/pull/5627))
- Fix AbstractMethodError when compose-ui 1.11+ is used in combination with `Modifier.sentryTag()` or the Sentry Kotlin compiler plugin ([#​5672](https://github.com/getsentry/sentry-java/pull/5672))
##### Performance
- Speed up touch gesture target detection on deeply nested view hierarchies by hit-testing in local coordinates instead of calling `getLocationOnScreen` per view ([#​5595](https://github.com/getsentry/sentry-java/pull/5595))
- Probe class availability without initializing the class during SDK init ([#​5635](https://github.com/getsentry/sentry-java/pull/5635))
- Avoid constructing an exception per view when resolving view ids during view-hierarchy and gesture capture ([#​5631](https://github.com/getsentry/sentry-java/pull/5631))
- Start the frame metrics thread lazily on first collection instead of during SDK init ([#​5641](https://github.com/getsentry/sentry-java/pull/5641))
- Reduce `SentryId` and `SpanId` allocation overhead by replacing their per-instance `LazyEvaluator` (and its lock) with a lightweight lazily-generated `String`. ([#​5645](https://github.com/getsentry/sentry-java/pull/5645))
- Lazily allocate the `ReentrantLock` backing `AutoClosableReentrantLock` to avoid eager lock allocations for SDK objects that never contend during `SentryAndroid.init` ([#​5643](https://github.com/getsentry/sentry-java/pull/5643))
### [`v8.46.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8460)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.45.0...8.46.0)
##### Fixes
- Session Replay: Fix network detail response body size being unknown for gzip-compressed responses ([#​5592](https://github.com/getsentry/sentry-java/pull/5592))
##### Behavioral Changes
- Collections returned by scope (e.g. `getBreadcrumbs`, `getTags`, `getAttachments`) are shared state and should not be mutated. ([#​5541](https://github.com/getsentry/sentry-java/pull/5541))
- Previously, when going through `CombinedScopeView`, we were returning a copy where mutations didn't show up in the underlying scopes.
- This has now changed in order to reduce SDK overhead.
- `Date` objects returned by SDK data model getters are shared state and should not be mutated. ([#​5603](https://github.com/getsentry/sentry-java/pull/5603))
- Previously, these getters returned defensive copies for some date fields.
- This has now changed in order to reduce SDK overhead.
##### Performance
- Reduce writer buffer size from 8192 to 512 ([#​5544](https://github.com/getsentry/sentry-java/pull/5544))
- Remove redundant event map copies ([#​5536](https://github.com/getsentry/sentry-java/pull/5536))
- Optimize combined scope by adding an early return if only one scope has data ([#​5541](https://github.com/getsentry/sentry-java/pull/5541))
- Reduce model access overhead by avoiding defensive `Date` copies in SDK data model getters. ([#​5603](https://github.com/getsentry/sentry-java/pull/5603))
- Reduce timestamp parsing and formatting overhead with Sentry-specific ISO-8601 handling. ([#​5602](https://github.com/getsentry/sentry-java/pull/5602))
- Reduce JSON serialization overhead by creating the reflection serializer only when unknown-object fallback serialization is needed. ([#​5601](https://github.com/getsentry/sentry-java/pull/5601))
- Reduce JSON serialization overhead by allocating reflection cycle-tracking state only when reflection serialization is used. ([#​5600](https://github.com/getsentry/sentry-java/pull/5600))
- Reduce context serialization overhead by sorting key snapshots with arrays instead of temporary lists. ([#​5599](https://github.com/getsentry/sentry-java/pull/5599))
- Reduce breadcrumb allocation overhead by creating the `Breadcrumb` data map only when data is added. ([#​5598](https://github.com/getsentry/sentry-java/pull/5598))
- Reduce JSON serialization overhead by lowering the initial `JsonWriter` nesting stack size while preserving on-demand growth. ([#​5591](https://github.com/getsentry/sentry-java/pull/5591))
- Reduce timestamp helper overhead by replacing unnecessary `Calendar` usage in `DateUtils` with direct `Date` creation. ([#​5589](https://github.com/getsentry/sentry-java/pull/5589))
- Reduce Android startup overhead by using the default timezone directly on older devices or when no timezone info is available in the locale. ([#​5587](https://github.com/getsentry/sentry-java/pull/5587))
### [`v8.45.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8450)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.44.1...8.45.0)
##### Features
- On Android 15+ (API 35), the standalone `app.start` transaction now reports why the OS started the process via `app.vitals.start.reason` trace data (e.g. `launcher`, `broadcast`, `service`, `content_provider`), derived from `ApplicationStartInfo.getReason()`. You can search and group by this attribute in the Trace Explorer. ([#​5552](https://github.com/getsentry/sentry-java/pull/5552))
##### Fixes
- Use `System.nanoTime()` for cron check-in duration measurement to avoid incorrect durations from wall-clock adjustments ([#​5611](https://github.com/getsentry/sentry-java/pull/5611))
- Fix crash when `getHistoricalProcessStartReasons` is called from an isolated or wrong-userId process ([#​5597](https://github.com/getsentry/sentry-java/pull/5597))
- Release `MediaMuxer` when a replay segment has no encodable frames to avoid a resource leak ([#​5583](https://github.com/getsentry/sentry-java/pull/5583))
##### Dependencies
- Bump Native SDK from v0.15.1 to v0.15.2 ([#​5610](https://github.com/getsentry/sentry-java/pull/5610))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0152)
- [diff](https://github.com/getsentry/sentry-native/compare/0.15.1...0.15.2)
### [`v8.44.1`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8441)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.44.0...8.44.1)
##### Fixes
- Fix `FirstDrawDoneListener` leaking an `OnGlobalLayoutListener` per registration ([#​5567](https://github.com/getsentry/sentry-java/pull/5567))
##### Features
- Add experimental `SentrySQLiteDriver` to `sentry-android-sqlite` for instrumenting `androidx.sqlite.SQLiteDriver` ([#​5563](https://github.com/getsentry/sentry-java/pull/5563))
- To use it, pass `SQLiteDriver` to `SentrySQLiteDriver.create(...)`
- Requires `androidx.sqlite:sqlite` (2.5.0+) on runtime classpath (typically provided by Room or SQLDelight)
##### Dependencies
- Bump Native SDK from v0.15.0 to v0.15.1 ([#​5570](https://github.com/getsentry/sentry-java/pull/5570))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0151)
- [diff](https://github.com/getsentry/sentry-native/compare/0.15.0...0.15.1)
### [`v8.44.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8440)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.43.3...8.44.0)
##### Features
- Add `enableStandaloneAppStartTracing` option to send app start as a standalone transaction instead of attaching it as a child span of the first activity transaction ([#​5342](https://github.com/getsentry/sentry-java/pull/5342))
- Disabled by default; opt in via `options.isEnableStandaloneAppStartTracing = true` or manifest meta-data `io.sentry.standalone-app-start-tracing.enable`
- Emits a transaction named `App Start` with op `app.start`, carrying the existing app start measurements and phase spans (`process.load`, `contentprovider.load`, `application.load`, activity lifecycle spans) as direct children of the root
- The standalone transaction shares the same `traceId` as the first `ui.load` activity transaction so they remain linked in the trace view
- Also covers non-activity starts (broadcast receivers, services, content providers)
##### Improvements
- Reduce boxing to improve performance ([#​5523](https://github.com/getsentry/sentry-java/pull/5523), [#​5527](https://github.com/getsentry/sentry-java/pull/5527), [#​5551](https://github.com/getsentry/sentry-java/pull/5551))
- Replace `Date` with a unix timestamp in `SentryNanotimeDate` to improve performance ([#​5550](https://github.com/getsentry/sentry-java/pull/5550))
- `SentryNanotimeDate` is now marked `@ApiStatus.Internal`. A new `(long unixDateMillis, long nanos)` constructor was added, where `unixDateMillis` is milliseconds since the epoch. The existing `(Date, long)` constructor is retained but deprecated.
##### Dependencies
- Upgrade to asyncProfiler 4.4 ([#​5418](https://github.com/getsentry/sentry-java/pull/5418))
- Bump Native SDK from v0.14.2 to v0.15.0 ([#​5528](https://github.com/getsentry/sentry-java/pull/5528))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0150)
- [diff](https://github.com/getsentry/sentry-native/compare/0.14.2...0.15.0)
##### Fixes
- Fix attachments being duplicated on native events that carry scope attachments ([#​5548](https://github.com/getsentry/sentry-java/pull/5548))
- Fix performance collector scheduling many tasks in a row ([#​5524](https://github.com/getsentry/sentry-java/pull/5524))
### [`v8.43.3`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8433)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.43.2...8.43.3)
##### Fixes
- Fix crash when `getHistoricalProcessStartReasons` is called from an isolated or wrong-userId process ([#​5597](https://github.com/getsentry/sentry-java/pull/5597))
### [`v8.43.2`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8432)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.43.1...8.43.2)
##### Improvements
- Improve SDK init performance by replacing `java.net.URI` with custom string parsing for DSN ([#​5448](https://github.com/getsentry/sentry-java/pull/5448))
- Remove unnecessary boxing to improve performance ([#​5520](https://github.com/getsentry/sentry-java/pull/5520))
##### Fixes
- Session Replay: Fix `VerifyError` in Compose masking under DexGuard/R8 obfuscation ([#​5507](https://github.com/getsentry/sentry-java/pull/5507))
- Session Replay: Fix Compose view masking not working on obfuscated/minified builds ([#​5503](https://github.com/getsentry/sentry-java/pull/5503))
### [`v8.43.1`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8431)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.43.0...8.43.1)
##### Fixes
- Session Replay: Fix replay recording freezing on screens with continuous animations ([#​5489](https://github.com/getsentry/sentry-java/pull/5489))
- Session Replay: Populate `trace_ids` in replay events to enable searching replays by trace ID ([#​5473](https://github.com/getsentry/sentry-java/pull/5473))
### [`v8.43.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8430)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.42.0...8.43.0)
##### Features
- Session Replay: Add `ReplayFrameObserver` for observing captured replay frames ([#​5386](https://github.com/getsentry/sentry-java/pull/5386))
```kotlin
SentryAndroid.init(context) { options ->
options.sessionReplay.frameObserver =
SentryReplayOptions.ReplayFrameObserver { hint, frameTimestamp, screenName ->
val bitmap = hint.getAs(TypeCheckHint.REPLAY_FRAME_BITMAP, Bitmap::class.java)
if (bitmap != null) {
try {
// Process the masked replay frame
myAnalyzer.processFrame(bitmap, frameTimestamp, screenName)
} finally {
bitmap.recycle()
}
}
}
}
```
- Parse ART memory and garbage collector info from ANR tombstones into ART context ([#​5428](https://github.com/getsentry/sentry-java/pull/5428))
### [`v8.42.0`](https://github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#8420)
[Compare Source](https://github.com/getsentry/sentry-java/compare/8.41.0...8.42.0)
##### Features
- Add option to attach raw tombstone protobuf on native crash events ([#​5446](https://github.com/getsentry/sentry-java/pull/5446))
- Enable via `options.isAttachRawTombstone = true` or manifest: `<meta-data android:name="io.sentry.tombstone.attach-raw" android:value="true" />`
- Add API to clear feature flags from scopes ([#​5426](https://github.com/getsentry/sentry-java/pull/5426))
- Add support to configure reporting historical ANRs via `AndroidManifest.xml` using the `io.sentry.anr.report-historical` attribute ([#​5387](https://github.com/getsentry/sentry-java/pull/5387))
##### Dependencies
- Bump Gradle from v9.5.0 to v9.5.1 ([#​5419](https://github.com/getsentry/sentry-java/pull/5419))
- [changelog](https://github.com/gradle/gradle/blob/master/CHANGELOG.md#v951)
- [diff](https://github.com/gradle/gradle/compare/v9.5.0...v9.5.1)
- Bump Native SDK from v0.14.0 to v0.14.2 ([#​5433](https://github.com/getsentry/sentry-java/pull/5433), [#​5441](https://github.com/getsentry/sentry-java/pull/5441))
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0142)
- [diff](https://github.com/getsentry/sentry-native/compare/0.14.0...0.14.2)
- Bump SAGP (Sentry Android Gradle Plugin) from v6.0.0-alpha.6 to v6.6.0 ([#​5427](https://github.com/getsentry/sentry-java/pull/5427))
- [changelog](https://github.com/getsentry/sentry-android-gradle-plugin/blob/main/CHANGELOG.md)
- [diff](https://github.com/getsentry/sentry-android-gradle-plugin/compare/6.0.0-alpha.6...6.6.0)
</details>
<details>
<summary>lysine-dev/okhttp (com.squareup.okhttp3:okhttp-jvm)</summary>
### [`v5.5.1`](https://github.com/lysine-dev/okhttp/blob/HEAD/CHANGELOG.md#Version-551)
*2026_10_22*
- Fix: \[Block 8 compromised eMudhra intermediate certificates]\[Mozilla_eMudhra]. Note that this
update is not necessary for Android devices with Google Play Services as Google has issued an
\[automatic update]\[Google_eMudhra]. This change protects JVMs and AOSP devices that are exposed
to the compromised certificates.
### [`v5.5.0`](https://github.com/lysine-dev/okhttp/blob/HEAD/CHANGELOG.md#Version-550)
*2026-08-16*
This release introduces **opt-in** support for \[Encrypted Client Hello (ECH)]. This new feature
improves user privacy by encrypting domain names in transit. With regular TLS, your coffee shop’s
Wi-Fi router can see that you’re visiting *wikipedia.com*, but it cannot see which page you’re
looking at. With ECH, the router observes only the IP address. This additional privacy is most
effective on sites hosted by big CDNs because the IP address doesn’t imply a particular website.
This requires ECH support in the platform’s TLS stack. Today this is only Android 17 (API 37,
released June 2026). When other TLS stacks add ECH support, we'll integrate them.
ECH took a lot of work to implement because the encryption keys are published over DNS in the
\[HTTPS resource record], and we needed to write new code to fetch these records. This release
includes a major update to OkHttp’s DNS API: it now supports multiple resource record types (not
just IP addresses!), asynchronous streaming results, and in-memory caching.
To opt in, you can use `DnsOverHttps`:
```kotlin
// DnsOverHttps itself uses OkHttpClient. Build both clients upon the
// same bootstrap client so they share a connection pool and dispatcher.
val bootstrapClient = OkHttpClient()
// This sample uses Cloudflare's 1.1.1.1 DnsOverHttps service.
val client = bootstrapClient.newBuilder()
.dns(DnsOverHttps.Builder()
.client(bootstrapClient)
.url("https://1.1.1.1/dns-query".toHttpUrl())
.build())
.build()
```
You could also opt in with our new `AndroidDns` API. Unfortunately, the privacy benefits of ECH are
thwarted because its DNS queries are not encrypted by default.
```kotlin
// AndroidDns fetches the HTTPS DNS resource records necessary for ECH.
val client = OkHttpClient.Builder()
.dns(AndroidDns())
.build()
```
- New: OkHttp artifacts are now signed with our \[new signing key]. This project and three sibling
projects (\[Retrofit], \[Okio], and \[SQLDelight]) recently joined \[the Commonhaus Foundation].
- Fix: MockWebServer’s `@StartStop` annotation now supports `@Nested` JUnit 5 tests.
- Fix: Our default TLS hostname verifier now reject hosts that fail IP canonicalization.
- Fix: Closing a multipart part's sink no longer closes the entire request body.
- Fix: Flush HTTP/1 request bodies before detaching the timeout. We had a bug where timeouts
weren’t applied correctly.
- Fix: Follow \[RFC 1008]'s requirements for HTTP QUERY redirects.
- Fix: Fall back to no proxy when the system proxy selector throws. Previously this would cause
the HTTP call to crash.
- Upgrade: \[Okio 3.18.1]\[okio_3_18_1].
### [`v5.4.0`](https://github.com/lysine-dev/okhttp/blob/HEAD/CHANGELOG.md#Version-540)
*2026-06-08*
- New: Add superpowers to interceptors. Interceptors can now override anything settable on
`OkHttpClient.Builder`, such as the cache, connection pool, socket factory, and DNS. We expect
this will allow most users to use interceptors everywhere, insted of mixing and matching
interceptors with custom `Call.Factory` wrappers.
- Fix: Limit each HTTP/2 response to 256 KiB of total headers.
- Upgrade: \[kotlinx.coroutines 1.11.0]\[coroutines_1_11_0]. This is used by the optional
`okhttp-coroutines` artifact.
- Upgrade: \[GraalVM 25.0.3]\[graalvm_25].
- Upgrade: \[Okio 3.17.0]\[okio_3_17_0].
</details>
<details>
<summary>lavalink-devs/lavaplayer (dev.arbjerg:lavaplayer)</summary>
### [`v2.2.7`](https://github.com/lavalink-devs/lavaplayer/blob/HEAD/CHANGELOG.md#227----2026-07-03)
[Compare Source](https://github.com/lavalink-devs/lavaplayer/compare/2.2.6...2.2.7)
- Fixed Ogg playback position being set to 0 on seek in [`94f9d57`](https://github.com/lavalink-devs/lavaplayer/commit/94f9d5706414ef50b21e92628f212b6e16260302)
- Fixed AAC per-frame decode errors being treated as fatal in [#​192](https://github.com/lavalink-devs/lavaplayer/pull/192)
- Fixed MP4 probing of invalid files causing excessive CPU usage in [#​192](https://github.com/lavalink-devs/lavaplayer/pull/192)
- Fixed the incorrect sha256Hash in `TwitchAudioSourceManager` in [#​190](https://github.com/lavalink-devs/lavaplayer/pull/190)
- Changed the `SoundCloudAudioSourceManager` search prefix public in [#​188](https://github.com/lavalink-devs/lavaplayer/pull/188)
</details>
<details>
<summary>discord-jda/JDA (net.dv8tion:JDA)</summary>
### [`v6.7.0`](https://github.com/discord-jda/JDA/releases/tag/v6.7.0): | Handle Channel Obfuscation
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.6.0...v6.7.0)
### Overview
This release makes JDA aware of [Channel Obfuscation](https://docs.discord.com/developers/change-log#channel-obfuscation-for-users-and-bots), which will become mandatory on **November 16, 2026**.
You can test your bot early by enabling channel obfuscation in the [discord developer portal](https://discord.com/developers/applications/select/bot).
<img width="2088" height="446" alt="image" src="https://github.com/user-attachments/assets/c94cbe57-f7d9-45dc-8122-4031a306554f" />
> \[!WARNING]
> This is a breaking change, which affects permission handling and what will be available to your bot. Please report any bugs / unexpected results you might encounter with JDA behavior.
Channels for interactions will use snapshots of the channel instead, utilizing the [IDetachableEntity](https://docs.jda.wiki/net/dv8tion/jda/api/entities/detached/IDetachableEntity.html) handling previously introduced for user-installed commands. These channels carry the current information about the channel, such as name and topic. They also have the permissions for the member that used the interaction, to allow permission checks to still work as expected for that specific member through `member.hasPermission(channel, permissions)`.
#### Breaking Changes
- Add handling for obfuscated channels by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​3042](https://github.com/discord-jda/JDA/pull/3042)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.6.0...v6.7.0>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.7.0")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.7.0</version>
</dependency>
```
### [`v6.6.0`](https://github.com/discord-jda/JDA/releases/tag/v6.6.0)
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.5.0...v6.6.0)
### Overview
This is a minor release adding a few new features before a bigger change coming in 6.7.0 which will introduce handling for [Obfuscated Channels](https://github.com/discord/discord-api-docs/pull/8454).
If you can, please try out and give feedback on [**Add handling for obfuscated channels #​3042**](https://github.com/discord-jda/JDA/pull/3042). To enable obfuscated channels early for testing purposes, you can toggle a switch in your application dashboard as described [here](https://github.com/discord/discord-api-docs/pull/8454).
#### New Features
- Add file type filtering in slash command attachment options and modal attachment uploads by [@​freya022](https://github.com/freya022) in [#​3113](https://github.com/discord-jda/JDA/pull/3113)
- Add support for guild member banners by [@​Whizyyy](https://github.com/Whizyyy) in [#​3126](https://github.com/discord-jda/JDA/pull/3126)
#### Changes
- Make LabelChildComponent replaceable by [@​Kaktushose](https://github.com/Kaktushose) in [#​3128](https://github.com/discord-jda/JDA/pull/3128)
- Read `flags_new` of `ApplicationInfo` instead of `flags` by [@​freya022](https://github.com/freya022) in [#​3131](https://github.com/discord-jda/JDA/pull/3131)
- Guild member pruning: Check for admin if `PRUNE_REQUIRES_ADMIN` is enabled by [@​freya022](https://github.com/freya022) in [#​3129](https://github.com/discord-jda/JDA/pull/3129)
- Update `Message.MAX_FILE_SIZE` to 20 MiB by [@​freya022](https://github.com/freya022) in [#​3142](https://github.com/discord-jda/JDA/pull/3142)
#### Bug Fixes
- Fix `MarkdownUtil#monospace` not correctly applying monospace formatting to strings with backticks by [@​ManosSef](https://github.com/ManosSef) in [#​3139](https://github.com/discord-jda/JDA/pull/3139)
- Fix icon URLs for GIF stickers by [@​jjj-n](https://github.com/jjj-n) in [#​3140](https://github.com/discord-jda/JDA/pull/3140)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.5.0...v6.6.0>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.6.0")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.6.0</version>
</dependency>
```
### [`v6.5.0`](https://github.com/discord-jda/JDA/releases/tag/v6.5.0): | Message Search API
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.4.2...v6.5.0)
### Overview
This release adds support for the [Message Search API](https://docs.discord.com/developers/change-log#search-guild-messages), which allows bots to search messages in a guild. See [Guild#searchMessages](https://docs.jda.wiki/net/dv8tion/jda/api/entities/Guild.html#searchMessages\(\)) and [MessageSearchAction](https://docs.jda.wiki/net/dv8tion/jda/api/requests/restaction/MessageSearchAction.html) for detailed documentation.
**Example**:
```java
guild.searchMessages()
.attachmentFilenames("cat.png")
.includeAuthorTypes(MessageSearchAction.AuthorType.USER)
.queue(response -> {
if (response.isNotReady()) {
int retryAfter = response.asNotReady().getRetryAfter();
event.reply("The server is still indexing messages, try again later").queue();
return;
}
List<Message> messages = response.asResults().getMessages();
event.reply("Found %s messages of cats!".formatted(messages.size())).queue();
});
```
Additionally, we made a minor change in the handling for received messages. For messages received in guilds JDA now handles events with missing `member` objects, which is necessary to handle messages that arrive shortly after a user is banned from the guild. These messages will contain members which are not added to cache and have no roles.
#### New Features
- Add message search by [@​freya022](https://github.com/freya022) in [#​3052](https://github.com/discord-jda/JDA/pull/3052)
- Add attachment flags by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​3109](https://github.com/discord-jda/JDA/pull/3109)
- Add support for image descriptions in embeds by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​310](https://github.com/discord-jda/JDA/pull/310)
#### Changes
- Handle messages received after ban by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​3103](https://github.com/discord-jda/JDA/pull/3103)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.4.2...v6.5.0>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.5.0")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.5.0</version>
</dependency>
```
### [`v6.4.2`](https://github.com/discord-jda/JDA/releases/tag/v6.4.2)
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.4.1...v6.4.2)
#### New Features
- Add attachment flags, embed flags and fields, and, media flags by [@​freya022](https://github.com/freya022) in [#​3081](https://github.com/discord-jda/JDA/pull/3081)
- Add missing `NO_MUTUAL_GUILDS` ErrorResponse by [@​srnyx](https://github.com/srnyx) in [#​3083](https://github.com/discord-jda/JDA/pull/3083)
- Add `ErrorResponse#CANNOT_FORWARD_UNREADABLE_MESSAGE` by [@​freya022](https://github.com/freya022) in [#​3087](https://github.com/discord-jda/JDA/pull/3087)
#### Changes
- Improve error messages caused by entities relying on the cache to find themselves by [@​freya022](https://github.com/freya022) in [#​3067](https://github.com/discord-jda/JDA/pull/3067)
- Component options: Prevent setting an out-of-range number of default values by [@​freya022](https://github.com/freya022) in [#​3068](https://github.com/discord-jda/JDA/pull/3068)
- Fix deserialization of components without unfurled media by [@​freya022](https://github.com/freya022) in [#​3078](https://github.com/discord-jda/JDA/pull/3078)
#### Bug Fixes
- Fix Guild#invalidate not removing thread channels from global cache by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​3094](https://github.com/discord-jda/JDA/pull/3094)
- Fix incorrect ID used in AbstractGuildChannelImpl#getGuild for entity parent refresh by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​3095](https://github.com/discord-jda/JDA/pull/3095)
- Fix incorrect check for choice value length by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​3096](https://github.com/discord-jda/JDA/pull/3096)
- fix: handle integer sound ids in voice channel effects by [@​rxsto](https://github.com/rxsto) in [#​3085](https://github.com/discord-jda/JDA/pull/3085)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.4.1...v6.4.2>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.4.2")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.4.2</version>
</dependency>
```
</details>
---
### Configuration
📅 **Schedule**: (in timezone America/Toronto)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNTEuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjE4Mi4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->
anthorob
was assigned by renovate-bot2026-10-25 22:04:31 -04:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR contains the following updates:
3.9.15→3.10.02.14.0→2.15.06.2.0→6.3.08.41.0→8.62.05.3.2→5.5.12.2.6→2.2.76.4.1→6.7.03.5.0→3.5.13.5.5→3.6.1Release Notes
apache/maven (maven)
v3.10.0: 3.10.0Compare Source
🚀 New features and improvements
🐛 Bug Fixes
📝 Documentation updates
👻 Maintenance
GraphLoggerwithDependencyGraphDumperin dependency resolution (#12639) @slawekjaranowski🔧 Build
📦 Dependency updates
v3.9.16: 3.9.16Compare Source
🐛 Bug Fixes
threadConfigurationto accept input surrounded with spaces (#12042) @slawekjaranowski📦 Dependency updates
gitlab4j/gitlab4j-api (org.gitlab4j:gitlab4j-api)
v6.3.0Compare Source
What's Changed
ci_pipeline_variables_minimum_override_rolein updateProject by @nikitaBarkov in #1303New Contributors
Full Changelog: https://github.com/gitlab4j/gitlab4j-api/compare/6.2.0...6.3.0
getsentry/sentry-java (io.sentry:sentry)
v8.62.0Compare Source
Improvements
SentryNavEffect(#6305)Fixes
NullPointerException: Cannot invoke "String.length()") when dexing the SDK with AGP 8.0 and older, a regression from 8.61.1 (#6356)v8.61.1Compare Source
Fixes
SIGABRTon the RenderThread) when stopping a replay that uses the canvas screenshot strategy (#6342)stop()is called right afterflush()in buffer mode (#6340)sentry.io), not to self-hosted Sentry, not to any other connection your app makes, and not if you set your ownSentryOptions.setSslSocketFactory.eglDestroySurface(#6282)Internal
ScreenshotUtils.takeMaskedScreenshotso Hybrid SDKs can capture screenshots masked according toSentryAndroidOptions.getScreenshot()(#6281)Dependencies
v8.61.0Compare Source
Fixes
beforeSend*callback throws and report it usingDiscardReason.CALLBACK_ERROR.tracesSamplerthrows instead of inheriting the parent sampling decision or falling back totracesSampleRate(#6163).beforeSpanthrows without disrupting requests, covering OkHttp, OpenFeign, GraphQL, Ktor, and Apollo—including Apollo 5 (#6167, #6238).callback_errorwhen a customer event processor throws instead of continuing with a potentially partially processed item. SDK-owned processor failures are logged and processing continues.beforeBreadcrumbthrows instead of storing exception details on the breadcrumb.TransactionNameProviderthrows, falling back to<unlabeled transaction>(#6241).SentryUserProviderthrows and overwrite the user with an empty user object (#6240).profilesSamplerthrows instead of falling back toprofilesSampleRateor inheriting the parent profiling decision (#6164).callback_errorin client reports andOnDiscardCallback(#6166).beforeErrorSamplingthrows while retaining the error event (#6165).Internal
SentryOptionsinstead of a static singleton (#6117)Dependencies
v8.60.0Compare Source
Features
sentry-android-navigation3library (#6233)SentryNavEffectto record navigation transactions, breadcrumbs, screen names, and additional context as your nav back stack changes.device.connection_effective_type, for example4gor5g(#6146)Dependencies
v8.59.0Compare Source
Breaking Changes
Sentry.logger()andSentry.metrics()calls regardless ofoptions.getLogs().isEnabled()andoptions.getMetrics().isEnabled()(#6184)options.getLogs().isEnabled()istrue.options.getMetrics().setEnabled(...)currently has no effect because there are no automatic Metrics integrations. Both enable options will be removed in the upcoming major release, and each logging integration will then have a separate opt-in flag.options.getLogs().setBeforeSend(...)andoptions.getMetrics().setBeforeSend(...)to filter manually emitted telemetry. Returnnullfrom either callback to drop it.Fixes
Features
sendDefaultPiiin favor ofdataCollectionahead of its removal in 9.0 (#6158)SentryAndroidOptions.setTombstoneMergeTimeThresholdMillisand theio.sentry.tombstone.merge-time-threshold-millismanifest option (#6154)sentry-apollo-5integration for Apollo Kotlin 5, providing HTTP tracing and failed GraphQL request reporting (#6074)Fixes
Improvements
MemoryLimiterapp exits recorded asApplicationExitInfo.REASON_MEMORY_LIMITER(#6174)Dependencies
v8.58.0Compare Source
Features
LocalSentrySpantosentry-composeso apps can provide a parentISpanto a composable subtree and have nestedSentryTracedspans attach to it ([#6112]#6112)dataCollection, a fine-grained replacement forsendDefaultPii, for controlling data collected automatically by SDK integrations. See the Data Collection documentation for Android, Java, and Spring Boot (#5759)Fixes
META-INF/MANIFEST.MFfiles during version detection so that the SDK no longer keeps jar file handles open for the life of the process (#6124EventListenerwrapped bySentryOkHttpEventListenerperCall(#6003)v8.57.0Compare Source
Behavioral Changes
Features
MemoryLimiterapp exits recovered fromApplicationExitInfo(#6111).sentry-log4j2is on the classpath and Log4j2 Core is the active logging backend (#5403)INFO:ERROR:INFO:sentry-log4j2is on the classpath and Log4j2 Core is the active logging backend (#6072)sentry.logging.enabled=true)Fixes
wsandwssURL parsing for WebSocket instrumentation (#6064)Sentry.close()or a re-init. Closing the SDK shut down the shared hostname cache for the life of the process, soserver_namesilently froze at the value it had last resolved (#6119)Internal
RateLimiter(ICurrentDateProvider, SentryOptions)in favor ofRateLimiter(SentryOptions), whose backoff is measured on a monotonic ticker (#6030)AndroidCurrentDateProvider.getInstance()in favor ofMonotonicTicker, which counts time spent in deep sleep and cannot be confused with the epoch-basedCurrentDateProvider(#6103)v8.56.0Compare Source
Fixes
SentryTracedso that it now honorsoptions.setIgnoredSpanOrigins(#6058)SentryTracednow checks for its owning transaction dynamically rather than once per app process. The latter causedSentryTracedspans to be dropped process-wide once the original transaction finished (#6057)GrahQLtoGraphQL) (#6061)SentryTracedfrom producing dangling spans if recomposition is abandoned or drawing fails (#6049)contexts.appand theapp.startspan attributes (#6006)Improvements
ui.composespan perSentryTracedon initial composition instead of one on every recomposition, and set the origin onui.renderspans (#6051)Internal
MonotonicTickerabstraction withDeadlineandStopwatchprimitives (#6028)Timestamp,EpochClockandAnchoredClock, so related instants project from one wall-clock reading instead of each reading the clock (#6045)Dependencies
v8.55.0Compare Source
Features
Session.State.Unhandledfor unhandled errors that do not terminate the process (#5919)Improvements
Fixes
Sentry.withScopeandSentry.withIsolationScopedata to events captured inside the callback whenglobalHubModeis enabled (#6004)globalHubModeis enabled by default on Android, where tags, extras, contexts and level set inside the callback were silently droppedSentry.setCurrentScopesor theSentryContextcoroutine integration, are now also honoured whenglobalHubModeis enabledSentry.pushScope,Sentry.pushIsolationScopeandSentry.popScoperemain no-ops whenglobalHubModeis enabledprofiler_idfrom transactions and spans when no Perfetto profile covers them, e.g. when Android'sProfilingManagerrate limits the profiling request (#6015)Internal
InternalSentrySdk.captureEnvelopeNonTerminatingfor hybrid SDKs (e.g. Flutter) so unhandled exceptions that don't terminate the process no longer end the session ascrashed(#5921)InternalSentrySdk.updateSessionForDroppedEventNonTerminatingso hybrid SDKs can still update the session when an error is dropped by sampling (#5990)Dependencies
v8.54.0Compare Source
Features
app.vitals.start.screenandapp.vitals.start.typeon standaloneapp.startchildren (#6005)SentryFeedbackOptions.setEnableAttachScreenshot(false)or theio.sentry.feedback.enable-attach-screenshotmanifest flag.androidx.activity>=1.8.2dependencySentry.replay()(#5978)start()andstartBuffering()calls bypass the configured replay sample rates; sampling still controls automatic startup.start()starts a full-session replay and does nothing if one is already recording.startBuffering()keeps a rolling buffer that is sent onflush()or an error, then continues in session mode.stop()ends the current replay; the nextstart()creates a new replay session.pause()suspends recording untilresume()and remains paused across background and foreground transitions and automatic replay restarts in the same process.resume()continues the same manually paused replay.flush()sends the current replay data, or starts a full-session replay when recording is stopped.Fixes
null.prefix before default-package class names when parsing Java and JNI frames from Android ANR thread dumps (#5979)Performance
Dependencies
v8.53.0Compare Source
Features
ISpan(#5929)ISpan.startChildoverloads withSpanOptionspublic (#5927)Sentry.feedback().enableOnShake(),Sentry.feedback().disableOnShake(), andSentry.feedback().isOnShakeEnabled()to toggle and query shake-to-report at runtime (#5827)Improvements
ApiStatus.Experimentalannotation fromSentrySQLiteDriver(#5938)Fixes
Scope.clear()(#5902)Throwableidentities when R8 optimizes Android apps (#5881)Performance
Process.getElapsedCpuTime()instead of parsing/proc/self/stat(33.6kB to 16 bytes per sample on a Pixel 3) (#5926)Dependencies
v8.52.0Compare Source
Fixes
ClientReportRecordernow reads the item count from the envelope item header instead of deserializing the payload, which under sustained rate limiting could pin CPU cores while repeatedly throwing exceptionsISentryExecutorServiceas cancelled (#5874)NoOpSentryExecutorServicepreviously returned aFuturethat was never run and never cancelled, so callers could not tell a dropped task from a queued one andget()would block until its timeoutPerformance
SentryFrameMetricsCollectorduringSentry.init(#5886)shutdownTimeoutMilliswhen closing the SDK with a pending transaction timeout or session-end task (#5851)RGB_565instead ofARGB_8888for screenshot and replay capture bitmaps, halving per-frame memory usage (#5821)SentryPerformanceProvider, which was allocated on every cold start inContentProvider.onCreatewithout ever being acquired (#5871)HostnameCacheworker thread now times out while idle instead of staying alive for the whole process lifetime (#5817)Dependencies
v8.51.0Compare Source
Features
ProfilingManager(Perfetto) for continuous profiling on API 35+ devices (#5251)ProfilingManagerwith Perfetto-based stack sampling, providing lower-overhead and more accurate profiles. No configuration change is required.Debug-based profiler.enableLegacyProfilingoption (defaulttrue) to disable the legacyDebug-based profiler. Setting it tofalsedisables continuous profiling on API < 35 devices as well as transaction-based profiling (profilesSampleRate/profilesSampler) on all devices, since transaction-based profiling is not supported by Perfetto.io.sentry.profiling.enable-legacy-profilingmanifest flag.Behavioral Changes
Sentry.init(#5792)SentryOptions.getOutboxPath()andSentryOptions.getCacheDirPath()are not guaranteed to exist onceSentry.initreturns.captureEnvelope— create the directory first, e.g.new File(outboxPath).mkdirs().Improvements
Fixes
checkCanRecordruns on the replay executor thread (#5837)MediaMuxerwhen the replay video encoder fails to start to avoid a resource leak (#5607)androidinstead ofjava) on ANR profile chunks so they are billed as UI Profile Hours rather than Continuous Profile Hours (#5836)ratelimit_backoffdiscarded events in client reports, so they no longer disappear from drop statistics. One event is recorded per buffer flush rather than per segment.Performance
mkdirs()calls off the init (main) thread (#5792)LifecycleWatchernow schedules the session-end task on the shared timer executor instead of creating a dedicatedjava.util.Timerthread (#5819)RateLimiternow schedules its rate-limit-lifted notifications on the shared timer executor instead of creating a dedicatedjava.util.Timerthread (#5814)Dependencies
v8.50.1Compare Source
Fixes
minCompileSdkto ourminSdk(21) instead of AGP 9's new default of the SDK's owncompileSdk(37), so apps that depend on the SDK aren't forced to raise theircompileSdk(#5823)v8.50.0Compare Source
Android 17 support
Fixes
Sentry.initby resolving the shake-detector accelerometer off the main thread (~1.75ms on a Pixel 10) (#5784)ApplicationExitInfoANR and native crash events captured before SDK initialization, without reusing options cached by a later app update (#5762)SentryTagModifierNode.isImportantForBoundsnow matches the default behavior and returnstrue(#5789)StackOverflowErrorwhen abeforeSend,beforeBreadcrumb,beforeSendLog, orbeforeEnvelopecallback triggers another capture (directly or through a logging integration such as Timber) (#5737)ThrowableProxywithLogEvent#getThrown()insentry-log4j2(#5751)Dependencies
v8.49.0Compare Source
Features
Session Replay: Record segment names (transaction names) (#5763)
Add
io.sentry:sentry-opentelemetry-bomto align Sentry OpenTelemetry modules with tested OpenTelemetry dependencies (#5629)dependencyManagement; explicit imports are applied after Spring Boot's implicit BOM<dependencyManagement>block, or in the child POM when usingspring-boot-starter-parentFixes
buffermode (#5753)buffermode (#5754)tracePropagationTargetswhen injecting Sentry tracing headers through the OpenTelemetry OTLP propagator (#5656)Performance
Timerthread per transaction (#5670)Dependencies
which may downgrade the OpenTelemetry SDK, please have a look at the changelog entry above that explains how to use
sentry-opentelemetry-bom.v8.48.0Compare Source
Features
Add
Sentry.extendAppStart(),Sentry.finishExtendedAppStart(), andSentry.getExtendedAppStartSpan()to extend the app start measurement past the first frame for extra launch-time work on Android (#5604)options.isEnableStandaloneAppStartTracing). CallextendAppStart()inApplication.onCreateafter SDK init andfinishExtendedAppStart()when done:Add
trace_metric_bytedata category and record byte-level client reports when trace metrics are discarded (#5626)Expose sentry-native's heartbeat-based app-hang detection through
SentryAndroidOptions(#5623)setEnableNdkAppHangTracking(true)(disabled by default) and tune the timeout withsetNdkAppHangTimeoutIntervalMillis(...)(default5000ms), or theio.sentry.ndk.app-hang.enable/io.sentry.ndk.app-hang.timeout-interval-millismanifest entriessentry_app_hang_heartbeat()from the thread you want monitored. Independent of the JVM-based ANR detection (setAnrEnabled)Support the
io.sentry.tombstone.report-historicalmanifest option to enable historical tombstone reporting viaAndroidManifest.xml<meta-data>(#5683)Fixes
NoSuchMethodErrorfrom usingMath.floorDiv/Math.floorModoverloads that are unavailable on Java 8 (#5743)SentryDeviceInfoCacheso all threads spawned by the SDK are identifiable (#5684)Performance
Hintallocation inScope.addBreadcrumbwhen nobeforeBreadcrumbcallback is set (#5689)Thread.getName()name scan on every scope mutation (#5691)SentryExecutorServicequeued the prewarm work ahead of the first useful task, so it could only delay init work, never speed it up; the thread and class loading it warmed are paid identically by the first real task submitted right after.Dependencies
v8.47.0Compare Source
Behavioral Changes
SentryOkHttpInterceptor::interceptnow throwsIOException. This is a source-only and Java-only breaking change (#5654)Fixes
SentryGestureListeneralways started a UI transaction and only afterwards skipped binding it to the Scope when a manually-bound transaction already existed, leaving the new transaction to be dropped as an idle transaction without children.Scope.endSession()(#5657)ReplayIntegrationdue to persisting executor not being shut down (#5627)Modifier.sentryTag()or the Sentry Kotlin compiler plugin (#5672)Performance
getLocationOnScreenper view (#5595)SentryIdandSpanIdallocation overhead by replacing their per-instanceLazyEvaluator(and its lock) with a lightweight lazily-generatedString. (#5645)ReentrantLockbackingAutoClosableReentrantLockto avoid eager lock allocations for SDK objects that never contend duringSentryAndroid.init(#5643)v8.46.0Compare Source
Fixes
Behavioral Changes
getBreadcrumbs,getTags,getAttachments) are shared state and should not be mutated. (#5541)CombinedScopeView, we were returning a copy where mutations didn't show up in the underlying scopes.Dateobjects returned by SDK data model getters are shared state and should not be mutated. (#5603)Performance
Datecopies in SDK data model getters. (#5603)Breadcrumbdata map only when data is added. (#5598)JsonWriternesting stack size while preserving on-demand growth. (#5591)Calendarusage inDateUtilswith directDatecreation. (#5589)v8.45.0Compare Source
Features
app.starttransaction now reports why the OS started the process viaapp.vitals.start.reasontrace data (e.g.launcher,broadcast,service,content_provider), derived fromApplicationStartInfo.getReason(). You can search and group by this attribute in the Trace Explorer. (#5552)Fixes
System.nanoTime()for cron check-in duration measurement to avoid incorrect durations from wall-clock adjustments (#5611)getHistoricalProcessStartReasonsis called from an isolated or wrong-userId process (#5597)MediaMuxerwhen a replay segment has no encodable frames to avoid a resource leak (#5583)Dependencies
v8.44.1Compare Source
Fixes
FirstDrawDoneListenerleaking anOnGlobalLayoutListenerper registration (#5567)Features
SentrySQLiteDrivertosentry-android-sqlitefor instrumentingandroidx.sqlite.SQLiteDriver(#5563)SQLiteDrivertoSentrySQLiteDriver.create(...)androidx.sqlite:sqlite(2.5.0+) on runtime classpath (typically provided by Room or SQLDelight)Dependencies
v8.44.0Compare Source
Features
enableStandaloneAppStartTracingoption to send app start as a standalone transaction instead of attaching it as a child span of the first activity transaction (#5342)options.isEnableStandaloneAppStartTracing = trueor manifest meta-dataio.sentry.standalone-app-start-tracing.enableApp Startwith opapp.start, carrying the existing app start measurements and phase spans (process.load,contentprovider.load,application.load, activity lifecycle spans) as direct children of the roottraceIdas the firstui.loadactivity transaction so they remain linked in the trace viewImprovements
Datewith a unix timestamp inSentryNanotimeDateto improve performance (#5550)SentryNanotimeDateis now marked@ApiStatus.Internal. A new(long unixDateMillis, long nanos)constructor was added, whereunixDateMillisis milliseconds since the epoch. The existing(Date, long)constructor is retained but deprecated.Dependencies
Fixes
v8.43.3Compare Source
Fixes
getHistoricalProcessStartReasonsis called from an isolated or wrong-userId process (#5597)v8.43.2Compare Source
Improvements
java.net.URIwith custom string parsing for DSN (#5448)Fixes
VerifyErrorin Compose masking under DexGuard/R8 obfuscation (#5507)v8.43.1Compare Source
Fixes
trace_idsin replay events to enable searching replays by trace ID (#5473)v8.43.0Compare Source
Features
Session Replay: Add
ReplayFrameObserverfor observing captured replay frames (#5386)Parse ART memory and garbage collector info from ANR tombstones into ART context (#5428)
v8.42.0Compare Source
Features
options.isAttachRawTombstone = trueor manifest:<meta-data android:name="io.sentry.tombstone.attach-raw" android:value="true" />AndroidManifest.xmlusing theio.sentry.anr.report-historicalattribute (#5387)Dependencies
lysine-dev/okhttp (com.squareup.okhttp3:okhttp-jvm)
v5.5.12026_10_22
update is not necessary for Android devices with Google Play Services as Google has issued an
[automatic update][Google_eMudhra]. This change protects JVMs and AOSP devices that are exposed
to the compromised certificates.
v5.5.02026-08-16
This release introduces opt-in support for [Encrypted Client Hello (ECH)]. This new feature
improves user privacy by encrypting domain names in transit. With regular TLS, your coffee shop’s
Wi-Fi router can see that you’re visiting wikipedia.com, but it cannot see which page you’re
looking at. With ECH, the router observes only the IP address. This additional privacy is most
effective on sites hosted by big CDNs because the IP address doesn’t imply a particular website.
This requires ECH support in the platform’s TLS stack. Today this is only Android 17 (API 37,
released June 2026). When other TLS stacks add ECH support, we'll integrate them.
ECH took a lot of work to implement because the encryption keys are published over DNS in the
[HTTPS resource record], and we needed to write new code to fetch these records. This release
includes a major update to OkHttp’s DNS API: it now supports multiple resource record types (not
just IP addresses!), asynchronous streaming results, and in-memory caching.
To opt in, you can use
DnsOverHttps:You could also opt in with our new
AndroidDnsAPI. Unfortunately, the privacy benefits of ECH arethwarted because its DNS queries are not encrypted by default.
projects ([Retrofit], [Okio], and [SQLDelight]) recently joined [the Commonhaus Foundation].
@StartStopannotation now supports@NestedJUnit 5 tests.weren’t applied correctly.
the HTTP call to crash.
v5.4.02026-06-08
OkHttpClient.Builder, such as the cache, connection pool, socket factory, and DNS. We expectthis will allow most users to use interceptors everywhere, insted of mixing and matching
interceptors with custom
Call.Factorywrappers.okhttp-coroutinesartifact.lavalink-devs/lavaplayer (dev.arbjerg:lavaplayer)
v2.2.7Compare Source
94f9d57TwitchAudioSourceManagerin #190SoundCloudAudioSourceManagersearch prefix public in #188discord-jda/JDA (net.dv8tion:JDA)
v6.7.0: | Handle Channel ObfuscationCompare Source
Overview
This release makes JDA aware of Channel Obfuscation, which will become mandatory on November 16, 2026.
You can test your bot early by enabling channel obfuscation in the discord developer portal.
Channels for interactions will use snapshots of the channel instead, utilizing the IDetachableEntity handling previously introduced for user-installed commands. These channels carry the current information about the channel, such as name and topic. They also have the permissions for the member that used the interaction, to allow permission checks to still work as expected for that specific member through
member.hasPermission(channel, permissions).Breaking Changes
Full Changelog: https://github.com/discord-jda/JDA/compare/v6.6.0...v6.7.0
Installation
Gradle
Maven
v6.6.0Compare Source
Overview
This is a minor release adding a few new features before a bigger change coming in 6.7.0 which will introduce handling for Obfuscated Channels.
If you can, please try out and give feedback on Add handling for obfuscated channels #3042. To enable obfuscated channels early for testing purposes, you can toggle a switch in your application dashboard as described here.
New Features
Changes
flags_newofApplicationInfoinstead offlagsby @freya022 in #3131PRUNE_REQUIRES_ADMINis enabled by @freya022 in #3129Message.MAX_FILE_SIZEto 20 MiB by @freya022 in #3142Bug Fixes
MarkdownUtil#monospacenot correctly applying monospace formatting to strings with backticks by @ManosSef in #3139Full Changelog: https://github.com/discord-jda/JDA/compare/v6.5.0...v6.6.0
Installation
Gradle
Maven
v6.5.0: | Message Search APICompare Source
Overview
This release adds support for the Message Search API, which allows bots to search messages in a guild. See Guild#searchMessages and MessageSearchAction for detailed documentation.
Example:
Additionally, we made a minor change in the handling for received messages. For messages received in guilds JDA now handles events with missing
memberobjects, which is necessary to handle messages that arrive shortly after a user is banned from the guild. These messages will contain members which are not added to cache and have no roles.New Features
Changes
Full Changelog: https://github.com/discord-jda/JDA/compare/v6.4.2...v6.5.0
Installation
Gradle
Maven
v6.4.2Compare Source
New Features
NO_MUTUAL_GUILDSErrorResponse by @srnyx in #3083ErrorResponse#CANNOT_FORWARD_UNREADABLE_MESSAGEby @freya022 in #3087Changes
Bug Fixes
Full Changelog: https://github.com/discord-jda/JDA/compare/v6.4.1...v6.4.2
Installation
Gradle
Maven
Configuration
📅 Schedule: (in timezone America/Toronto)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR has been generated by Mend Renovate CLI.
20f69dc8cftoaf74b0460eaf74b0460etoa188ebee5cView command line instructions
Checkout
From your project repository, check out a new branch and test the changes.