Feddy Docs
React Native SDKInstallation

Installation

From npm install to a working feedback modal in one flow — install peers, mount FeddyProvider, configure with your Project ID, drop in a button, verify in the dashboard.

This page takes you from a fresh React Native or Expo project to a working feedback submission landing in your Feddy dashboard. Read top-to-bottom; every section is a step in the same flow.

Requirements

ItemVersion
React Native0.73+
React18+
iOS deployment target15+
Android minSdk24+
TypeScript5+ (optional — full type declarations ship with the package)

The SDK is pure JavaScript with optional Expo modules. There is no Pod install or Gradle config required, and it works in Expo Go.

Install the package

Install the core SDK plus its two required peer dependencies:

npm install @feddyapp/react-native @react-native-async-storage/async-storage react-native-safe-area-context

For richer features, also install the optional Expo modules — each adds a specific capability and is gracefully no-op'd when missing:

npx expo install \
  expo-application expo-device expo-localization \
  expo-image-picker expo-image-manipulator expo-store-review \
  expo-iap

Get your Project ID

  1. Sign up at feddy.app and create a workspace
  2. Open Settings → API Keys
  3. Copy the Project ID — it looks like fed_xxxxxxxxxxxx (the fed_ prefix followed by 12 alphanumeric characters)

Project ID vs API Key

The Project ID (fed_xxxxxxxxxxxx) is safe to embed in your client app — it only grants ingest. The dashboard also generates API Keys (fed_sk_xxxxxxxxxxxx); those are server-to-server secrets and must never be shipped in a client. The SDK rejects anything starting with fed_sk_.

Configure and mount FeddyProvider

Call Feddy.configure(...) once at app launch and mount <FeddyProvider /> at the root of your app. The provider mounts the built-in compose modal and Smart Review sheet so the imperative APIs (Feddy.openFeedback(), Feddy.requestReviewIfAppropriate()) work from anywhere in your tree.

import { Feddy, FeddyProvider } from '@feddyapp/react-native';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import YourApp from './YourApp';

Feddy.configure({ apiKey: 'fed_xxxxxxxxxxxx' });

export default function App() {
  return (
    <SafeAreaProvider>
      <FeddyProvider>
        <YourApp />
      </FeddyProvider>
    </SafeAreaProvider>
  );
}

If your app uses expo-router, place setup in app/_layout.tsx:

import { Feddy, FeddyProvider } from '@feddyapp/react-native';
import { Stack } from 'expo-router';
import { SafeAreaProvider } from 'react-native-safe-area-context';

Feddy.configure({ apiKey: 'fed_xxxxxxxxxxxx' });

export default function RootLayout() {
  return (
    <SafeAreaProvider>
      <FeddyProvider>
        <Stack />
      </FeddyProvider>
    </SafeAreaProvider>
  );
}

Feddy.configure() is synchronous, fire-and-forget, and never throws — invalid keys or network failures log to the console rather than surfacing as a thrown error.

Verify the install

Drop the button below into any screen to confirm the SDK is wired up. It opens the bundled feedback modal — submit a quick test message:

import { Pressable, Text } from 'react-native';
import { Feddy } from '@feddyapp/react-native';

export function VerifyButton() {
  return (
    <Pressable
      onPress={() => Feddy.openFeedback({ boardKey: 'features' })}
      style={{ padding: 12 }}
    >
      <Text>Send Feedback</Text>
    </Pressable>
  );
}

In the Feddy dashboard, navigate to Inbox — your test submission should appear at the top of the list within a second or two.

Offline retry

If the device was offline at submit time, the SDK queues the payload locally (via AsyncStorage) and replays it on the next Feddy.configure(...) call. You don't need to handle this manually — but it does mean test submissions may take a moment to land if you're on a flaky network.

What's next

You're integrated. Continue with:

On this page