SDK overview
Unleash offers a number of client libraries (SDKs) designed to help you integrate Unleash in your applications. The SDKs provide an interface for fetching and evaluating feature flags.
Unleash provides official SDKs for a number of programming languages. Our community has also contributed SDKs for additional languages.
With Unleash's architecture feature flags are evaluated within the SDKs or Unleash Edge, making evaluations incredibly fast. SDKs cache feature flag configuration in memory, providing high reliability.
Official SDKs
Server-side SDKs
Server‑side SDKs run in backend services. They communicate with Unleash using the Client API or Unleash Edge and require a client token. Server-side SDKs perform the flag evaluation locally, meaning all user data is retained within the SDK.
Unleash offers the following server-side SDKs:
Client-side SDKs
Client-side SDKs are used in frontend and mobile applications. They communicate with Unleash through the Frontend API or Unleash Edge and require a frontend token. Unlike server-side SDKs, client-side SDKs do not perform the flag evaluation locally, instead, they fetch all enabled feature flags for a given Unleash Context. The flag evaluation happens either in Unleash Edge, or in the Unleash server, when using the Frontend API directly.
When the SDK initializes, it sets up an in-memory repository and retrieves a list of all enabled flags and their variants in a single request. Once fetched, the SDK serves flag values from memory, without making additional requests. It also periodically refreshes the list of enabled flags to keep the data up to date.
Unleash offers the following client-side SDKs:
Feature compatibility in server-side SDKs
The following tables show which features are supported by each server-side SDK. Some features are only applicable to specific SDKs, depending on the programming language or how the client is implemented.
Symbol reference
✅ Implemented | ❌ Not supported | ⭕ Not implemented, but under consideration | N/A Not applicable to this SDK
Initialization
Capability | Java | Node.js | Go | Python | Ruby | .NET | PHP | Rust |
---|---|---|---|---|---|---|---|---|
Async initialization | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
Block until synchronized | ✅ | ✅ | ✅ | ⭕ | ⭕ | ✅ | ✅ | ⭕ |
Context provider | ✅ | N/A | N/A | N/A | N/A | ✅ | ✅ | N/A |
Global fallback function | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
Flag Query: namePrefix , tags | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
Flag Query: project_name | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | ⭕ |
Custom headers
Capability | Java | Node.js | Go | Python | Ruby | .NET | PHP | Rust |
---|---|---|---|---|---|---|---|---|
static | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕ |
function | ✅ | ✅ | ⭕ | ✅ | ✅ (4.3) | ✅ | ✅ | ⭕ |
Built-in strategies
Capability | Java | Node.js | Go | Python | Ruby | .NET | PHP | Rust |
---|---|---|---|---|---|---|---|---|
Gradual rollout | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Gradual rollout with custom stickiness | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕ |
UserID, IP, hostname | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
IP with CIDR syntax | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕ | ✅ | ✅ |
Custom strategies
All server-side SDKs have basic support.
Strategy constraints
All server-side SDKs have support for the basic operators (IN
, NOT_IN
).
Capability | Java | Node.js | Go | Python | Ruby | .NET | PHP | Rust |
---|---|---|---|---|---|---|---|---|
Advanced operators | ✅ (5.1) | ✅ (3.12) | ✅ (3.3) | ✅ (5.1) | ✅ (4.2) | ✅ (2.1) | ✅ (1.3.1) | ⭕ |
Unleash Context
Static fields (environment
, appName
), defined fields, and custom properties are supported in all server-side SDKs.
isEnabled
implementation
Capability | Java | Node.js | Go | Python | Ruby | .NET | PHP | Rust |
---|---|---|---|---|---|---|---|---|
Can take context and override feedback value | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Fallback function | ✅ | ✅ | ✅ | ✅ | ✅ | ⭕ | ⭕ | ⭕ |
Strategy variants
Capability | Java | Node.js | Go | Python | Ruby | .NET | PHP | Rust |
---|---|---|---|---|---|---|---|---|
Strategy variants and custom stickiness | ✅ | ✅ | ✅ | ✅ |