Togglz

What is it about?

Togglz is an implementation of the Feature Toggles pattern for Java. Feature Toggles are a very common agile development practices in the context of continuous deployment and delivery. The basic idea is to associate a toggle with each new feature you are working on. This allows you to enable or disable these features at application runtime, even for individual users.

Want to learn more? Have a look at an usage example or check the quickstart guide.

News

21-Feb-2014
Togglz 2.0.1.Final released

We are happy to announce the release of Togglz 2.0.1.Final. This version fixes various bugs in Togglz 2.0.0.Final which have been reported by the community. Have a look at the what's new for details.

01-Jul-2013
Togglz 2.0.0.Final released

I'm very happy to announce the release of Togglz 2.0.0.Final. This new version is the result of many months of hard work. Many core concepts of Togglz have been revised to provide much more flexibility.

The most noteworthy change in Togglz 2.0.0.Final is the new extendible feature activation mechanism that allows to implement custom strategies for activating features. Beside that there are many other updates. You can learn more about them on the what's new page.

If you are updating from Togglz 1.1.x, you should have a look at the updating notes. You can get the new version from the download page. Feel free to post on the forums if you have any problems with updating.

01-Apr-2013
Togglz 2.0.0.Beta1 and 1.1.1.Final released
We are very proud to announce two Togglz releases today. Togglz 1.1.1.Final is a bugfix release of the 1.1.x branch. If you are currently using Togglz 1.1.0.Final, you should update to this version soon, because it fixes some concurrency issues in the state repositories.
At the same time we have released Togglz 2.0.0.Beta1, which is the latest version of the new 2.x branch. So if you want to have a look at the latest and greatest version of Togglz, you should give it a try. Please have a look at the what's new section to learn about the major changes and the things to take care of before doing the update.
18-Oct-2012
Togglz 1.1.0.Final released
I'm very proud to announce the release of Togglz 1.1.0.Final. This version is the result of various feedback from the community. You can get the new version from the download page and check out what's new.
01-Oct-2012
Togglz article in JavaMagazin 2012/11
The current issue of the German JavaMagazin comes with an article describing how to start practicing continuous delivery with Togglz. The article is called On and off - Togglz: Feature Toggle für Java-Applikationen. You are are speaking German and are interested in Togglz? In this case you should get a copy of the latest JavaMagazin.
03-Jul-2012
Togglz session on gearconf 2012
My Togglz session on gearconf 2012 was a huge success. I got awesome feedback which confirmed, that Togglz is the perfect first step into the world of continuous delivery. If you are interested in the session, you can have a look at the slides and the video (both in German).

Why should you choose Togglz?

Because Togglz...

  • allows you to declare your features using a regular Java enum type.
  • is configured in a type-safe way by implementing a single interface.
  • provides integration with popular frameworks like CDI, Spring, JSF, etc.
  • supports different backends for storing toggle states (JDBC database, Java property files, etc)
  • can be integrated with your user identity management which allows to enable features only for specific users.
  • integrates with common security frameworks like JAAS, Spring Security, Seam Security and Apache Shiro.
  • supports complex application packaging scenarios like EARs, skinny WARs, etc.
  • ships with an embedded web-based admin console to manage feature states.

Example

Features are declared using a regular Java enum type:

public enum MyFeatures implements Feature {

    @Label("First Feature")
    FEATURE_ONE,
    
    @Label("Second Feature")
    FEATURE_TWO;
    
    public boolean isActive() {
        return FeatureContext.getFeatureManager().isActive(this);
    }
    
}

Checking whether a specific feature is enabled for the current user is very simple. Just call the isActive() method on the feature.

public void someBusinessMethod() {

  if( MyFeatures.FEATURE_ONE.isActive() ) {
    // do new exciting stuff here
  }

  [...]
  
}

You can find more details in the quickstart guide.