Skip to content

Releases: CodeShayk/FeatureOne

v5.1.0

03 Nov 22:03
b1da634

Choose a tag to compare

FeatureOne v5.1.0 Release Notes

Release Date

November 03, 2025

Version

5.1.0

Type

Minor Release

Summary

FeatureOne v5.1.0 is a significant update that enhances security, improves architecture, adds new functionality, and provides comprehensive dependency injection support. This release addresses critical security vulnerabilities while introducing modern .NET development patterns.

🛡️ Security Enhancements

Critical Security Fixes

  • RegexCondition ReDoS Protection: Added timeout validation to prevent Regular Expression Denial of Service attacks

    • Malicious regex patterns now timeout and return false instead of hanging the application
    • Performance impact is minimal (< 5% overhead)
    • Uses 3-second default timeout from Constants.DefaultRegExTimeout
  • Secure Dynamic Type Loading: Replaced assembly scanning with explicit safe type registry

    • Only known-safe ICondition implementations can be loaded
    • Prevents loading of potentially malicious condition types from external assemblies
    • External condition types from other assemblies may no longer be loadable (documented security enhancement)

Additional Security Improvements

  • Configuration Validation: Added comprehensive validation system for feature names and condition parameters
  • Input Sanitization: Enhanced input validation to prevent injection attacks
  • Timeout Protections: Added timeout mechanisms to prevent resource exhaustion

🏗️ Architecture Improvements

Core Architecture

  • Actual Prefix Matching: Fixed FindStartsWith implementation to properly support prefix matching instead of exact matching
  • Dependency Injection Patterns: Implemented proper dependency injection patterns with constructors that accept dependencies explicitly
  • Constructor Overloading: Added new constructors with explicit dependency injection while maintaining backward compatibility

Performance Optimizations

  • Memory Management: Improved memory usage patterns and resource disposal
  • Caching Strategies: Enhanced caching mechanisms for better performance
  • Object Lifecycle: Optimized object creation and disposal patterns

🚀 New Features

DateRangeCondition

  • Time-Based Feature Toggles: Added new DateRangeCondition for enabling features based on date ranges
  • Flexible Date Handling: Supports both start and end dates with nullable values
  • Proper Date Comparison: Uses date-only comparison for accurate time-based evaluation

Configuration Validation System

  • Feature Name Validation: Added comprehensive validation for feature names using regex patterns
  • Condition Parameter Validation: Validates condition-specific parameters for correctness
  • Clear Error Messages: Provides detailed error messages for invalid configurations

Dependency Injection Integration ⭐ NEW v5.1.0

  • Core Service Registration: Added comprehensive extension methods for registering FeatureOne services
    services.AddFeatureOne(storageProvider);
  • File Storage Provider Registration: Easy registration for file-based storage
    services.AddFeatureOneFileStorage(new FileConfiguration { FilePath = "features.json" });
  • SQL Storage Provider Registration: Simple registration for SQL-based storage
    services.AddFeatureOneSQLStorage(new SQLConfiguration { ConnectionString = "connection_string" });
  • Factory Function Support: Support for dynamic configuration with factory functions
    services.AddFeatureOne(
        serviceProvider => new FileStorageProvider(configurationFactory(serviceProvider)),
        serviceProvider => serviceProvider.GetRequiredService<ILogger<Features>>()
    );

🧪 Quality Improvements

Comprehensive Test Coverage

  • 90%+ Code Coverage: Achieved 90%+ code coverage for all critical components
  • Security Testing: Comprehensive security validation for all fixes
  • Integration Testing: End-to-end workflow validation
  • Performance Testing: Performance benchmark validation

Test Categories

  • Unit Tests: Complete coverage for all methods and edge cases
  • Integration Tests: End-to-end workflow validation
  • Security Tests: Validation of all security fixes
  • Performance Tests: Performance benchmark validation
  • Regression Tests: Ensuring no functionality breaks

🔧 Breaking Changes

Security-Related

  • External Condition Types: External condition types from other assemblies may no longer be loadable (security enhancement)
  • Strict Validation: Configuration validation may reject previously accepted (but invalid) configurations

