This page contains some details about the latest changes made to Togglz and which new features have been added
in the recent releases.
Core: Added support for IP ranges to ClientIpActivationStrategy
Spring Boot: Auto-caching existing StateRepository if enabled
Spring Boot: Make the properties documentation available in the properties
editor in STS and IntelliJ IDEA and other tools
Spring Boot: Added SpringSecurityUserProvider to condition for
Google App Engine: Prevent the creation of unnecessary transactions
New Apache Zookeeper integration module. Many thanks to
Ryan Gardner and his team
for this awesome contribution
New System Property activation strategy
Major performance improvements for looking up the FeatureManager
New JMH benchmark test suite for tracking performance problems
Fixed issue that caused failing integration tests when using the
Spring Boot integration module
Some minor improvements in the Spring Boot integration module
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
New Hazelcast module. Many thanks to
Camiel de Vleeschauwer for his contribution.
Many minor improvements for the Spring
BeanFinder implementations which
now should work much better especially in non Spring Web environments.
@DefaultActivationStrategy which can be used to specify a
default strategy for a feature directly on the enum.
Many minor improvements and bugfixes...
New Netflix Archaius module. Many thanks to
Richard Steele for his contribution.
New Cassandra module. Many thanks to
Artur Tamazian for his contribution.
Spring module has been splitted into
(see #55). Please refer to the
updating notes if you are updaing from an earlier version
TogglzRule now supports feature variations.
The Togglz Console now supports CSRF tokens created by Spring Security
CompositeStateRepository to read feature state from multiple
wrapped state repositories.
Performance improvements for EnumBasedFeatureProvider
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
New activation strategy based on SpringSecurity user authorities.
ServerNameActivationStrategy for activating features only on certain
cluster nodes (see #88)
Fixed bug in
FeatureProxyFactoryBean that caused issues if proxy was created too early
Various improvements and bugfixes for
Performance improvements in
Various improvements for the JSP taglib
JDBCStateRepository now supports container managed transactions
Added a builder to simplify the creation and configuration of
Fixed Togglz Admin Console to work correctly with JSESSIONID in URL
Various improvements in the test support modules
And much much more...
Avoid NPE when
FeatureManagerFactoryBean.getObjectType() is called before initialization
CachingStateRepository to work correctly with
noCommit flag to
JDBCStateRepository to support managed connections.
Allow to specify cache TTL in other time units than millisecond
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
StaticFeatureManagerProvider should use a volatile field to store the
FeatureProxyFactoryBean.getObject() isn't called before initialization
And some more minor fixes...
Fixed performance issue in
Fixed compatibility issue with Microsoft SQL Server
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
true to tell Togglz to skip the automatic bootstrapping process
FeatureManager managed by Togglz.
Added the factory bean
FeatureManagerFactory that simplifies the creation of a
FeatureManager managed by Spring. See the javadocs for
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
@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
for an example.
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 interface doesn't force the user to implement
Please note that this change requires you to remove the
@Override annotation from your implementation of
Fixed a bug that caused
JDBCStateRepository too work in the wrong database schema
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.
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.
NamedFeature to replace the deprecated
The Togglz Admin Console is now distributable and therefore works in clustered environments
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.
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.
@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.
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
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.
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
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
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
First official version. No changes since the last release. :)