Java implementation of the OpenFeature SDK
Go to file
Robert Grassian 81ab0710ea
fix: isList check in Value checks type of list (#70)
* isList check of Value checks type of list

Signed-off-by: Robert Grassian <robert.grassian@split.io>

* test for empty list

Signed-off-by: Robert Grassian <robert.grassian@split.io>

Signed-off-by: Robert Grassian <robert.grassian@split.io>
2022-09-13 15:09:59 -07:00
.github/workflows chore: Add release plz (#66) 2022-09-13 11:36:42 -07:00
docs chore: Add release plz (#66) 2022-09-13 11:36:42 -07:00
release Add release instructions & build caches 2022-06-24 00:04:35 -05:00
src fix: isList check in Value checks type of list (#70) 2022-09-13 15:09:59 -07:00
.gitattributes Skeleton implementation of the java sdk 2022-04-20 21:12:09 -07:00
.gitignore Handle null provider, all author code in try/catch 2022-08-15 08:57:55 -04:00
.release-please-manifest.json chore(main): release dev.openfeature.javasdk 0.2.0 (#69) 2022-09-13 12:44:11 -07:00
CHANGELOG.md chore(main): release dev.openfeature.javasdk 0.2.0 (#69) 2022-09-13 12:44:11 -07:00
CONTRIBUTING.md Add a contributing.md 2022-06-17 21:05:12 -07:00
LICENSE Add Apache2.0 license 2022-04-29 15:21:59 -04:00
README.md chore: Add release plz (#66) 2022-09-13 11:36:42 -07:00
checkstyle.xml A few changes from google's default 2022-08-07 22:49:58 -07:00
pom.xml chore(main): release dev.openfeature.javasdk 0.2.0 (#69) 2022-09-13 12:44:11 -07:00
release-please-config.json chore: Add release plz (#66) 2022-09-13 11:36:42 -07:00
spec_finder.py Keep tests in line with spec changes 2022-08-29 11:18:46 -07:00
spotbugs-exclusions.xml Add spotbugs & pmd for static analysis 2022-08-06 23:31:09 -07:00
version.txt chore(main): release dev.openfeature.javasdk 0.2.0 (#69) 2022-09-13 12:44:11 -07:00

README.md

OpenFeature SDK for Java

Maven Central javadoc Project Status: WIP – Initial development is in progress, but there has not yet been a stable, usable release suitable for the public. Specification Known Vulnerabilities on-merge codecov CII Best Practices

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.

Usage

While Boolean provides the simplest introduction, we offer a variety of flag types.

import dev.openfeature.javasdk.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();
    }
}

Requirements

  • Java 8+

Installation

Add it to your build

Maven

<dependency>
    <groupId>dev.openfeature</groupId>
    <artifactId>javasdk</artifactId>
    <version>0.1.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>

Gradle

dependencies {
    implementation 'dev.openfeature:javasdk:0.1.1'
}

Configure it

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!
    }
}

Contacting us

We hold regular meetings which you can see here.

We are also present on the #openfeature channel in the CNCF slack.

Releasing

See releasing.

Contributors

Thanks so much to our contributors.

Pictures of the folks who have contributed to the project

Made with contrib.rocks.