Feature Flag & Remote Config Service

Use our hosted API, deploy to your own private cloud, or run on-premises

Start free trial
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

Feature flags

  • Flagsmith makes it easy to create and manage features flags across web, mobile, and server-side applications.
  • Just wrap a section of code with a flag, and then use Flagsmith to toggle that feature on or off for different environments, users or user segments.
Learn More

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

Remote config

  • With Flagsmith’s remote config capabilities, you can easily change or test out different feature properties without deploying new code.
  • Configure different elements of your features–like the font size of a header or color of a CTA button–directly through Flagsmith and release the changes to users in just a few clicks.
Learn More

Fully featured platform

User traits

Store traits against your users without modifying your back-end and target features specifically for them.

User segments

Create detailed user segments based on their traits, then target features based on the segment.

Staged feature rollouts

Deploy features to 1% of your user base. All good? Roll out to everybody.

Track changes

Audit changes & rollback any mistakes or issues.

Available for these languages

We currently support these popular languages

Learn More
  • Rest
  • React Native
  • Node
  • Android
  • IOS
  • Flutter
  • Java
  • Python
  • Ruby
  • .NET
  • GO
  • Rust
  • PHP
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 React from 'react';
2import { Text, View } from 'react-native';
3
4const HelloWorldApp = () => {
5  return (
6    <View
7      style={{
8        flex: 1,
9        justifyContent: "center",
10        alignItems: "center"
11      }}>
12      <Text>Hello, world!</Text>
13    </View>
14  )
15}
16export default HelloWorldApp;
17      
1import flagsmith from 'flagsmith';
2
3flagsmith.init({
4  environmentID: 'QjgYur4LQTwe5HpvbvhpzK',
5});
6
7function Main(props) {
8  if (flagsmith
9  .hasFeature("chat_widget")){
10    return <ChatWidget/>;
11  }
12}
13      
1implementation 'com.flagsmith:flagsmith-java-client:2.3'
2
3FlagsmithClient flagsmithClient = FlagsmithClient.newBuilder()
4                .setApiKey("QjgYur4LQTwe5HpvbvhpzK")
5                .build();
6
7if (flagsmithClient.hasFeatureFlag("chat_widget");) {
8  userInterface.chatWidgetEnable()
9} else {
10	return false;
11}
1pod 'BulletTrainClient', '~> 1.0'
2
3import BulletTrainClient
4
5func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
6BulletTrain.shared.apiKey = "QjgYur4LQTwe5HpvbvhpzK"
7
8BulletTrain.shared.getFeatureFlags() { (result) in
9    switch result {
10    case .success(let flags):
11        for flag in flags {
12            let name = flag.feature.name
13            let value = flag.value
14            let enabled = flag.enabled
15            print(name, "= enabled:", enabled, "value:", value ?? "nil")
16        }
17}
1dependencies:
2  bullet_train:
3
4var bulletClient = BulletTrainClient(apiKey: 'QjgYur4LQTwe5HpvbvhpzK')
5
6bool featureEnabled = await bulletClient.hasFeatureFlag("my_test_feature");
7if (featureEnabled) {
8    // run the code to execute enabled feature
9}
10
11var user = FeatureUser(identifier: 'bullet_train_sample_user');
12bool featureEnabled = await bulletClient.hasFeatureFlag('my_test_feature', user: user);
13if (featureEnabled) {
14    // run the code to execute enabled feature for given user
15}
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 bullet-train
2
3from bullet_train import BulletTrain;
4
5bt = BulletTrain(environment_id="QjgYur4LQTwe5HpvbvhpzK")
6
7if bt.has_feature("header"):
8  if bt.feature_enabled("header"):
9    # Show my awesome cool new feature to the world
10
11value = bt.get_value("header", '<My User Id>')
12
13value = bt.get_value("header")
14
15bt.set_trait("accept-cookies", "true", "ben@flagsmith.com))
16bt.get_trait("accept-cookies", "ben@flagsmith.com"))
1$ pip install bullet-train
2
3from bullet_train import BulletTrain;
4
5bt = BulletTrain(environment_id="QjgYur4LQTwe5HpvbvhpzK")
6
7if bt.has_feature("header"):
8  if bt.feature_enabled("header"):
9    # Show my awesome cool new feature to the world
10
11value = bt.get_value("header", '<My User Id>')
12
13value = bt.get_value("header")
14
15bt.set_trait("accept-cookies", "true", "ben@flagsmith.com))
16bt.get_trait("accept-cookies", "ben@flagsmith.com"))
1$ dotnet add package BulletTrain --version 2.1.4
2
3BulletTrainConfiguration configuration = new BulletTrainConfiguration()
4{
5    ApiUrl = "https://api.flagsmith.com/api/v1/",
6    EnvironmentKey = "QjgYur4LQTwe5HpvbvhpzK"
7};
8
9BulletTrainClient bulletClient = new BulletTrainClient(configuration);
10bool featureEnabled = await BulletTrainClient.instance.HasFeatureFlag("my_test_feature");
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
9bt := bullettrain.DefaultBulletTrainClient("<Your API Key>")
10enabled, err := bt.FeatureEnabled("cart_abundant_notification_ab_test_enabled")
11if err != nil {
12    log.Fatal(err)
13} else {
14    if (enabled) {
15        fmt.Printf("Feature enabled")
16    }
17}
1# Cargo.toml
2bullettrain = "0.1.0"
3
4let bt = bullettrain::Client::new("QjgYur4LQTwe5HpvbvhpzK");
5
6if bt.feature_enabled("cart_abundant_notification_ab_test_enabled")? {
7    println!("Feature enabled");
8}
9
10if let Some(Value::String(s)) = bt.get_value("cart_abundant_notification_ab_test")? {
11    println!("{}", s);
12}
1composer require bullettrainhq/bullet-train-php-client
2
3use BulletTrain\BulletTrain;
4
5$bt = new BulletTrain('QjgYur4LQTwe5HpvbvhpzK');
6
7$flags = $bt->getFlags();
8foreach ($flags as &$value) {
9    print_r($value);
10}

Flexible deployment options

Cloud

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

Private Cloud

  • Fully managed private deployments
  • Have us host in your own private instance
  • Added security
Learn More

On-Prem

  • Self host
  • Good for privacy-conscious orgs
  • Includes premium support from the Flagsmith team
  • OpenShift / Kubernetes operator
Learn More

Get started

Enhance customer experience by bringing feature flags to your projects

Start Free Trial