Configuration — Overview
This page is the canonical reference for every core SDK option recognised by the 7.0 Android SDK. Options from extension modules live on their own pages — see NDK options and Leak options.
Two configuration channels
Every Bugsee SDK option can be set in two equivalent ways. The literal string key is identical in both — no prefix conversion. The two channels are mutually exclusive rather than merged: passing a Map<String, Object> to Bugsee.launch(...) programmatically short-circuits the manifest auto-init path entirely, and any option absent from the map falls back to its registered default — not to the manifest value. If you mix channels, treat the manifest as your defaults and the programmatic map as a full override.
AndroidManifest.xml<meta-data>entries — recommended when you use the SDK's auto-init path (app token in the manifest, no programmaticlaunchcall). Under<application>:<meta-data android:name="com.bugsee.option.<group>.<name>"android:value="..." />Map<String, Object>passed toBugsee.launch(...)— required when you want runtime / per-flavor control. Keys come from theOptionsinterface; values are typed (boolean / int / float / String / enum):HashMap<String, Object> options = new HashMap<>();options.put(Options.SomeKey, value);Bugsee.launch(this, "<APP_TOKEN>", options);
General
Options constant | Manifest key | Type | Default | Description |
|---|---|---|---|---|
Duration | com.bugsee.option.config.duration | int (seconds) | 60 | Maximum length of the cyclical capture buffer (video, logs, breadcrumbs); older data rolls off once the window is full. |
WifiOnlyUpload | com.bugsee.option.config.wifi-only-upload | boolean | false | Defer report uploads until the device is on Wi-Fi. |
ReportProcessingInProcess | com.bugsee.option.config.report-processing-in-process | boolean | true | When true, report export and upload run in-process on background threads; when false they go through Android's JobScheduler so they survive process death, at the cost of upload latency. |
ReportHandlerCallbackTimeout | com.bugsee.option.config.report-handler-callback-timeout | int (seconds) | 30 | How long to wait for a ReportHandler completion callback before auto-firing it so the report isn't lost. 0 disables the timeout. Not applied to terminating (crash) sequences. |
Duration caps the cyclical capture buffer (video, logs, breadcrumbs) at the given number of seconds. WifiOnlyUpload defers report uploads until Wi-Fi. ReportProcessingInProcess = false routes report processing through JobScheduler so it survives process death (at the cost of upload latency). ReportHandlerCallbackTimeout = 0 disables the timeout — but it doesn't apply to crash sequences.
- AndroidManifest.xml
- Programmatic
<meta-data android:name="com.bugsee.option.config.duration"
android:value="60" />
<meta-data android:name="com.bugsee.option.config.wifi-only-upload"
android:value="true" />
HashMap<String, Object> options = new HashMap<>();
options.put(Options.Duration, 60);
options.put(Options.WifiOnlyUpload, true);
Bugsee.launch(this, "<APP_TOKEN>", options);
Detection
The full set of detection options is documented on each detector's own page in Issue detection. The table below is the option reference.
Options constant | Manifest key | Type | Default | Description |
|---|---|---|---|---|
DetectAndReportCrash | com.bugsee.option.detect.crash | boolean | true | Catch unhandled Java/Kotlin exceptions and report them as crashes. |
DetectAndReportEarlyCrash | com.bugsee.option.detect.early-crash | boolean | false | Also catch crashes that happen very early in startup, before the SDK is fully attached. |
DetectAndReportHang | com.bugsee.option.detect.hang | boolean | false | Detect and report when the main (UI) thread is blocked long enough to count as a hang. |
DetectAndReportHangFairLevel | com.bugsee.option.detect.hang.level.fair | int (ms) | 3000 | Main-thread block duration that triggers a "Fair"-severity hang report. Must be smaller than the Medium level; detection resolution is roughly 1 s. |
DetectAndReportHangMediumLevel | com.bugsee.option.detect.hang.level.medium | int (ms) | 5000 | Main-thread block duration that triggers a "Medium"-severity hang report. Must sit between the Fair and Severe levels. |
DetectAndReportHangSevereLevel | com.bugsee.option.detect.hang.level.severe | int (ms) | 10000 | Main-thread block duration that triggers a "Severe"-severity hang report. Must be greater than the Medium level. |
DetectAndReportMainThreadMisuse | com.bugsee.option.detect.main_thread_misuse | boolean | false | Report file I/O, network, database, or SharedPreferences operations performed on the main thread. |
DetectAndReportAnomaly | com.bugsee.option.detect.anomaly | boolean | false | Enable the built-in statistical performance-anomaly detector (per-bucket EWMA baselines persisted across sessions). |
DetectAndReportHttpErrors | com.bugsee.option.detect.http-errors | boolean | false | Convert HTTP 5xx (500–599) responses into error reports sent to Bugsee. |
DetectFrustration | com.bugsee.option.detect.frustration | boolean | false | Detect user-frustration patterns (rage taps, dead taps, stuck loading, frozen UI) and report them as simulated errors grouped by screen and element. |
DetectAndReportExit | com.bugsee.option.detect.exit | boolean | true | Detect and report application exits. The per-reason flags below select which exit reasons are reported. |
DetectAndReportExitLowMemory | com.bugsee.option.detect.exit.low_memory | boolean | true | Report exits where the OS killed the app to reclaim memory. |
DetectAndReportExitNotResponding | com.bugsee.option.detect.exit.not_responding | boolean | true | Report exits caused by the app not responding (ANR). |
DetectAndReportExitExcessiveResourceUsage | com.bugsee.option.detect.exit.excessive_resource_usage | boolean | false | Report exits caused by excessive resource usage. |
DetectAndReportExitDependencyDied | com.bugsee.option.detect.exit.dependency_died | boolean | false | Report exits caused by a dependency process dying. |
DetectAndReportExitUserRequested | com.bugsee.option.detect.exit.user_requested | boolean | false | Report exits triggered by the user (e.g. force-stop). |
DetectAndReportExitUserWasStopped | com.bugsee.option.detect.exit.user_was_stopped | boolean | false | Report exits caused by the system stopping the app. |
DetectAndReportExitPermissionChanged | com.bugsee.option.detect.exit.permission_changed | boolean | false | Report exits caused by a runtime-permission change. |
DetectAndReportExitPackageUpdated | com.bugsee.option.detect.exit.package_updated | boolean | false | Report exits caused by the app package being updated. |
DetectAndReportExitPackageStateChanged | com.bugsee.option.detect.exit.package_state_changed | boolean | false | Report exits caused by a package state change. |
DetectAndReportExitOther | com.bugsee.option.detect.exit.other | boolean | false | Report exits the OS classifies with an "other" reason. |
DetectAndReportExitUnknown | com.bugsee.option.detect.exit.unknown | boolean | false | Report exits with an unknown reason. |
- AndroidManifest.xml
- Programmatic
<meta-data android:name="com.bugsee.option.detect.hang"
android:value="true" />
<meta-data android:name="com.bugsee.option.detect.exit"
android:value="true" />
HashMap<String, Object> options = new HashMap<>();
options.put(Options.DetectAndReportHang, true);
options.put(Options.DetectAndReportExit, true);
Bugsee.launch(this, "<APP_TOKEN>", options);
Capture
Options constant | Manifest key | Type | Default | Description |
|---|---|---|---|---|
CaptureLogs | com.bugsee.option.capture.logs | boolean | true | Automatically capture Logcat output. |
CaptureLogsLevel | com.bugsee.option.capture.logs.level | LogLevel | Verbose | Minimum log level to capture; lower-priority entries are dropped. |
CaptureLogsUseAllSources | com.bugsee.option.capture.logs.allsources | boolean | false | Query all logcat buffers (system, radio, etc.) instead of just the default sources, which suffice in most cases. |
CaptureScreenshot | com.bugsee.option.capture.screenshot | boolean | true | Capture a screenshot when a report is created. |
CaptureScreenshotScale | com.bugsee.option.capture.screenshot.scale | float [0.05, 1.0] | 1.0 | Privacy down-then-up scaling applied to screenshots: destroys fine detail (text, icons) while preserving layout. 1.0 disables the transform. Mirrors CaptureVideoScale. |
CaptureNetwork | com.bugsee.option.capture.network | boolean | true | Monitor and capture network requests and responses. |
CaptureNetworkBodySizeLimit | com.bugsee.option.capture.network.body-size-limit | int (bytes) | 20480 | Maximum captured request/response body size, in bytes. |
CaptureNetworkBodyWithoutType | com.bugsee.option.capture.network.body-without-type | boolean | false | Also attach request/response bodies that have no declared content type; otherwise only textual bodies are kept. |
CaptureNetworkUseDefaultSanitizer | com.bugsee.option.capture.network.default-sanitizer | boolean | true | Auto-redact known sensitive keys (PII) in URL query parameters, HTTP headers, and JSON bodies. Applies only when no custom network event filter is set. |
CaptureViewHierarchy | com.bugsee.option.capture.view-hierarchy | boolean | true | Capture the view-hierarchy snapshot for reports. |
CaptureBreadcrumbs | com.bugsee.option.capture.breadcrumbs | boolean | false | Capture the breadcrumb trail of user and system events. |
CaptureBreadcrumbsExtras | com.bugsee.option.capture.breadcrumbs.extras | boolean | false | Also attach the raw Intent extras of captured system-event broadcasts to each breadcrumb. |
CaptureVideo | com.bugsee.option.capture.video | boolean | true | Record screen video for reports. |
CaptureVideoMode | com.bugsee.option.capture.video.mode | VideoMode | V2 | Screen-capture mode/strategy to use (see enum reference). |
CaptureVideoQuality | com.bugsee.option.capture.video.quality | VideoQuality | Default | Quality of the final encoded video. |
CaptureVideoFrameRate | com.bugsee.option.capture.video.frame-rate | FrameRate | High | How often frames are captured (see enum reference). |
CaptureVideoScale | com.bugsee.option.capture.video.scale | float [0.1, 1.0] | 1.0 | Additional down-scaling applied to recorded video (e.g. 0.5 halves both width and height). |
CaptureVideoSecureScrolling | com.bugsee.option.capture.video.secure-scrolling | boolean | false | In VideoMode.V1, skip more frames while secure views are present on screen. |
CaptureVideoUsingCustomMuxer | com.bugsee.option.capture.video.custom-muxer | boolean | false | Use Bugsee's lightweight MP4 muxer instead of Android's MediaMuxer for video encoding; produces less verbose log output. |
CaptureVideoFullscreenRememberUserDecision | com.bugsee.option.capture.video.fullscreen-remember-decision | boolean | true | Persist the user's MediaProjection (screen-capture) consent decision across launches so they aren't re-prompted. Clear it at runtime with Bugsee.resetVideoCapturePermission(). |
CaptureVideoFullscreenKeepRunning | com.bugsee.option.capture.video.fullscreen-keep-running | boolean | true | Keep the MediaProjection session running in background (true: small ongoing CPU/battery cost plus a persistent foreground-service notification, but no re-prompt) versus tearing it down and re-acquiring on return to foreground (false: no background cost, but re-prompts on Android 14+). |
For video modes and redaction details see Privacy → Video.
- AndroidManifest.xml
- Programmatic
<meta-data android:name="com.bugsee.option.capture.video.frame-rate"
android:value="Medium" />
<meta-data android:name="com.bugsee.option.capture.network.body-size-limit"
android:value="10240" />
HashMap<String, Object> options = new HashMap<>();
options.put(Options.CaptureVideoFrameRate, FrameRate.Medium);
options.put(Options.CaptureNetworkBodySizeLimit, 10240);
Bugsee.launch(this, "<APP_TOKEN>", options);
Reporting triggers
Options constant | Manifest key | Type | Default | Description |
|---|---|---|---|---|
ReportingTriggerByShake | com.bugsee.option.reporting.triggers.shake | boolean | true | Open the bug-reporting UI when the device is shaken. |
ReportingTriggerByScreenshot | com.bugsee.option.reporting.triggers.screenshot | boolean | false | Open the bug-reporting UI when the user takes a screenshot. |
ReportingTriggerByNotification | com.bugsee.option.reporting.triggers.notification-bar | boolean | true | Show a notification-bar entry that opens the bug-reporting UI when tapped. |
ReportingTriggerByBroadcast | com.bugsee.option.reporting.triggers.broadcast | boolean | false | Allow a report to be triggered by an Android broadcast intent. |
- AndroidManifest.xml
- Programmatic
<meta-data android:name="com.bugsee.option.reporting.triggers.shake"
android:value="false" />
HashMap<String, Object> options = new HashMap<>();
options.put(Options.ReportingTriggerByShake, false);
Bugsee.launch(this, "<APP_TOKEN>", options);
Reporting defaults
Options constant | Manifest key | Type | Default | Description |
|---|---|---|---|---|
ReportingDefaultCrashPriority | com.bugsee.option.reporting.defaults.crash-priority | IssueSeverity | Blocker | Default severity assigned to crash reports. |
ReportingDefaultErrorPriority | com.bugsee.option.reporting.defaults.error-priority | IssueSeverity | High | Default severity assigned to error reports. |
ReportingDefaultBugPriority | com.bugsee.option.reporting.defaults.bug-priority | IssueSeverity | High | Default severity assigned to manually filed bug reports. |
Reporting UI
Options constant | Manifest key | Type | Default | Description |
|---|---|---|---|---|
ReportingUISummaryRequired | com.bugsee.option.reporting.ui.summary-required | boolean | false | Make the Summary field mandatory in the bug-reporting UI. |
ReportingUIDescriptionRequired | com.bugsee.option.reporting.ui.description-required | boolean | false | Make the Description field mandatory in the bug-reporting UI. |
ReportingUIEmailRequired | com.bugsee.option.reporting.ui.email-required | boolean | false | Make the Email field mandatory in the bug-reporting UI. |
ReportingUILabelsEnabled | com.bugsee.option.reporting.ui.labels-enabled | boolean | false | Show the Labels input field in the bug-reporting UI. |
ReportingUILabelsRequired | com.bugsee.option.reporting.ui.labels-required | boolean | false | Make the Labels field mandatory in the bug-reporting UI (implies it is shown). |
ReportingUIPrioritySelectorEnabled | com.bugsee.option.reporting.ui.priority-selector-enabled | boolean | false | Let the user set the report priority manually in the bug-reporting UI. |
ReportingUILabelsRequired = true implies ReportingUILabelsEnabled = true.
Performance monitoring
See Performance monitoring for the APM overview.
Options constant | Manifest key | Type | Default | Description |
|---|---|---|---|---|
PerformanceMonitoring | com.bugsee.option.performance.enabled | boolean | true | Master switch for performance monitoring (APM). |
PerformanceSampleRate | com.bugsee.option.performance.sample-rate | float [0, 1] | 0.01 | Probability that a transaction is sampled for standalone APM upload. Does not affect capture — every transaction still flows into the report pipeline. |
PerformanceUploadMode | com.bugsee.option.performance.upload-mode | String | "batched" | How standalone APM data is uploaded: "batched" (30 s flush) or "realtime". |
PerformanceAdaptiveSampling | com.bugsee.option.performance.adaptive-sampling | boolean | true | On top of the static sample rate, promote "interesting" unsampled transactions — scored at finish by status, duration outlier-ness, and span-tree complexity — into the upload pipeline. |
PerformanceUploadMode accepts "batched" (30 s flush) or "realtime". PerformanceSampleRate gates standalone APM uploads only — every transaction still flows into the capture pipeline for reports regardless of sampling. PerformanceAdaptiveSampling = true turns the sample rate into a ceiling rather than a fixed probability.
Enum reference
Enum-typed options accept the enum constant programmatically, or the enum value name as a string in the manifest (for example, android:value="Blocker" for IssueSeverity.Blocker).
| Enum | Values |
|---|---|
LogLevel | Error, Warning, Info, Debug, Verbose |
VideoMode | None, V1, V2, Fullscreen, DirectBuffers |
VideoQuality | Default, Medium, High |
FrameRate | Low, Medium, High, Raw (no frame-rate cap; only meaningful with VideoMode.DirectBuffers, otherwise coerced to High) |
IssueSeverity | VeryLow, Medium, High, Critical, Blocker |
IssueType | Bug, Crash, Error |
Reading effective options at runtime
OptionsContainer is the read-only view of effective launch options. It's returned by Bugsee.getLaunchOptions() and is what extensions receive in their launch(OptionsContainer) callback:
boolean hasOption(String key);
<T> T getOption(String key);
<T> T getOption(String key, T defaultValue);
Map<String, Serializable> toMap();
val opts: OptionsContainer = Bugsee.getLaunchOptions()
val duration: Int = opts.getOption(Options.Duration, 60)
Worked examples
Manifest-only configuration
<application ...>
<meta-data android:name="com.bugsee.app-token"
android:value="@string/bugsee_app_token" />
<meta-data android:name="com.bugsee.option.detect.hang"
android:value="true" />
<meta-data android:name="com.bugsee.option.capture.video.frame-rate"
android:value="Medium" />
<meta-data android:name="com.bugsee.option.reporting.triggers.shake"
android:value="false" />
</application>
Programmatic configuration
- Kotlin
- Java
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
val options: HashMap<String, java.io.Serializable> = hashMapOf(
Options.Duration to 60,
Options.DetectAndReportHang to true,
Options.CaptureVideoFrameRate to FrameRate.Medium,
Options.ReportingTriggerByShake to false,
)
Bugsee.launch(this, "<APP_TOKEN>", options)
}
}
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
HashMap<String, Serializable> options = new HashMap<>();
options.put(Options.Duration, 60);
options.put(Options.DetectAndReportHang, true);
options.put(Options.CaptureVideoFrameRate, FrameRate.Medium);
options.put(Options.ReportingTriggerByShake, false);
Bugsee.launch(this, "<APP_TOKEN>", options);
}
}
Extension options
Each extension module that ships its own runtime options has a dedicated page:
- NDK options — native crash detection (
bugsee-android-ndk). - Leak options — memory and thread leak detection (
bugsee-android-leak).
Other shipped extensions (feedback, okhttp, ktor-2, ktor-3, cronet, compose) don't expose runtime options today — they're activated solely by being on the classpath.
Related pages
- Issue detection — per-detector deep dives.
- Performance monitoring — APM transactions, spans, and sampling.
- Privacy: video — video modes, secure areas, and redaction.