Create your free Rollouts account

Free, no credit card needed.

Ship faster with less risk

Free feature flags for developers
  • Unlimited seats and feature flags
  • Remotely enable and disable features without deploys
  • Run betas or provision features to specific audiences

Works in the languages you do with zero-latency SDKs

Try out the Optimizely Rollouts demo

Reduce risk and recover faster from failure

Say goodbye to messy rollbacks and hotfixes. Instead, use feature flags to roll out to a small percentage of users to reduce risk and fail safer. If you detect errors, performance spikes, or user backlash, just roll back - all without redeploying code. Rollouts make your release process more resilient.

Better continuous delivery with Rollouts

Stop dealing with painful merge conflicts. Move away from long-lived feature branches and start adopting feature flags for greater development velocity, safer code deployments, and increased developer productivity.

Fast decision engine

Roll out features in performance-critical codepaths. Our SDKs bucket users in memory so rollouts have no impact on latency.

Open platform

Open-source SDKs with pluggable components give you control over network activity.

Read the Docs

Get integrated with quickstarts for every language.

                      
              import optimizely
              optimizely_client = optimizely.Optimizely(datafile)
              
              

# Evaluate a feature flag

enabled = optimizely_client.is_feature_enabled('my_feature', 'user_123') if enabled:

# Show your feature

else:

# Hide your feature

                      
              import com.optimizely.ab.Optimizely;
              
              Optimizely optimizely = Optimizely.builder(datafile).build();
              
              

// Evaluate a feature flag

Boolean enabled = optimizely.isFeatureEnabled("my_feature", "user_123"); if (enabled) {

// Show your feature

} else {

// Hide your feature

}
                      
              import "optimizely"
              
              optimizely_client = Optimizely::Project.new(datafile)
              
              

# Evaluate a feature flag

enabled = optimizely_client.is_feature_enabled('my_feature', 'user_123') if enabled

# Show your feature

else

# Hide your feature

end
                      
              const optimizely = require('@optimizely/optimizely-sdk');
              
              const optimizelyClient = optimizely.createInstance({ datafile: datafile });
              
              

// Evaluate a feature flag

const enabled = optimizelyClient.isFeatureEnabled('my_feature', 'user_123'); if (enabled) {

// Show your feature

} else {

// Hide your feature

}
                      
              use Optimizely\Optimizely;
              
              

// Initialize an Optimizely client

$optimizelyClient = new Optimizely($datafile);

// Evaluate a feature flag

$enabled = $optimizelyClient->isFeatureEnabled('my_feature', 'user_123'); if (enabled) {

// Show your feature

} else {

// Hide your feature

}
                      
              using OptimizelySDK;
              
              

// Initialize an Optimizely client

Optimizely OptimizelyClient = new Optimizely(datafile);

// Evaluate a feature flag

bool enabled = OptimizelyClient.IsFeatureEnabled("my_feature", "user_123"); if (enabled) {

// Show your feature

} else {

// Hide your feature

}
                      
              import optimizelySDK from '@optimizely/optimizely-sdk';
              
              

// Initialize an Optimizely client

const optimizelyClientInstance = optimizelySDK.createInstance({ datafile: datafile });

// Evaluate a feature flag

const enabled = optimizelyClientInstance.isFeatureEnabled('my_feature', 'user_123'); if (enabled) {

// Show your feature

} else {

// Hide your feature

}
                      
              // In AppDelegate.m
              #import 
              
              

// Initialize an Optimizely manager

OPTLYManager *optlyManager = [[OPTLYManager alloc] initWithBuilder:[OPTLYManagerBuilder builderWithBlock:^(OPTLYManagerBuilder * _Nullable builder) { builder.sdkKey = @''; }]];

// Initialize an Optimizely client

[optlyManager initializeWithCallback:^(NSError * _Nullable error, OPTLYClient * _Nullable client) {

// Evaluate a feature flag

bool enabled = [client isFeatureEnabled:@"new_feature" userId:@"user123" attributes: nil]; if (enabled) {

// Show your feature

} else {

// Hide your feature

} }];
                      
              import Optimizely
              
              

// Initialize an Optimizely client

optimizely = OptimizelyClient(sdkKey: @'') try optimizely!.start(datafile: datafile)

// Evaluate a feature flag

let enabled = try optimizely.isFeatureEnabled(featureKey: "my_feature_key", userId: "user_123") if enabled {

// Show your feature

} else {

// Hide your feature

}
                        
              import com.optimizely.ab.Optimizely;
              
              Optimizely optimizely = Optimizely.builder(datafile).build();
              
              

// Evaluate a feature flag

Boolean enabled = optimizely.isFeatureEnabled("my_feature", "user_123"); if (enabled) {

// Show your feature

} else {

// Hide your feature

}