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();
}
}
- Java 8+
<dependency>
<groupId>dev.openfeature</groupId>
<artifactId>sdk</artifactId>
<version>0.2.2</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:0.2.2'
}
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.
Thanks so much to our contributors.
Made with contrib.rocks.