@rudderstack/featureflag-sdk-node
v0.1.4
Published
A flexible and extensible feature flag SDK that supports multiple providers and caching.
Downloads
116
Keywords
Readme
Feature Flag SDK
A flexible and extensible feature flag SDK that supports multiple providers and caching.
Features
- Support for multiple feature flag providers (Amplitude, Flagsmith)
- In-memory caching with customizable TTL
- TypeScript support
- Easy to extend with new providers
Basic Usage
The SDK provides four main functions for interacting with feature flags:
isFeatureEnabled
- Check if a feature is enabled (cached)getFeatureValue
- Get the value of a feature flag (cached)isFeatureEnabledLatest
- Check if a feature is enabled (real-time)getFeatureValueLatest
- Get the value of a feature flag (real-time)
import {
isFeatureEnabled,
getFeatureValue,
isFeatureEnabledLatest,
getFeatureValueLatest,
} from '@rudderlabs/rudder-service';
// Using cached functions (recommended for most use cases)
async function processEvent(event) {
const isEnabled = await isFeatureEnabled('tenantId', 'myFeature');
if (isEnabled) {
// process event
}
}
// Using latest functions (for startup or critical real-time updates)
async function start() {
// Get fresh values during startup
const features = await Promise.all([
getFeatureValueLatest('tenantId', 'routing'),
getFeatureValueLatest('tenantId', 'theme'),
]);
// Initialize app with latest values and start
}
Cached vs Latest Functions
Cached Functions (isFeatureEnabled
, getFeatureValue
)
Recommended for:
- Regular feature checks during runtime
- Feature checks while processing events
- Frequent feature flag queries
- Performance-critical operations
Benefits:
- Faster response times
- Lower latency
- Reduced server load
- Better user experience
Latest Functions (isFeatureEnabledLatest
, getFeatureValueLatest
)
Best for:
- Application startup configuration
- Features that need guaranteed latest values
- One-time initialization
- Critical business logic requiring real-time values
Note: These functions make direct calls to the feature flag provider and may have higher latency. Use them sparingly and only when necessary.
Best Practices
Default to Cached Functions
// Preferred for most scenarios const isEnabled = await isFeatureEnabled('tenantId', 'feature');
Use Latest Functions at Startup
// Good for initialization async function initializeApp() { const config = await getFeatureValueLatest('tenantId', 'appConfig'); // Setup app with latest configuration }
Error Handling
try { const isEnabled = await isFeatureEnabled('tenantId', 'feature'); } catch (error) { // Handle error appropriately console.error('Failed to check feature:', error); }
When to Use Latest Functions
Application Initialization
async function startupConfig() { // Get fresh values during startup const features = await Promise.all([ getFeatureValueLatest('tenantId', 'routing'), getFeatureValueLatest('tenantId', 'theme'), ]); // Initialize app with latest values }
Critical Business Features
async function processPayment() { // Check latest feature state for critical operations const paymentConfig = await getFeatureValueLatest('tenantId', 'paymentProcessing'); // Process payment using latest configuration }
Remember: While latest functions provide real-time values, they come with additional latency and server load. Use them judiciously and prefer cached functions for regular operations.