What's new?

This page contains some details about the latest changes made to Togglz and which new features have been added in the recent releases.

Togglz 2.3.0.Final

  • Core: Added support for IP ranges to ClientIpActivationStrategy (see #172)
  • Spring Boot: Auto-caching existing StateRepository if enabled (see #164)
  • Spring Boot: Make the properties documentation available in the properties editor in STS and IntelliJ IDEA and other tools (see #165)
  • Spring Boot: Added SpringSecurityUserProvider to condition for SpringSecurityUserProviderConfiguration (see #173)
  • Google App Engine: Prevent the creation of unnecessary transactions (see #167)

Togglz 2.3.0.RC2

  • New Apache Zookeeper integration module. Many thanks to Ryan Gardner and his team for this awesome contribution (see #162)
  • New System Property activation strategy (see #163)
  • Major performance improvements for looking up the FeatureManager (see #158)
  • New JMH benchmark test suite for tracking performance problems (see #159)
  • Fixed issue that caused failing integration tests when using the Spring Boot integration module
  • Some minor improvements in the Spring Boot integration module

Togglz 2.3.0.RC1

  • New Spring Boot Starter module. Many thanks to Marcel Overdijk for his contribution and his help with getting Togglz to work with Spring Boot. (see #134 and #154)
  • New Hazelcast module. Many thanks to Camiel de Vleeschauwer for his contribution. (see #153)
  • Many minor improvements for the Spring BeanFinder implementations which now should work much better especially in non Spring Web environments.
  • New annotation @DefaultActivationStrategy which can be used to specify a default strategy for a feature directly on the enum. (see #141)
  • Many minor improvements and bugfixes...

Togglz 2.2.0.Final

  • New Netflix Archaius module. Many thanks to Richard Steele for his contribution. (see #126)
  • New Cassandra module. Many thanks to Artur Tamazian for his contribution. (see #128)
  • Spring module has been splitted into spring-core and spring-web modules (see #55). Please refer to the updating notes if you are updaing from an earlier version of Togglz.
  • The JUnit TogglzRule now supports feature variations. (see #131)
  • The Togglz Console now supports CSRF tokens created by Spring Security (see #115)
  • New CompositeStateRepository to read feature state from multiple wrapped state repositories.
  • Performance improvements for EnumBasedFeatureProvider (see #121)

Togglz 2.1.0.Final

  • New Google AppEngine module. Many thanks to Fábio Franco Uechi for his work on this.
  • New Guice module. Thanks to Fábio Franco Uechi for this contribution.
  • New MongoDB module providing a MongoDB state repository.
  • Added OSGi manifests to all Togglz modules (see #93)
  • New activation strategy based on SpringSecurity user authorities. (see #67)
  • New ServerNameActivationStrategy for activating features only on certain cluster nodes (see #88)
  • Fixed bug in FeatureProxyFactoryBean that caused issues if proxy was created too early (see #76)
  • Various improvements and bugfixes for CachingStateRepository
  • Performance improvements in FileBasedStateRepository (see #64)
  • Various improvements for the JSP taglib (see #68, #94 and #96)
  • JDBCStateRepository now supports container managed transactions (see #77)
  • Added a builder to simplify the creation and configuration of JDBCStateRepository
  • Fixed Togglz Admin Console to work correctly with JSESSIONID in URL (see #83)
  • Various improvements in the test support modules
  • And much much more...

Togglz 2.0.1.Final

  • Avoid NPE when FeatureManagerFactoryBean.getObjectType() is called before initialization (see #47)
  • Fixed CachingStateRepository to work correctly with NamedFeature (see #56)
  • Added noCommit flag to JDBCStateRepository to support managed connections. (see #77)
  • Allow to specify cache TTL in other time units than millisecond (see #48)
  • Added system property org.togglz.DISABLE_JNDI_LOOKUPS to work around issue when running on GAE
  • Fixed NPE in ServerIpActivationStrategy that occurred if running on GAE
  • Allow users to configure the minCheckInterval of FileBasedStateRepository (see #64)
  • StaticFeatureManagerProvider should use a volatile field to store the FeatureManager (see #59)
  • Make sure FeatureProxyFactoryBean.getObject() isn't called before initialization (see #76)
  • And some more minor fixes...

Togglz 2.0.0.Final

  • Fixed performance issue in FileBasedStateRepository (see #43)
  • Fixed compatibility issue with Microsoft SQL Server (see #41)

Togglz 2.0.0.RC1

  • Togglz now allows you to manage the lifecycle of the FeatureManager using a supported DI container like CDI or Spring. To do so, make sure your container manages an instance of FeatureManager (for example by writing a CDI producer method) and then set org.togglz.FEATURE_MANAGER_PROVIDED in web.xml to true to tell Togglz to skip the automatic bootstrapping process for a FeatureManager managed by Togglz.
  • Added the factory bean FeatureManagerFactory that simplifies the creation of a FeatureManager managed by Spring. See the javadocs for FeatureManagerFactory for details.
  • Added a new extension point that allows users to define custom feature metadata attributes. If you are using Java enums for declaring your features, you can now define your own annotations to specify metadata for your features. Togglz already provides two annotations @Owner and @InfoLink that your can place on your features. If you want to define your own attribute, just create an annotation and place @FeatureAttribute on it. Have a look the source of @Owner for an example.
  • The EnumBasedFeatureProvider now supports multiple enums. This means that you can now split your feature toggles across multiple Java enums.
  • If you are running Togglz in an servlet environment, the TogglzFilter now tries to autodetect whether it should bootstrap a feature manager itself or if you already created one using a supported container like CDI or Spring. This means that you typically don't have to set FEATURE_MANAGER_PROVIDED manually.

Togglz 2.0.0.Beta2

  • The Feature interface doesn't force the user to implement isActive() anymore. Please note that this change requires you to remove the @Override annotation from your implementation of the method.
  • Fixed a bug that caused JDBCStateRepository too work in the wrong database schema (see #38).
  • The new Togglz JSP integration module provides a JSP taglib that simplifies checking feature states in JSP pages. Thanks to Mauro Talevi for his help on this.
  • Added SingleUserProvider to simplify configuration of environments where only one (virtual) user exists.
  • Feature definitions can now be configured using property files instead of a Java enum. This can be especially useful in distributed environments where components doesn't share any code. Thanks to Mauro Talevi for implementing this feature.
  • Added new NamedFeature to replace the deprecated UntypedFeature
  • The Togglz Admin Console is now distributable and therefore works in clustered environments (see #32).

Togglz 2.0.0.Beta1

  • The core classes of Togglz don't assume that features are declared using Java enums any more. This allows users to use different approaches to define which features are available. Users could for example use a database to manage the features and their metadata.
  • The new StaticFeatureManagerProvider simplifies the configuration of Togglz in standalone applications.
  • Two new activation strategies have been added to Togglz. The Client IP strategy allows to enable features only for a specific number of client IP addresses. This strategy is useful if features should be active for users accessing a site from a specific location. The Server IP strategy behaves similar. But instead of the client IP, it uses the server's IP address. This strategy can be used for canary testing if you want to activate a feature only on a specific server of you cluster.
  • Typically users configure Togglz by implementing the TogglzConfig interface. As an alternative to this, you can now implement TogglzBootstrap instead. Doing this allows you to configure more aspects of Togglz as you can directly interact with the FeatureManagerBuilder instead of just configuring some of it's properties.
  • The new SPI FeatureManagerListener has been added which allows you to get notified when Togglz starts up and shuts down. This SPI has been added for other Togglz modules but may also be used directly by the user.
  • The @WithFeature annotation of the JUnit integration module now allows to activate multiple feature at once and may even be used if you want to explicitly disable certain features in a test.

Togglz 2.0.0.Alpha1

  • The most noteworthy change in this version is the new extensible feature activation mechanism, that allows to implement custom strategies for activating features based on arbitrary conditions. As you know, Togglz already allowed to restrict features to a given list of users. Togglz 2.0.0.Alpha1 now also supports to activate features for a given percentage of users (gradual rollouts) or at a specific point in time (timed rollouts). There is also an generic strategy based on Java's ScriptEngine, that allows you to write strategies using script languages (like JavaScript) and update them at runtime.
  • As Togglz now allows to implement custom strategies for activating features, the data model of the persisted feature state had to change. Togglz will automatically migrate the data persisted by previous versions (like the properties file or the database table) to the new format. However this has one drawback. Older versions of Togglz won't be able to read the new data format any more. So going back to an older version of Togglz will be difficult. So please take special care and backup your state repository data.
  • If you are using a custom implementation of the StateRepository interface, you will have to update your implementation to persist the new FeatureState data structure. Have a look at the other state repositories if you have any problems.
  • Please note, that although this release is called 2.0.0.Alpha1, it is considered to be very stable. The main reason for calling it Alpha1 instead of CR1 is, that we are looking for community feedback regarding the new APIs.

Togglz 1.1.1.Final

  • Fixed issue in FileBasedStateRepository and InMemoryStateRepository which may lead to data corruption of the repository data in case of conurrent writes (see #21). Special thanks to Jonas Adler for bringing this up.
  • Fixed SPI implementation ordering issue for priority of Integer.MIN_VALUE (see #22).

Togglz 1.1.0.Final

  • The new CachingStateRepository allows to add caching capabilities to existing state repositories. See the chapter on State Repositories for details.
  • The Spring integration module now contains the FeatureProxyFactoryBean, which allows to use different Spring beans depending on a specific feature state. The Usage chapter contains concrete examples on how to configure this factory bean.
  • It's now possible to define groups of features. These groups will be displayed in different tabs in the Togglz Admin Console. See the Feature Groups chapter to learn how to setup these groups.
  • Togglz now contains special support for handling feature toggles in unit tests. As part of this two new integration modules have been added. The first one provides general support for unit testing and the second one offers advanced support for JUnit. See the new Testing Support chapter for details.

Togglz 1.0.0.Final

  • First official version. No changes since the last release. :)