Features
Supported Languages
Complete list of programming languages and feature flag SDKs that FlagShark supports.
4 min readLast updated: February 4, 2026
FlagShark supports detection of feature flags across 13 programming languages and all major feature flag providers. This page lists supported languages, file extensions, and SDK patterns.
Language Support Overview
| Language | Extensions | Support Level | SDKs |
|---|---|---|---|
| TypeScript | .ts, .tsx | Full | LaunchDarkly, Unleash, Split, Custom |
| JavaScript | .js, .jsx, .mjs, .cjs | Full | LaunchDarkly, Unleash, Split, Custom |
| Go | .go | Full | LaunchDarkly, Unleash, Custom |
| Python | .py | Full | LaunchDarkly, Unleash, Custom |
| Rust | .rs | Full | LaunchDarkly, Custom |
| C# | .cs | Full | LaunchDarkly, Unleash, Custom |
| Java | .java | Basic | LaunchDarkly, Custom |
| Kotlin | .kt, .kts | Basic | LaunchDarkly, Custom |
| Ruby | .rb | Basic | LaunchDarkly, Custom |
| PHP | .php | Basic | LaunchDarkly, Custom |
| Swift | .swift | Basic | LaunchDarkly, Custom |
| C++ | .cpp, .cc, .cxx, .hpp, .h | Basic | Custom |
| Objective-C | .m, .mm, .h | Basic | LaunchDarkly, Custom |
Support Levels:
- Full: Comprehensive SDK support, extensively tested
- Basic: Core SDK patterns supported, custom configuration available
TypeScript & JavaScript
File Extensions
.ts,.tsx(TypeScript).js,.jsx(JavaScript).mjs,.cjs(ES/CommonJS modules)
LaunchDarkly SDK
// React SDK
import { useFlags, useLDClient } from 'launchdarkly-react-client-sdk';
function MyComponent() {
// Object destructuring - detected
const { enableDarkMode, showBetaFeatures } = useFlags();
// Client instance - detected
const ldClient = useLDClient();
const value = ldClient?.variation('flag-key', false);
}
// Node.js SDK
import LaunchDarkly from 'launchdarkly-node-server-sdk';
const client = LaunchDarkly.init('sdk-key');
// All variation methods detected
client.variation('flag-key', context, false);
client.boolVariation('flag-key', context, false);
client.stringVariation('flag-key', context, '');
client.numberVariation('flag-key', context, 0);
client.jsonVariation('flag-key', context, {});
Unleash SDK
// React SDK
import { useFlag, useVariant } from '@unleash/proxy-client-react';
function MyComponent() {
const enabled = useFlag('feature-flag');
const variant = useVariant('feature-flag');
}
// Node.js SDK
import { Unleash } from 'unleash-client';
const unleash = new Unleash({ /* config */ });
unleash.isEnabled('feature-flag');
unleash.getVariant('feature-flag');
Split SDK
// Browser SDK
import { SplitFactory } from '@splitsoftware/splitio';
const factory = SplitFactory({ /* config */ });
const client = factory.client();
client.getTreatment('feature-flag');
client.getTreatments(['flag-1', 'flag-2']);
Go
File Extensions
.go
LaunchDarkly SDK
import (
ld "github.com/launchdarkly/go-server-sdk/v7"
)
func main() {
client, _ := ld.MakeClient("sdk-key", 5*time.Second)
// All variation methods detected
enabled, _ := client.BoolVariation("flag-key", context, false)
str, _ := client.StringVariation("flag-key", context, "default")
num, _ := client.IntVariation("flag-key", context, 0)
float, _ := client.Float64Variation("flag-key", context, 0.0)
json, _ := client.JSONVariation("flag-key", context, ldvalue.Null())
}
Unleash SDK
import "github.com/Unleash/unleash-client-go/v3"
func main() {
unleash.Initialize(/* config */)
enabled := unleash.IsEnabled("feature-flag")
variant := unleash.GetVariant("feature-flag")
}
Python
File Extensions
.py
LaunchDarkly SDK
import ldclient
from ldclient import Context
ldclient.set_config(Config("sdk-key"))
client = ldclient.get()
# All variation methods detected
enabled = client.variation("flag-key", context, False)
enabled = client.bool_variation("flag-key", context, False)
value = client.string_variation("flag-key", context, "default")
value = client.int_variation("flag-key", context, 0)
value = client.float_variation("flag-key", context, 0.0)
value = client.json_variation("flag-key", context, {})
Unleash SDK
from UnleashClient import UnleashClient
client = UnleashClient(url="...", app_name="...")
client.initialize_client()
enabled = client.is_enabled("feature-flag")
variant = client.get_variant("feature-flag")
Rust
File Extensions
.rs
LaunchDarkly SDK
use launchdarkly_server_sdk::{Client, ConfigBuilder};
fn main() {
let client = Client::build(ConfigBuilder::new("sdk-key")).unwrap();
// Variation methods detected
let enabled = client.bool_variation(&context, "flag-key", false);
let value = client.string_variation(&context, "flag-key", "default");
let value = client.int_variation(&context, "flag-key", 0);
let value = client.float_variation(&context, "flag-key", 0.0);
}
C#
File Extensions
.cs
LaunchDarkly SDK
using LaunchDarkly.Sdk;
using LaunchDarkly.Sdk.Server;
var client = new LdClient("sdk-key");
// All variation methods detected
bool enabled = client.BoolVariation("flag-key", context, false);
string value = client.StringVariation("flag-key", context, "default");
int value = client.IntVariation("flag-key", context, 0);
double value = client.DoubleVariation("flag-key", context, 0.0);
LdValue value = client.JsonVariation("flag-key", context, LdValue.Null);
Unleash SDK
using Unleash;
var unleash = new DefaultUnleash(config);
bool enabled = unleash.IsEnabled("feature-flag");
Variant variant = unleash.GetVariant("feature-flag");
Java
File Extensions
.java
LaunchDarkly SDK
import com.launchdarkly.sdk.*;
import com.launchdarkly.sdk.server.*;
LDClient client = new LDClient("sdk-key");
// Variation methods detected
boolean enabled = client.boolVariation("flag-key", context, false);
String value = client.stringVariation("flag-key", context, "default");
int value = client.intVariation("flag-key", context, 0);
double value = client.doubleVariation("flag-key", context, 0.0);
LDValue value = client.jsonValueVariation("flag-key", context, LDValue.ofNull());
Kotlin
File Extensions
.kt,.kts
LaunchDarkly SDK
import com.launchdarkly.sdk.*
import com.launchdarkly.sdk.server.*
val client = LDClient("sdk-key")
// Variation methods detected
val enabled = client.boolVariation("flag-key", context, false)
val value = client.stringVariation("flag-key", context, "default")
val value = client.intVariation("flag-key", context, 0)
Ruby
File Extensions
.rb
LaunchDarkly SDK
require 'ldclient-rb'
client = LaunchDarkly::LDClient.new("sdk-key")
# Variation methods detected
enabled = client.variation("flag-key", context, false)
enabled = client.bool_variation("flag-key", context, false)
value = client.string_variation("flag-key", context, "default")
value = client.number_variation("flag-key", context, 0)
PHP
File Extensions
.php
LaunchDarkly SDK
use LaunchDarkly\LDClient;
$client = new LDClient("sdk-key");
// Variation methods detected
$enabled = $client->variation("flag-key", $context, false);
$enabled = $client->boolVariation("flag-key", $context, false);
$value = $client->stringVariation("flag-key", $context, "default");
$value = $client->intVariation("flag-key", $context, 0);
Swift
File Extensions
.swift
LaunchDarkly SDK
import LaunchDarkly
let client = LDClient.get()!
// Variation methods detected
let enabled = client.variation(forKey: "flag-key", defaultValue: false)
let value = client.variation(forKey: "flag-key", defaultValue: "default")
C++
File Extensions
.cpp,.cc,.cxx,.hpp,.h
Custom Configuration Required
C++ support requires custom configuration in .flagshark.yaml:
providers:
- name: "Custom C++ Flags"
methods:
- name: "isFeatureEnabled"
flag_key_index: 0
- name: "getFeatureValue"
flag_key_index: 0
Objective-C
File Extensions
.m,.mm,.h
LaunchDarkly SDK
@import LaunchDarkly;
LDClient *client = [LDClient get];
// Variation methods detected
BOOL enabled = [client boolVariationForKey:@"flag-key" defaultValue:NO];
NSString *value = [client stringVariationForKey:@"flag-key" defaultValue:@"default"];
NSInteger intValue = [client integerVariationForKey:@"flag-key" defaultValue:0];
double doubleValue = [client doubleVariationForKey:@"flag-key" defaultValue:0.0];
Custom Configuration
For custom Objective-C SDKs:
providers:
- name: "Custom Obj-C Flags"
methods:
- name: "isFeatureEnabled:"
flag_key_index: 0
- name: "getFeatureValue:default:"
flag_key_index: 0
Adding Custom SDKs
If your SDK isn't listed, you can add custom detection patterns:
# .flagshark.yaml
providers:
- name: "Internal Feature Flags"
package_path: "company/feature-flags"
import_aliases: ["ff", "featureflags"]
methods:
- name: "isEnabled"
flag_key_index: 0
min_params: 1
- name: "getValue"
flag_key_index: 0
min_params: 2
See Configuration for complete details.
Requesting New Language Support
Need support for a language not listed?
Contact us at support@flagshark.io with:
- The language and file extensions
- The SDKs you use
- Example code showing typical flag usage
Related Documentation
- Flag Detection - How detection works
- Configuration - Custom provider setup
- Flag Not Detected - Troubleshooting