This is the Java implementation of OpenFeature, a vendor-agnostic abstraction library for evaluating feature flags.
We support multiple data types for flags (numbers, strings, booleans, objects) as well as hooks, which can alter the lifecycle of a flag evaluation.
This library is intended to be used in server-side contexts and has not been evaluated for use in mobile devices.
While Boolean
provides the simplest introduction, we offer a variety of flag types.
import dev.openfeature.sdk.Structure;
class MyClass {
public UI booleanExample() {
// Should we render the redesign? Or the default webpage?
if (client.getBooleanValue("redesign_enabled", false)) {
return render_redesign();
}
return render_normal();
}
public Template stringExample() {
// Get the template to load for the custom new homepage
String template = client.getStringValue("homepage_template", "default-homepage.html");
return render_template(template);
}
public List<HomepageModule> numberExample() {
// How many modules should we be fetching?
Integer count = client.getIntegerValue("module-fetch-count", 4);
return fetch_modules(count);
}
public HomepageModule structureExample() {
Structure obj = client.getObjectValue("hero-module", previouslyDefinedDefaultStructure);
return HomepageModule.builder()
.title(obj.getValue("title"))
.body(obj.getValue("description"))
.build();
}
}
For complete documentation, visit: https://docs.openfeature.dev/docs/category/concepts
- Java 8+ (compiler target is 1.8)
<dependency>
<groupId>dev.openfeature</groupId>
<artifactId>sdk</artifactId>
<version>1.3.1</version>
</dependency>
If you would like snapshot builds, this is the relevant repository information:
<repositories>
<repository>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>sonartype</id>
<name>Sonartype Repository</name>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
</repositories>
dependencies {
implementation 'dev.openfeature:sdk:1.3.1'
}
To configure it, you'll need to add a provider to the global singleton OpenFeatureAPI
. From there, you can generate a Client
which is usable by your code. While you'll likely want a provider for your specific backend, we've provided a NoOpProvider
, which simply returns the default passed in.
class MyApp {
public void example(){
OpenFeatureAPI api = OpenFeatureAPI.getInstance();
api.setProvider(new NoOpProvider());
Client client = api.getClient();
// Now use your `client` instance to evaluate some feature flags!
}
}
We hold regular meetings which you can see here.
We are also present on the #openfeature
channel in the CNCF slack.
The continuous integration runs a set of gherkin integration tests using flagd
. These tests do not run with the default maven profile. If you'd like to run them locally, you can start the flagd testbed with
docker run -p 8013:8013 ghcr.io/open-feature/flagd-testbed:latest
and then run
mvn test -P integration-test
See releasing.
We publish SBOMs with all of our releases as of 0.3.0. You can find them in Maven Central alongside the artifacts.
Thanks so much to our contributors.
Made with contrib.rocks.