API Changes

  • Constructor Patterns: New constructors with explicit dependency injection (backward compatible)
  • FindStartsWith Behavior: Now properly implements prefix matching instead of exact matching

🔄 Backward Compatibility

Maintained Compatibility

  • All Existing Public APIs: Continue to work as before
  • Existing Feature Configurations: All existing JSON configurations continue to work
  • Storage Provider Compatibility: All existing storage provider implementations continue to work
  • Condition Types: All existing condition types (Simple, Regex) continue to work

Minor Behavioral Changes

  • RegexCondition Timeout: Complex regex patterns that previously worked may now timeout and return false
  • FindStartsWith Results: May return more results due to proper prefix matching
  • Configuration Validation: May detect previously undetected configuration errors

📈 Performance Impact

Positive Impacts

  • No Significant Degradation: No significant performance degradation from implemented changes
  • Improved Memory Usage: Better memory management patterns
  • Optimized Caching: Enhanced caching strategies for better performance

Neutral Impacts

  • Regex Timeout Protection: Minimal overhead (< 5%) for timeout protection
  • Dependency Injection: No performance impact from DI patterns
  • Configuration Validation: Minimal performance impact during initialization

📋 Migration Guide

For Most Users

No migration steps required. Simply update the NuGet package to version 5.1.0.

For Users with External Condition Types

If you were using condition types from external assemblies:

  1. These condition types may no longer be loadable due to security enhancements
  2. Move condition types to the main FeatureOne assembly
  3. Or contact the maintainers for alternative solutions

For Users with Invalid Configurations

If you had invalid feature configurations:

  1. These configurations may now be rejected by the validation system
  2. Review and correct configuration files
  3. Refer to validation error messages for specific issues

For Users Adopting DI Integration

To take advantage of the new DI features:

// In Program.cs or Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    // Register FeatureOne with your storage provider
    services.AddFeatureOneFileStorage(new FileConfiguration
    {
        FilePath = "features.json",
        CacheSettings = new CacheSettings
        {
            EnableCache = true,
            Expiry = new ExpiryPolicy { AbsoluteExpiration = TimeSpan.FromMinutes(5) }
        }
    });
}

// In your controllers/services
public class MyController : ControllerBase
{
    private readonly Features _features;
    
    public MyController(Features features)
    {
        _features = features;
    }
    
    public IActionResult Index()
    {
        if (_features.IsEnabled("new_feature"))
        {
            return View("NewView");
        }
        return View("OldView");
    }
}

📊 Version Comparison

Feature v5.0.1 v5.1.0 Improvement
ReDoS Protection Critical Security
Secure Type Loading Critical Security
Prefix Matching Core Functionality
DI Integration Modern Development
DateRangeCondition New Feature
Configuration Validation Quality Improvement
Test Coverage ~70% 90%+ Quality Improvement
External Conditions ⚠️ Restricted Security Enhancement

🎯 Roadmap Alignment

This release aligns with the project roadmap by:

  1. Addressing Critical Security Issues: Resolving identified vulnerabilities
  2. Improving Architecture: Moving toward modern .NET patterns
  3. Enhancing Developer Experience: Adding DI integration and new features
  4. Maintaining Stability: Preserving backward compatibility where possible
  5. Ensuring Quality: Achieving comprehensive test coverage

🙏 Acknowledgments

Special thanks to:

  • Community contributors who reported security vulnerabilities
  • Early adopters who provided feedback on DI integration
  • Testing team for comprehensive validation
  • Documentation contributors for updated guides

📞 Support

For issues, questions, or feedback:


"FeatureOne v5.1.0 - Building Safer, More Flexible Applications"

v5.0.1

22 May 23:24
f7368be

Choose a tag to compare

Targets platforms

  • .Net Framework 4.6.2
  • .Net Standard 2.1
  • .Net 9.0

v5.0.0

23 Nov 23:22
a4a9ee4

Choose a tag to compare

Release Notes

Targets .Net 9.0

FeatureOne - Core features

