Skip to main content

React SDK API Reference

Complete API documentation for the React SDK.

ReplaneProvider​

Provider component that makes the Replane client available to your component tree.

Props​

PropTypeRequiredDescription
connectionConnectOptions | nullYesConnection options (see below), or null to skip connection
defaultsRecord<string, unknown>NoDefault values if server is unavailable
contextRecord<string, unknown>NoDefault context for override evaluations
snapshotReplaneSnapshotNoSnapshot for SSR hydration
loggerReplaneLoggerNoCustom logger (default: console)
loaderReactNodeNoComponent to show while loading
suspensebooleanNoUse React Suspense for loading state
asyncbooleanNoConnect asynchronously (renders immediately with defaults)

Connection options​

OptionTypeRequiredDescription
baseUrlstringYesReplane server URL
sdkKeystringYesSDK key for authentication
connectTimeoutMsnumberNoSDK connection timeout (default: 5000)
requestTimeoutMsnumberNoTimeout for SSE requests (default: 2000)
retryDelayMsnumberNoBase delay between retries (default: 200)
inactivityTimeoutMsnumberNoSSE inactivity timeout (default: 30000)
fetchFntypeof fetchNoCustom fetch implementation

See the JavaScript SDK documentation for more details.

import { ErrorBoundary } from 'react-error-boundary';

<ErrorBoundary fallback={<div>Failed to load configuration</div>}>
<ReplaneProvider
connection={{
baseUrl: 'https://replane.example.com',
sdkKey: process.env.REPLANE_SDK_KEY,
}}
loader={<LoadingSpinner />}
>
<App />
</ReplaneProvider>
</ErrorBoundary>

With pre-created client​

import { Replane } from '@replanejs/sdk';

const client = new Replane();
await client.connect({
baseUrl: 'https://replane.example.com',
sdkKey: process.env.REPLANE_SDK_KEY,
});

<ReplaneProvider client={client}>
<App />
</ReplaneProvider>

With Suspense​

<ErrorBoundary fallback={<div>Failed to load configuration</div>}>
<Suspense fallback={<LoadingSpinner />}>
<ReplaneProvider
connection={{
baseUrl: 'https://replane.example.com',
sdkKey: process.env.REPLANE_SDK_KEY,
}}
suspense
>
<App />
</ReplaneProvider>
</Suspense>
</ErrorBoundary>

With async mode​

Connect in the background while rendering immediately with defaults:

<ReplaneProvider
connection={{
baseUrl: 'https://replane.example.com',
sdkKey: process.env.REPLANE_SDK_KEY,
}}
defaults={{ featureEnabled: false }}
async
>
<App />
</ReplaneProvider>

With snapshot (SSR/hydration)​

// On the server
const serverClient = new Replane();
await serverClient.connect({ baseUrl: '...', sdkKey: '...' });
const snapshot = serverClient.getSnapshot();

// On the client
<ReplaneProvider
connection={{
baseUrl: 'https://replane.example.com',
sdkKey: process.env.REPLANE_SDK_KEY,
}}
snapshot={snapshot}
>
<App />
</ReplaneProvider>

useConfig​

Hook to retrieve a configuration value. Automatically subscribes to updates and re-renders when the value changes.

function MyComponent() {
// Basic usage
const theme = useConfig<string>('theme');

// With evaluation context
const discount = useConfig<number>('discount-percentage', {
context: {
userId: '123',
isPremium: true,
},
});

return <div>Theme: {theme}, Discount: {discount}%</div>;
}

useReplane​

Hook to access the underlying Replane client directly.

function MyComponent() {
const replane = useReplane();

const handleClick = () => {
const value = replane.get('some-config');
console.log(value);
};

return <button onClick={handleClick}>Get Config</button>;
}

createConfigHook​

Factory function to create a typed version of useConfig with autocomplete for config names.

import { createConfigHook } from '@replanejs/react';

interface AppConfigs {
theme: { darkMode: boolean; primaryColor: string };
features: { beta: boolean; analytics: boolean };
maxItems: number;
}

const useAppConfig = createConfigHook<AppConfigs>();

function MyComponent() {
// Autocomplete for config names, automatic type inference
const theme = useAppConfig('theme');
// ^? { darkMode: boolean; primaryColor: string }

const maxItems = useAppConfig('maxItems');
// ^? number

return (
<div style={{ color: theme.primaryColor }}>
Max items: {maxItems}
</div>
);
}

createReplaneHook​

Factory function to create a typed version of useReplane.

import { createReplaneHook } from '@replanejs/react';

const useAppReplane = createReplaneHook<AppConfigs>();

function MyComponent() {
const replane = useAppReplane();
const theme = replane.get('theme'); // Fully typed

return <div>Dark mode: {theme.darkMode ? 'on' : 'off'}</div>;
}

clearSuspenseCache​

Clears the suspense cache. Useful for retrying after errors.

import { clearSuspenseCache } from '@replanejs/react';

<ErrorBoundary
fallbackRender={({ resetErrorBoundary }) => (
<button onClick={resetErrorBoundary}>Retry</button>
)}
onReset={() => clearSuspenseCache()}
>
<ReplaneProvider connection={connection} suspense>
<App />
</ReplaneProvider>
</ErrorBoundary>