Feature Flag & Remote Config Service

Release features with confidence; manage feature flags across web, mobile, and server side applications. Use our hosted API, deploy to your own private cloud, or run on-premises

Start For Free
flagsmith-import.js
1import flagsmith from 'flagsmith';
2
3flagsmith.init({
4  environmentID: 'QjgYur4LQTwe5HpvbvhpzK',
5});
6
7const App = () => (
8    <Layout 
9      darkMode={flagsmith.hasFeature("dark_mode")}
10      designV2={flagsmith.hasFeature("design_v2")}
11    >
12      {flagsmith.hasFeature("chat") && <ChatWidget>}
13    </Layout> 
14)
15 
Features
Chat
Design 2.0
Dark mode

Trusted by top development teams

Starbucks logo
Amway logo
Nike logo
Cognizant logo
Financial Times logo
Capita logo
Aer Lingus logo

Feature flags

Flagsmith provides an all-in-one platform for developing, implementing, and managing your feature flags. Whether you are moving off an in-house solution or using toggles for the first time, you will be amazed by the power and efficiency gained by using Flagsmith.

  • Flagsmith makes it easy to create and manage feature toggles across web, mobile, and server-side applications. Just wrap a section of code with a flag, and then use Flagsmith to manage that feature.
  • Manage feature flags by development environment, and for individual users, a segment of users, or a percentage. This means quickly implementing practices like canary deployments.
  • Multivariate flags allow you to use a percentage split across two or more variations for precise A/B/n testing and experimentation.
Learn More

You can configure features for individual Segments, Users, and development Environments.

Remote config

Flagsmith combines the value of feature toggles with the flexibility of remote config, making it easier than ever to test and deploy new features. That’s because all flags in Flagsmith are capable of being configured for remote config. What does that mean for you? As well as toggling a flag, with remote config you can customize values for your features, allowing you to deploy functional and visual changes to your users without changing any code or pushing out any updates.

  • Remote config lets you alter an application in real-time, without having to wait for a deployment or app store approval.
  • Configure different elements of your features–like checkout payment options of the color of a button–directly through Flagsmith and release the changes to users in just a few clicks.
  • Develop user segments based on traits or behaviors, then alter the application experience for subsections of your user base quickly and easily.
Learn More

Release with Confidence

User traits

Flagsmith makes it easy to store traits associated with your users without modifying your back-end or worrying about transferring data. Do you know who your early adopters are? What about your most active users? Understanding your user base lets you roll out updates strategically.

User segments

Want your power users to be the first to test new features? Create detailed user segments based on stored traits, then roll out features based on those segments. As a feature is released, segments can be added or removed without requiring an update or any code changes. Test in production by making internal users or specific teams a segment and only exposing it to these internal segments. Nothing gives a release more confidence than having already been tested in production.

Staged feature rollouts

If you’re not sure how a new feature will perform, why roll it out to your entire user base right away? Our platform lets you deploy features to a percentage of your user base. It’s easy to roll out to more users, and eventually to everyone if features perform well; or roll back updates that don’t perform as expected. Flagsmith integrates with popular customer data platforms and analytics products, so you can utilize the tools you already use to analyze the results of tests and fine-tune your application.

Track changes

The only thing worse than rolling out a feature with bugs is not being able to revert back. Tracking changes to your application lets you pinpoint what edits were made when the error arose so you can undo the offending update. Flagsmith logs all changes for auditing and to make rolling back any features painless. Since the feature was launched with a feature flag, that rollback will be as simple as switching a toggle.

Available in many languages

We currently support these popular languages and frameworks

Learn More
  • Rest
  • React Native
  • Node
  • Android
  • IOS
  • Flutter
  • Java
  • Python
  • Ruby
  • .NET
  • GO
  • Rust
  • PHP
  • Elixir
