Skip to content

SDK API reference

Full reference of the methods exposed by @pionne/react-native v0.3.0+.

Initializes the SDK. Call once, at app startup.

import { Pionne } from '@pionne/react-native';
Pionne.init({
token: 'pio_live_...',
release: '1.0.0',
environment: 'production',
tags: { tier: 'pro' },
sampleRate: 1,
scrubPii: true,
captureScreenshot: false,
breadcrumbs: true,
});
FieldTypeDefaultDescription
tokenstringRequired. Project token pio_live_...
releasestring?autoRelease version, defaults to expo-application
environmentstring?'production'production, development, staging
tagsRecord<string, string | number | boolean>?{}Tags added to every event
sampleRatenumber?1Between 0 and 1, fraction of events sent
scrubPiiboolean | Array<{re: RegExp, replace: string}>?trueSee PII
captureScreenshotboolean?falseSee Screenshots
screenshotQualitynumber?0.5JPG quality 0..1
breadcrumbsboolean | { console?: boolean; fetch?: boolean }?trueSee Breadcrumbs
beforeSend(event) => event | nullFilter/transform hook
enabledboolean?trueFully disables sending if false
enableInDevboolean?trueSet to false to no-op the SDK in __DEV__ (Metro / Expo Go). Recommended to keep your prod dashboard clean. See React Native SDK — Skip in dev.
apiUrlstring?'https://api.pionne.app'Override for self-host
sendGeographyboolean?falseOpt-in: IP geolocation (city/region/country) attached to every event under contexts.geo. See React Native SDK — Geography.
geographyEndpointstring?'https://ipapi.co/json/'URL of the IP→geo lookup if you want a custom provider.

Captures an error explicitly. Returns void.

try {
await fetchUser();
} catch (err) {
Pionne.captureException(err, { userId: 42, screen: 'Profile' });
}

Sends a level: 'info' event (or customizable via extra.level).

Pionne.captureMessage('Cart abandoned', { items: 3, level: 'warning' });

Associates an anonymous identifier with all subsequent events. Never sends an email/name.

Pionne.setUser('user_a8f2c1');

To reset: Pionne.setUser(null).

Merges global tags.

Pionne.setTags({ ab_test: 'variant_b', plan: 'pro' });

Enables/disables sending at runtime (handy for a GDPR consent banner).

Pionne.setEnabled(false); // no event sent anymore

Adds a manual breadcrumb. See Breadcrumbs.

Pionne.addBreadcrumb({
category: 'navigation',
message: 'Navigated to Checkout',
data: { from: 'Cart' },
});

Wraps a function (sync or async) with a try/catch. The error is captured then re-thrown.

const safeSubmit = Pionne.wrap(async (form) => {
await api.submit(form);
}, { feature: 'checkout' });

Sets the root ref for screenshot capture.

const rootRef = useRef(null);
useEffect(() => Pionne.setRootRef(rootRef), []);
return <View ref={rootRef} style={{ flex: 1 }}>...</View>;

React Error Boundary component. See Error Boundary.

Shape of the payload sent to /api/ingest (summary):

type PionneEvent = {
exception_type: string;
message: string;
stack: string | null;
level: 'fatal' | 'error' | 'warning' | 'info';
release?: string;
environment?: string;
tags?: Record<string, unknown>;
user?: { id?: string };
contexts?: { device?: object; app?: object; os?: object };
mechanism?: { type: string; handled: boolean };
breadcrumbs?: Array<{ category: string; message: string; ts: number; data?: object }>;
screenshot?: string; // base64 JPG
extra?: Record<string, unknown>;
};