---
sidebar_position: 1
description: Use GO Feature Flag with Openfeature SDKs
---
import { Cards } from "@site/src/components/doc/cardv2";
import { SdkCardContent} from "@site/src/components/doc/sdkCardContent";

# SDKs

**GO Feature Flag** stands out as a feature flag solution, distinct from others, due to our decision to fully support the [`Openfeature`](https://openfeature.dev) CNCF project.

The benefit of choosing OpenFeature lies in its framework-agnostic nature. When utilizing OpenFeature SDKs, you minimize the effort required for switching to a different feature flag provider. This flexibility empowers you to make changes without being tied down to a particular vendor.

To show our commitment to this initiative, **GO Feature Flag has opted not to develop any custom SDKs and instead relies entirely on OpenFeature SDKs**.
In order to seamlessly integrate with our solution, we offer [`providers`](https://docs.openfeature.dev/docs/reference/concepts/provider) for GO Feature Flag in multiple programming languages.

Rest assured, working with OpenFeature SDKs alongside GO Feature Flag providers is as straightforward as using any other feature flag solution. The added advantage is that you now adhere to a standard approach and avoid any vendor lock-in!

## Server Providers
<Cards cards={[
  {
    logoCss: "devicon-go-original-wordmark colored",
    title:"GO",
    badges:["Server"],
    docLink: "./server_providers/openfeature_go",
    content: <SdkCardContent features={["remoteEval", "localCache"]}/>
  },
  {
    logoCss: "devicon-nodejs-plain colored",
    title:"Node.JS",
    badges:["Server"],
    docLink: "./server_providers/openfeature_javascript",
    content: <SdkCardContent features={["remoteEval", "localCache"]}/>
  },
  {
    logoCss: "devicon-java-plain colored",
    title:"Java / Kotlin",
    badges:["Server"],
    docLink: "./server_providers/openfeature_java",
    content: <SdkCardContent features={["remoteEval", "localCache"]}/>
  },
  {
    logoCss: "devicon-dot-net-plain-wordmark colored",
    title:".Net",
    badges:["Server"],
    docLink: "./server_providers/openfeature_javascript",
    content: <SdkCardContent features={["remoteEval"]}/>
  },
  {
    logoCss: "devicon-python-plain colored",
    title:"Python",
    badges:["Server"],
    docLink: "./server_providers/openfeature_python",
    content: <SdkCardContent features={["remoteEval", "localCache", "dynamicRefresh"]}/>
  }
]}/>

## Client Providers
<Cards cards={[
  {
    logoCss: "devicon-typescript-plain colored",
    title:"Typescript",
    badges:["Client"],
    docLink: "./client_providers/openfeature_javascript",
    content: <SdkCardContent features={["remoteEval", "localCache", "dynamicRefresh"]}/>
  },
  {
    logoCss: "devicon-android-plain colored",
    title:"Android / Kotlin",
    badges:["Client"],
    docLink: "./client_providers/openfeature_android",
    warningBadges: ["experimental"],
    content: <SdkCardContent features={["remoteEval", "localCache", "dynamicRefresh"]}/>
  }
]}/>

## How OpenFeature and GO Feature Flag are working together?

To use the OpenFeature SDKs you need what we call a provider.
A **provider** is responsible for performing flag evaluations. It provides an abstraction between **GO Feature Flag** and the OpenFeature SDK.

A provider need a backend service to perform the flag evaluation. This is why we have introduced the [**relay proxy**](../relay_proxy).
This component retrieve your feature flag configuration file using the GO module and expose APIs to get your flags variations.

![](/docs/openfeature/concepts.png)

With this simple architecture you have a central component _(the relay proxy)_ that is in charge of the flag evaluation, while the SDKs and providers are responsible to communicate with the relay proxy.

This supports different languages the same way and makes you able to use GO Feature Flag with all your favorite languages.