1$ curl 'https://api.flagsmith.com/api/v1/flags/' 
2-H 'X-Environment-Key: TijpMX6ajA7REC4bf5suYg' | jq
3
4[
5  {
6    "id": 131,
7    "feature": {
8      "id": 56,
9      "name": "kyc_button",
10      "created_date": "2018-06-28T13:30:09.983174Z",
11      "description": null,
12      "initial_value": null,
13      "default_enabled": true,
14      "type": "FLAG"
15    },
16    "feature_state_value": null,
17    "enabled": true,
18    "environment": 12,
19    "identity": null,
20    "feature_segment": null
21  }
22]
1import flagsmith from 'react-native-flagsmith';
2
3flagsmith.init({
4  environmentID: 'QjgYur4LQTwe5HpvbvhpzK',
5});
6
7const App = () => (
8    <>
9      {flagsmith.hasFeature("chat_widget") && <ChatWidget>}
10    </> 
11)
1const flagsmith = require("flagsmith-nodejs"); 
2
3flagsmith.init({
4  environmentID: 'QjgYur4LQTwe5HpvbvhpzK',
5});
6
7const featureEnabled = 
8   await flagsmith.hasFeature('chat_widget');
1implementation 'com.flagsmith:flagsmith-java-client:2.3'
2
3FlagsmithClient flagsmithClient = 
4         FlagsmithClient.newBuilder()
5         .setApiKey("QjgYur4LQTwe5HpvbvhpzK")
6         .build();
7
8if (flagsmithClient.hasFeatureFlag("chat_widget");) {
9  userInterface.chatWidgetEnable()
10} else {
11	return false;
12}
1pod 'FlagsmithClient', '~> 1.0'
2
3import FlagsmithClient
4
5func application(_ application: UIApplication, 
6  didFinishLaunchingWithOptions launchOptions: 
7  [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
8Flagsmith.shared.apiKey = "QjgYur4LQTwe5HpvbvhpzK"
9
10Flagsmith.shared.getFeatureFlags() { (result) in
11    switch result {
12    case .success(let flags):
13        for flag in flags {
14            let name = flag.feature.name
15            let value = flag.value
16            let enabled = flag.enabled
17            print(name, "= enabled:", enabled, "value:", value ?? "nil")
18        }
19}
1dependencies:
2  flagsmith:
3
4var flagsmith = 
5  FlagsmithClient(apiKey: 'QjgYur4LQTwe5HpvbvhpzK')
6
7bool featureEnabled = 
8  await flagsmith.hasFeatureFlag("chat_widget");
9if (featureEnabled) {
10    // run the code to execute enabled feature
11}
12
13var user = FeatureUser(identifier: 'flagsmith_sample_user');
14bool featureEnabled = a
15  wait flagsmith.hasFeatureFlag('chat_widget', user: user);
16if (featureEnabled) {
17    // run the code to execute enabled feature for given user
18}
1<dependency>
2  <groupId>com.flagsmith</groupId>
3  <artifactId>flagsmith-java-client</artifactId>
4  <version>2.3</version>
5</dependency>
6
7FlagsmithClient flagsmithClient = FlagsmithClient.newBuilder()
8                .setApiKey("QjgYur4LQTwe5HpvbvhpzK")
9                .build();
10
11if (flagsmithClient.hasFeatureFlag("chat_widget");) {
12  userInterface.chatWidgetEnable()
13} else {
14	return false;
15}
1$ pip install flagsmith
2
3from flagsmith import Flagsmith;
4
5fs = Flagsmith(environment_id="QjgYur4LQTwe5HpvbvhpzK")
6
7if fs.has_feature("header"):
8  if fs.feature_enabled("header"):
9    # Show my awesome cool new feature to the world
10
11value = fs.get_value("header", '<My User Id>')
12
13value = fs.get_value("header")
14
15fs.set_trait("accept-cookies", "true", "ben@flagsmith.com))
16fs.get_trait("accept-cookies", "ben@flagsmith.com"))
1$ gem install flagsmith
2
3require "flagsmith"
4
5flagsmith = Flagsmith.new("<<Your API KEY>>")
6
7if flagsmith.get_value("font_size")
8  #    Do something awesome with the font size
9end
10
11if flagsmith.feature_enabled?("does_not_exist")
12  #do something
13else
14  #do nothing, or something else
15end
1$ dotnet add package Flagsmith --version 3.0.0
2
3FlagsmithConfiguration configuration = new FlagsmithConfiguration()
4{
5    ApiUrl = "https://api.flagsmith.com/api/v1/",
6    EnvironmentKey = "QjgYur4LQTwe5HpvbvhpzK"
7};
8
9FlagsmithClient client = new FlagsmithClient(configuration);
10bool featureEnabled = await FlagsmithClient.instance.HasFeatureFlag("chat_widget");
11if (featureEnabled) {
12    // run the code to execute enabled feature
13} else {
14    // run the code if feature switched off
15}
1$ go get github.com/flagsmith/flagsmith-go-client
2
3import (
4  "github.com/flagsmith/flagsmith-go-client"
5)
6
7bt := bullettrain.DefaultBulletTrainClient("QjgYur4LQTwe5HpvbvhpzK")
8
9enabled, err := bt.FeatureEnabled("chat_widget")
10if err != nil {
11    log.Fatal(err)
12} else {
13    if (enabled) {
14        fmt.Printf("Feature enabled")
15    }
16}
1# Cargo.toml
2flagsmith = "0.2.0"
3
4let fs = flagsmith::Client::new("QjgYur4LQTwe5HpvbvhpzK");
5
6if fs.feature_enabled("chat_widget")? {
7    println!("Feature enabled");
8}
9
10if let Some(Value::String(s)) = fs.get_value("cart_abundant_notification_ab_test")? {
11    println!("{}", s);
12}
1composer require flagsmith/flagsmith-php-client
2
3$fs = new Flagsmith('QjgYur4LQTwe5HpvbvhpzK');
4
5$flags = $fs->getFlags();
6foreach ($flags as &$value) {
7    print_r($value);
8}
1def deps do
2  [
3    {:flagsmith_elixir_sdk, "~> 0.1"}
4  ]
5end
6
7config :flagsmith_elixir_sdk, :sdk,
8       environment_key: "YOUR-ENV-KEY",
9       base_url: "YOUR-BASE-URL"
10
11{:ok, sdk_client} = Flagsmith.SDK.new("YOUR-ENV-KEY")
12
13Flagsmith.SDK.API.flags_list(sdk_client)
14

Flexible deployment options

Cloud

  • Try our enterprise-grade cloud offering hosted by Flagsmith
  • Flagsmith cloud gets you get up and running instantly
Learn More

Private Cloud

  • Fully managed private deployments
  • Have us host in your own private instance
  • Protect yourself with increased security
Learn More

On-Prem

  • Self host on-premises or in your own cloud
  • On-prem feature flags are ideal for privacy-conscious organizations
  • Includes premium support from the Flagsmith team
  • Easily deploy with familiar tools like Helm for Kubernetes and our OpenShift Operator
Learn More

Get started

Enhance customer experience by bringing feature flags to your projects

Start Free Trial