The table below describes native iOS and Android options. On React Native Web,
the same package import re-exports the React SDK and accepts its
browser configuration. sdkKey, the provider,
and the common reporting methods keep the same names.
<EverframeProvider
config={{
sdkKey: 'evf_live_…',
integrations: [txNav, consoleIntegration()],
}}
>
<RootNavigator />
</EverframeProvider>
Options
| Option | Type | Default | What it does |
|---|---|---|---|
sdkKey | string | — | Required. Your app’s SDK key. |
appName | string | — | Not forwarded to native. Accepted by the provider, but extractBridgeConfig does not pass it, so it overrides nothing. |
appVersion | string | — | Not forwarded to native, same as appName. |
appBuild | string | — | Not forwarded to native, same as appName. |
jsBundle | { buildId: string; bundleName: string } | — | Exact loaded Hermes JavaScript identity for private mapping. Use a distinct ID for every changed platform or OTA build. See Source maps. |
integrations | EverframeIntegration[] | [] | Navigation AND console integrations. See Screen tracking and Console. |
captureScreenshot | boolean | true | Ignored by native. Accepted and forwarded, but neither platform reads it — the screenshot is always taken. Mask instead: see Sensitive content. |
crashReporting.disabled | boolean | false | Suppresses unattended JavaScript errors and explicit captureException. |
crashReporting.promiseRejections.enabled | boolean | false | Reports promise rejections still unhandled after 2 seconds, on qualified runtimes only — see Crash reporting. |
reporter.disabled | boolean | false | Makes every session crash-only: no on-device reporter. See Crash-only sessions. |
networkBodies.disabled | boolean | false | Client veto over body capture. Inert on React Native today — see Network bodies. |
installIdentifier.disabled | boolean | false | Stop sending the per-install identifier used to count installs against your plan. Nothing about the person is derived from it. Can turn it off, never on. |
attachPinUi | 'builtin' | 'custom' | 'off' | 'builtin' | Deprecated, ignored. Companion was removed; the option stays so existing code type-checks. |
companionDeviceId | string | — | Deprecated, ignored. Companion was removed; the option stays so existing code type-checks. |
companionBadge.enabled | boolean | true | Deprecated, ignored. Companion was removed; the option stays so existing code type-checks. |
companionBadge.position | corner | bottom-right | Deprecated, ignored. Companion was removed; the option stays so existing code type-checks. |
quickCapture.enabled | boolean | true | Set false to opt out of quick capture on simulators and emulators. See Quick capture. |
theme | object | — | Eight colour roles. See Branding. |
networkBodies.disabled and installIdentifier.disabled are client vetoes:
a client can turn the feature off and can never turn it on. See
Server config.
crashReporting.disabled has no server gate — it is a plain local setting.
Quick capture
Quick capture files a draft report from a debug iOS Simulator or Android
emulator with one gesture: press Shift+B (ignored while a text field has focus).
React Native views are native, so the native SDK’s capture and masking apply
with no extra code. It is armed only in debug builds on simulators and
emulators. To set it up, see
iOS and
Android, including
npx @everframe/cli capture and npx @everframe/cli login.
<EverframeProvider config={{ sdkKey: 'evf_live_…', quickCapture: { enabled: false } }}>
Real phones and Android TVs can quick capture too, once linked to you or your team under Project settings → Devices. See Quick capture on real devices.
Crash-only sessions
<EverframeProvider config={{ sdkKey: 'evf_live_…', reporter: { disabled: true } }}>
reporter.disabled turns the on-device reporter off for the whole session, on
iOS, Android and React Native Web. open() rejects, and on React Native Web the
floating replies button and the inbox are not shown. Crash and error capture,
breadcrumbs, console and vitals keep working.
Use it in production builds that should report crashes without recording every session. Replay in a crash-only session follows the dashboard’s crash-only coverage, 0% by default, instead of the report coverage, and network bodies are not captured. See Session replay.
The hook
const { open, captureException, setUser, addBreadcrumb, recordScreen, setExtra } = useEverframe();
| Method | What it does |
|---|---|
open() | Promise<ReporterResult>. Opens the reporter, resolves on submit or cancel. Rejects in a crash-only session. |
captureException(error, options?) | Report a caught JavaScript error with optional severity, context, and metadata. Returns void; requires matching JS and native SDK components. See Crash reporting. |
setUser(user?) | Attach or clear the end user. Call with no argument to clear. See Identity. |
addBreadcrumb(input) | Add a custom entry to the trail. |
recordScreen(name, data?) | Mark a screen transition. |
setExtra(value) | Free-form metadata on the next report — a string, an object, or a resolver function (see below). Capped at 16 KiB — see Errors & limits. |
sensitive.register / unregister | Low-level masking by native tag — normally reached through the component. See Sensitive content. |
setUser clears by being called with no argument, not with null. That is
a React Native codegen constraint, not a style choice: the bridge cannot express
a nullable struct parameter, so absence is the only way to say “no user”.
open, captureException, setUser, addBreadcrumb, recordScreen and
setExtra are also exported from the package root for code outside the React
tree — a global handler, a deep-link handler. They do nothing until the
provider has mounted (open() rejects with EverframeNotMountedError).
The three forms of setExtra
setExtra('checkout, card declined'); // string — see the caveat below
setExtra({ cartId, step, flags }); // object — serialised for you
setExtra(() => ({ cartId, step: currentStep })); // resolver — preferred
Prefer the resolver. It runs once per report, at assembly time, so what it
returns reflects your state when the bug happened rather than whenever you last
called setExtra. The other two forms freeze a snapshot at call time, which
goes stale the moment anything changes.
Avoid the string form here. A string crosses the bridge as-is and is cut at 16 384 characters by the native side’s raw character truncation — which can slice mid-word, or mid-JSON if you serialised it yourself. The object and resolver forms are budgeted in JavaScript before the bridge, so an over-budget payload is dropped whole, not corrupted, with a warning naming the actual size.
Each call replaces the last. The cap is EXTRA_MAX_CHARS (16 KiB), exported
from @everframe/react-native — see Errors & limits.
What React Native does not have
No hotkey or cspNonce — those are browser concerns, and the reporter here is
native UI. No debug, disabled or onError option. No client-side
redaction or sessionReplay block: replay is enabled entirely from the
server, and redaction runs with built-in default-deny rules rather than a config
you pass.
Two-way replies are not implemented in the React Native SDK — no reply UI and no polling. The feature is web-only today.
There is no setIdentityToken on the hook either — verified identity is not
part of the React Native surface. See User identity.
To keep Everframe out of a build, do not mount the provider.