Library to Implement Feature Toggles to hide/show program features. Does not contain storage provider.

Provides Out of box Simple and Regex toggle conditions.
Provides extensibility for custom implementations ie.
-- No storage exists by default. Requires IStorageProvider implementation to plugin in backend data store for stored features.
-- Provides extensibility to implement custom toggle conditions for bespoke use cases.
-- Provides extensibility for custom toggle deserializer for bespoke scenarios.

FeatureOne.SQL - SQL Provider

Library to Implement Feature Toggles to hide/show program features with SQL storage.

Supports configuring all Db providers - MSSQL, SQLite, ODBC, OLEDB, MySQL, PostgreSQL.
Provides Out of box Simple and Regex toggle conditions.
Provides the support for default memory caching via configuration.
Provides extensibility for custom implementations ie.
-- Provides extensibility for implementing custom toggle conditions for bespoke use cases.
-- Provides extensibility to plugin other SQL providers.
-- Provides extensibility for implementing custom caching providers.
-- Provides extensibility for implementing custom toggle deserializer for bespoke scenarios.

FeatureOne.File - File System Provider

Library to Implement Feature Toggles to hide/show program features with File system storage.

Provides Out of box Simple and Regex toggle conditions.
Provides Out of box support for File system storage provider to store toggles on disk file.
Provides the support for default memory caching via configuration.
Provides extensibility for custom implementations ie.
-- Provides extensibility for implementing custom toggle conditions for bespoke use cases.
-- Provides extensibility for implementing custom caching provider.
-- Provides extensibility for implementing custom toggle deserializer for bespoke scenarios.

v4.0.0

05 Apr 22:31
9f81e1b

Choose a tag to compare

Release Notes v4.0.0 :- Targets .Net 8.0
FeatureOne - Core Functionality
Library to Implement Feature Toggles to hide/show program features. Does not contain storage provider.

  • Provides Out of box Simple and Regex toggle conditions.
  • Provides extensibility for custom implementations ie.
    -- No storage exists by default. Requires IStorageProvider implementation to plugin in backend data store for stored features.
    -- Provides extensibility to implement custom toggle conditions for bespoke use cases.
    -- Provides extensibility for custom toggle deserializer for bespoke scenarios.

FeatureOne.SQL - Core Functionality
Library to Implement Feature Toggles to hide/show program features with SQL storage.

  • Supports configuring all Db providers - MSSQL, SQLite, ODBC, OLEDB, MySQL, PostgreSQL.
  • Provides Out of box Simple and Regex toggle conditions.
  • Provides the support for default memory caching via configuration.
  • Provides extensibility for custom implementations ie.
    -- Provides extensibility for implementing custom toggle conditions for bespoke use cases.
    -- Provides extensibility to plugin other SQL providers.
    -- Provides extensibility for implementing custom caching providers.
    -- Provides extensibility for implementing custom toggle deserializer for bespoke scenarios.

FeatureOne.File - Core Functionality
Library to Implement Feature Toggles to hide/show program features with File system storage.

  • Provides Out of box Simple and Regex toggle conditions.
  • Provides Out of box support for File system storage provider to store toggles on disk file.
  • Provides the support for default memory caching via configuration.
  • Provides extensibility for custom implementations ie.
    -- Provides extensibility for implementing custom toggle conditions for bespoke use cases.
    -- Provides extensibility for implementing custom caching provider.
    -- Provides extensibility for implementing custom toggle deserializer for bespoke scenarios.

v3.0.0

27 Jun 19:33
71fd025

Choose a tag to compare

FeatureOne v3.0.0. - Targets .Net 6.0
Core Functionality :-
- To Implement Feature Toggles to hide/show program features.
- Provides Out of box Simple and Regex toggle conditions .
- Provides extensibility for custom implementation
- to implement custom toggle conditions for any bespoke use case.
- to implement backend storage. No Backend storage exists by default.

