Teardown
React nativeGetting Started

Getting Started

Install and configure the Teardown SDK for React Native.

Installation

Install the core package:

bun add @teardown/react-native

Setup

1. Create SDK Configuration

Create a file to initialize the Teardown SDK (e.g., lib/teardown.ts):

import { TeardownCore } from '@teardown/react-native';
import { ExpoDeviceAdapter } from '@teardown/react-native/adapters/expo';
import { MMKVStorageAdapter } from '@teardown/react-native/adapters/mmkv';

export const teardown = new TeardownCore({
  org_id: 'your-org-id',
  project_id: 'your-project-id',
  api_key: 'your-api-key',
  storageAdapter: new MMKVStorageAdapter(), // or your own storage adapter or another supplied adapter
  deviceAdapter: new ExpoDeviceAdapter(), // or your own device adapter or another supplied adapter
  forceUpdate: {
    throttleMs: 30_000, // Min time between checks (default: 30s)
    checkCooldownMs: 300_000, // Cooldown after check (default: 10s)
  },
});

2. Wrap Your App

In your root layout file (e.g., app/_layout.tsx for Expo Router):

import { TeardownProvider } from '@teardown/react-native';
import { teardown } from '../lib/teardown';

export default function RootLayout() {
  return (
    <TeardownProvider core={teardown}>
      <YourApp />
    </TeardownProvider>
  );
}

3. Use in Components

import { useTeardown, useSession, useForceUpdate } from '@teardown/react-native';

function MyComponent() {
  const { core } = useTeardown();
  const session = useSession();
  const { isUpdateRequired } = useForceUpdate();

  const handleLogin = async () => {
    const result = await core.identity.identify({
      user_id: 'user-123',
      email: 'user@example.com',
    });

    if (result.success) {
      console.log('Session:', result.data.session_id);
    }
  };

  if (isUpdateRequired) {
    return <UpdateRequiredScreen />;
  }

  return <Button onPress={handleLogin} title="Login" />;
}

Configuration Options

TeardownCore Options

OptionTypeRequiredDescription
org_idstringYesOrganization ID from dashboard
project_idstringYesProject ID from dashboard
api_keystringYesAPI key from dashboard
storageAdapterStorageAdapterYesStorage adapter instance (see adapters)
deviceAdapterDeviceInfoAdapterYesDevice info adapter instance (see adapters)
forceUpdateobjectNoForce update configuration

Force Update Options

OptionTypeDefaultDescription
throttleMsnumber30000Min time between foreground checks (ms)
checkCooldownMsnumber300000Min time since last check (ms)

Hooks

useTeardown

Access the TeardownCore instance:

const { core } = useTeardown();

// Access clients
core.identity.identify({ user_id: '123' });
core.identity.reset();
core.setLogLevel('verbose');

useSession

Get current session (reactive):

const session = useSession();

if (!session) {
  return <LoginScreen />;
}

// session.session_id, session.device_id, session.user_id, session.token

useForceUpdate

Check version status:

const { versionStatus, isUpdateRequired, isUpdateAvailable } = useForceUpdate();

if (isUpdateRequired) {
  return <ForceUpdateModal />;
}