Skip to content
Everframe Docs
Documentation

Configuration

One provider import on every host; native and browser settings follow their capture engines.

Updated

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

OptionTypeDefaultWhat it does
sdkKeystring—Required. Your app’s SDK key.
appNamestring—Not forwarded to native. Accepted by the provider, but extractBridgeConfig does not pass it, so it overrides nothing.
appVersionstring—Not forwarded to native, same as appName.
appBuildstring—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.
integrationsEverframeIntegration[][]Navigation AND console integrations. See Screen tracking and Console.
captureScreenshotbooleantrueIgnored by native. Accepted and forwarded, but neither platform reads it — the screenshot is always taken. Mask instead: see Sensitive content.
crashReporting.disabledbooleanfalseSuppresses unattended JavaScript errors and explicit captureException.
crashReporting.promiseRejections.enabledbooleanfalseReports promise rejections still unhandled after 2 seconds, on qualified runtimes only — see Crash reporting.
reporter.disabledbooleanfalseMakes every session crash-only: no on-device reporter. See Crash-only sessions.
networkBodies.disabledbooleanfalseClient veto over body capture. Inert on React Native today — see Network bodies.
installIdentifier.disabledbooleanfalseStop 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.
companionDeviceIdstring—Deprecated, ignored. Companion was removed; the option stays so existing code type-checks.
companionBadge.enabledbooleantrueDeprecated, ignored. Companion was removed; the option stays so existing code type-checks.
companionBadge.positioncornerbottom-rightDeprecated, ignored. Companion was removed; the option stays so existing code type-checks.
quickCapture.enabledbooleantrueSet false to opt out of quick capture on simulators and emulators. See Quick capture.
themeobject—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();
MethodWhat 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 / unregisterLow-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.