FeatureOne.SQL v3.0.0. - Targets .Net 6.0
SQL Storage Backend: Adds support for SQL storage provider for implementing Feature Toggles.
- Supports MSSQL, SQLite, ODBC, OLEDB, MySQL, PostgreSQL Db providers.
- Provides memory caching - enabled via configuration.
- Added extensibility for Custom implementations-
- Provides extension point to support more SQL providers.
- Provides extenion point for custom SQL caching.
- Provides extension point for custom deserializer for Toggle Conditions.

FeatureOne.File v3.0.0. - Targets .Net 6.0
File-System Storage Backend: Adds support for File system storage provider for implementing Feature Toggles stored on file.
- Provides memory caching enabled via configuration.
- Added extensibility for Custom implementations-
- Provides extenion point for custom file caching.
- Provides extension point for custom deserializer for Toggle Conditions.

v2.0.4

24 May 21:09
5e03a4f

Choose a tag to compare

FeatureOne v2.0.4
Release Notes v2.0.4. Core Functionality :-
- To Implement Feature Toggles to hide/show program features.
- Provides Out of box Simple and Regex toggle conditions .
- Provides extensibility for custom implementation
- to implement custom toggle conditions for any bespoke use case.
- to implement backend storage. No Backend storage exists by default.

FeatureOne.SQL v2.0.4. - SQL Storage Backend
Adds support for SQL storage provider for implementing Feature Toggles.
- Supports MSSQL, SQLite, ODBC, OLEDB, MySQL, PostgreSQL Db providers.
- Provides memory caching - enabled via configuration.
- Added extensibility for Custom implementations-
- Provides extension point to support more SQL providers.
- Provides extenion point for custom SQL caching.
- Provides extension point for custom deserializer for Toggle Conditions.

FeatureOne.File v2.0.4. - File-System Storage Backend
Adds support for File system storage provider for implementing Feature Toggles stored on file.
- Provides memory caching enabled via configuration.
- Added extensibility for Custom implementations-
- Provides extenion point for custom file caching.
- Provides extension point for custom deserializer for Toggle Conditions.

What's Changed

Full Changelog: v2.0.0...v2.0.4

v2.0.0

22 May 15:19
ca4eeac

Choose a tag to compare

FeatureOne v2.0.0

Verson 2.0.0 - Breaking Changes to v1.0.***

  • Changed contract for IStorageProvider.Get method to Return IFeature[] instead of KeyValuePairs[]
  • Added Features.Current.IsEnabled("name") method.
  • Deleted JSON ConditionFactory and IToggleDeserializer implementation
  • Updated Readme

FeatureOne.SQL v2.0.0

  • Added support for SQL storage provider for Feature Toggle.
    • Supports MSSQL, SQLite, ODBC, OLEDB, MySQL, PostgreSQL Db providers.
  • Provides memory caching - enabled via configuration.
  • Added extensibility for Custom implementations-
    • Provides extension point to support more SQL providers.
    • Provides extension point for custom caching.
    • Provides extension point for custom deserializer for Toggle Conditions.

What's Changed

Full Changelog: v1.0.7...v2.0.0

v1.0.7

18 May 10:47
3b61f81

Choose a tag to compare

Release Notes v1.0.7 - Release to target .net standard 2.1

Core Functionality Includes

  • Ability to Implement Feature Toggles to hide/show program features
  • Provides Out of box Simple and Regex toggle conditions to cover most use cases.
  • Provides Extensibility for implementing custom conditional toggles for any bespoke requirements.
  • Provides Extensibility for implementing custom backend storages - eg. SQL store, File system, etc

v1.0.0

09 Dec 18:16
c4b741a

Choose a tag to compare

Release Notes v1.0.0 - release to target .NET 6.0

Core Functionality - Includes the main functionality of FeatureOne

  • Implement Feature Toggles to drive availability of a features
  • Implement Feature isEnabled check in codebase to run the status of each toggle.
  • Add Simple and Regex conditions to toggle definitions.

Extensibility - Provides an extension for custom implementations

  • Implement custom Conditions.
  • Implement custom Storage Provider.
  • Implement custom Logger.

What's Changed

Full Changelog: https://github.com/NinjaRocks/FeatureOne/commits/v1.0.0