Skip to content
Everframe Docs
Documentation

Configuration

One config object on the provider. This page is the complete list for React Native.

Updated

<EverframeProvider
  config={{
    apiKey: 'evf_live_…',
    integrations: [txNav, consoleIntegration()],
  }}
>
  <RootNavigator />
</EverframeProvider>

Options

OptionTypeDefaultWhat it does
apiKeystring—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.
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'Who presents the phone-pairing PIN on a TV.
companionDeviceIdstring—An MDM id or serial you already trust, hashed natively before it leaves the device.
companionBadge.enabledbooleantrueShow the pairing badge on TV.
companionBadge.positioncornerbottom-rightAlso bottom-left, top-right, top-left.
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.

The hook

const { open, captureException, setUser, addBreadcrumb, recordScreen, setExtra } = useEverframe();
MethodWhat it does
open()Promise<ReporterResult>. Opens the reporter, resolves on submit or cancel.
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.