react-native-featureflags
v1.5.0
Published
React Native SDK for Truflag feature flags
Readme
React Native Truflag SDK
Enterprise-grade feature flags for React Native.
Install
npm install react-native-featureflagsNo separate core package install is required. Relay endpoint is baked into the SDK.
Quickstart
import { useEffect } from 'react';
import Flags from 'react-native-featureflags';
export default function App() {
useEffect(() => {
void Flags.configure({
apiKey: 'pk_live_xxx',
user: {
id: 'user-123',
attributes: { plan: 'pro', country: 'US' },
},
});
}, []);
return <RootScreen />;
}Login Later
await Flags.login({
id: 'user-123',
attributes: { plan: 'pro' },
});Flags.identify(user) is an alias for Flags.login(user).
Flags.login(user) merges incoming attributes with existing attributes for that user ID.
Unspecified keys are preserved.
Update Attributes
await Flags.setAttributes({
country: 'US',
role: 'admin',
});Flags.setAttributes(attrs) updates attributes for the current logged-in user and also preserves keys you do not pass.
Evaluate Flags
import { useFlag, useFlagsReady } from 'react-native-featureflags';
export function CheckoutEntry() {
const ready = useFlagsReady();
const enabled = useFlag('new-checkout', false);
if (!ready) return <LoadingSkeleton />;
return enabled ? <CheckoutV2 /> : <CheckoutV1 />;
}Non-hook usage:
const enabled = Flags.getFlag('new-checkout', false);
const all = Flags.getAllFlags();Logout Semantics
Flags.logout() reverts to an anonymous user and immediately refreshes flags.
The anonymous ID is persisted and reused across launches.
Persistence
Default persistence uses React Native AsyncStorage automatically. Install this dependency in your app:
npm install @react-native-async-storage/async-storageYou can still pass storage explicitly for custom adapters.
Best Practices
- Configure once at app launch.
- Gate critical UI behind
useFlagsReady(). - Use public API keys only.
- Keep user attributes minimal and non-PII.
FAQ
- Anonymous IDs: created when
useris omitted inconfigure. - Offline mode: cached flags are used if cache is valid, then refreshed.
- Retries/timeouts: fetch requests use timeout plus exponential backoff with jitter.
