nest-feature-flags
v1.2.0
Published
Professional feature flag management system for NestJS with A/B testing, gradual rollouts, user targeting, and real-time updates
Maintainers
Readme
nest-feature-flags
Professional feature flag management system for NestJS with A/B testing, gradual rollouts, user targeting, and real-time updates.
🚀 Features
- Feature Toggles - Enable/disable features instantly
- Gradual Rollouts - Percentage-based feature releases
- A/B Testing - Run experiments with user segmentation
- User Targeting - Target specific users or groups
- Real-time Updates - Changes reflect immediately
- Type-Safe - Full TypeScript support
- Production-Ready - Built for enterprise applications
📦 Installation
npm install nest-feature-flags🔧 Quick Start
1. Import Module
import { Module } from '@nestjs/common';
import { FeatureFlagsModule } from 'nest-feature-flags';
@Module({
imports: [
FeatureFlagsModule.forRoot({
flags: {
'new-ui': { enabled: true },
'beta-feature': { enabled: false },
'gradual-rollout': { enabled: true, percentage: 50 },
},
}),
],
})
export class AppModule {}2. Use in Services
import { Injectable } from '@nestjs/common';
import { FeatureFlagService } from 'nest-feature-flags';
@Injectable()
export class MyService {
constructor(private featureFlags: FeatureFlagService) {}
async doSomething(userId: string) {
if (await this.featureFlags.isEnabled('new-ui', { userId })) {
return 'New UI experience';
}
return 'Classic UI';
}
}3. Use Guards
import { Controller, Get, UseGuards } from '@nestjs/common';
import { FeatureFlagGuard, RequireFeature } from 'nest-feature-flags';
@Controller('beta')
export class BetaController {
@Get()
@UseGuards(FeatureFlagGuard)
@RequireFeature('beta-feature')
async betaEndpoint() {
return { message: 'Beta feature active!' };
}
}📖 Documentation
Feature Flag Configuration
{
'flag-name': {
enabled: true, // Master switch
percentage: 50, // Gradual rollout (0-100)
userIds: ['user1', 'user2'], // Specific users
groups: ['beta-testers'], // User groups
startDate: new Date(), // Schedule activation
endDate: new Date(), // Schedule deactivation
}
}Advanced Usage
Percentage-based Rollout
FeatureFlagsModule.forRoot({
flags: {
'new-checkout': {
enabled: true,
percentage: 25, // 25% of users see this
},
},
});User Targeting
const isEnabled = await featureFlags.isEnabled('premium-feature', {
userId: 'user123',
groups: ['premium', 'beta'],
});A/B Testing
const variant = await featureFlags.getVariant('experiment-1', {
userId: 'user123',
variants: ['control', 'variant-a', 'variant-b'],
});🎯 Use Cases
- Canary Releases - Roll out features gradually
- A/B Testing - Test different implementations
- Beta Programs - Limit features to beta users
- Kill Switches - Disable features instantly
- Scheduled Releases - Launch features at specific times
👤 Author
Alireza Aminzadeh
- Email: [email protected]
- GitHub: @syeedalireza
- NPM: @syeedalireza
📄 License
MIT License - see LICENSE file
Built with ❤️ for the NestJS community
