open-feature/spec

Define initial scope

beeme1mr opened this issue · 0 comments

The purpose of this issue is to document the current status of the project and propose a high-level roadmap for achieving general availability.

Spec

The spec is an important aspect of OpenFeature. We need to reach a level of stability as quickly as possible so that SDKs, provider implementations, and hooks can be created.

Research

Server-side research

Research is nearly complete for the server-side. The outcome from that research can be seen below:

Areas that may still require additional research:

  • Request based context propagation using something like continuous local storage or thread local storage. A proof of concept was added to the playground.

Client-side research

Client-side feature flagging will be a requirement for a GA release. Conceptually, they're similar to server-side feature flags but they introduce additional complexities that need to be considered. However, the majority of our effort so far has been on server-side feature flagging.

Web

Research for feature flagging client-side on the web is currently in progress.

Mobile

Research for feature flagging client-side on mobile has not been started.

Sections of the spec

Flag Evaluation

Status: Experimental
Release target: Alpha

The flag evaluation section is available in an experimental state here.

Hooks

Status: Experimental
Release target: Alpha

The hook section is available in an experimental state here.

There are still some ongoing discussions including:

Provider

Status: Experimental
Release target: Alpha

The provider is available in an experimental state here. It's important that vendors keep a close eye on this part of the spec in order to ensure OpenFeature compatibility with their product.

Evaluation Context

Status: In Progress
Release target: Alpha

The evaluation context is currently in progress. This part of the spec simply provides semantic meaning to some properties on the context object. This will provide consistency between different providers. For example, one vendor may have a userId property and another may have userKey. OpenFeature needs to provide enough structure to providers in order to map context properly.

There's an open PR to add evaluation context to the spec. That PR can be found here.

Event Subscription

Status: Proposal
Release target: Unknown

Event subscription is at the proposal stage. Many vendors provide an event-based API that allows developers to subscribe to events like onReady or flagUpdate.

Bulk evaluations

Status: Proposal
Release target: Unknown

Bulk evaluation is at the proposal stage. This may be useful on the client, or when a developer wants to include the results of multiple flag evaluations on a request.

Tracking Events

Status: Proposal
Release target: Unknown

Tracking events are at the proposal stage. Events can be associated with flag evaluations, which is particularly useful for A/B testing. This concept does not exist in all providers. However, we could potentially introduce the concept of a tracking provider. The provider could either be a provider that supports this concept or another event tracking tool, e.g. Segment.


SDKs

Server-side

Java

Status: In Progress
Release target: Alpha

The Java SDK is under active development. You can see the repo here.

Node JS

Status: In Progress
Release target: Alpha

The NodeJs SDK is under active development. You can see the repo here.

Golang

Status: In Progress
Release target: Beta

The Golang SDK is under active development. You can see the repo here.

Python

Status: In Progress
Release target: Beta

The Python SDK is under active development. You can see the repo here.

.NET

Status: Proposal
Release target: Beta

Development hasn't started on the .NET SDK, but it is expected to begin soon.

Client-side

Web

Status: Proposal
Release target: Beta

The client-side web SDK depends on the spec research listed above. It's unclear at this time how similar this SDK will be to the NodeJS SDK. Code reuse may be an option.

Mobile

Android

Status: Proposal
Release target: Unknown

The client-side Android SDKs depends on the spec research listed above. Its priority still needs to be determined.

iOS

Status: Proposal
Release target: Unknown

The client-side iOS SDKs depends on the spec research listed above. Its priority still needs to be determined.

React Native

Status: Proposal
Release target: Unknown

The client-side React Native SDKs depends on the spec research listed above. Its priority still needs to be determined.


Providers and Plugins

Providers and plugins will need to be developed for each of the supported languages. A contrib repo for each language should be created. It can act as a central location for community managed providers and plugins.

Maintainers and workflows will need to be defined to ensure that only high quality providers and plugins are included.


Documentation

Documentation will need to be created and available online. Docusaurus seems to be the popular choice.


Cloud Native

The cloud native operator and provider should be moved into a separate section. Perhaps a dedicated Special Interest Group (SIG) should be defined for this initiative. The goal is to provide a spec compliant provider that utilizes Kubernetes constructs. Progress can be monitored here.