Feature Flags System
Trezor Suite uses feature flags to enable or disable specific features at build time, allowing different builds for different environments without code duplication.Overview
Feature flags provide:Build Variants
Create platform-specific builds
Gradual Rollout
Test features before full release
Environment Control
Different features for dev/prod
A/B Testing
Experimental feature testing
Flag Definition
All flags defined in central location:Naming Conventions
Always Capitals
Always Capitals
No Enable/Disable Prefix
No Enable/Disable Prefix
No 'Flag' Suffix
No 'Flag' Suffix
Add Comments
Add Comments
Environment Overrides
Override flags per environment:Desktop Overrides
Web Overrides
Mobile Overrides
Usage in Code
Checking Flags
Use utility function:Conditional Rendering
Wrap feature code:Hook Usage
React hook for flags:Route Protection
Protect routes based on flags:Build-Time Optimization
Flags enable dead code elimination:Webpack Configuration
Tree Shaking
Disabled features removed from bundle:Flag Types
Boolean Flags
Simple on/off:Object Flags
Complex configuration:Function Flags
Computed at runtime:Common Flags
Frequently used feature flags:- User Features
- Technical
- Development
Integration with Message System
Feature flags can be controlled remotely:Testing with Flags
Test Different Configurations
Mock Flags
Runtime vs Build-Time
Build-Time Flags (Recommended)
Compiled into build:Pros
- Dead code elimination
- Smaller bundle size
- Better performance
- Type-safe
Cons
- Requires rebuild
- Cannot change after build
- Different builds per environment
Runtime Flags
Evaluated at runtime:Pros
- Can change without rebuild
- Remote control possible
- Same build everywhere
- A/B testing support
Cons
- All code in bundle
- Larger bundle size
- Performance overhead
- More complex
Best Practices
When to Use Flags
When to Use Flags
- Unfinished features: Hide work-in-progress
- Platform differences: Desktop vs Web vs Mobile
- Experimental features: Test before release
- Optional features: Let users choose
- Emergency disable: Quick feature disable
When NOT to Use Flags
When NOT to Use Flags
- Stable features: Don’t flag everything
- Core functionality: Essential features shouldn’t be flagged
- User settings: Use proper settings instead
- Temporary fixes: Remove flag after fix
Flag Lifecycle
Flag Lifecycle
- Add flag: New feature development
- Enable in dev: Test in development
- Enable in staging: QA testing
- Enable in prod: Release to users
- Remove flag: After stable release
Debugging
View Active Flags
Debug menu shows all flags:Override Flags Locally
For testing:Implementation Files
Future Enhancements
Planned improvements:
- Runtime control: Change flags without rebuild
- User preferences: Let users enable experimental features
- Gradual rollout: Enable for percentage of users
- Kill switches: Emergency disable via API