GO Feature Flag is a self-hosted, open source feature flag solution built on OpenFeature. Instead of a server with a database and an admin console, you keep your flags in a single file (YAML, JSON or TOML) in Git, an object store or a Kubernetes ConfigMap, and GO Feature Flag loads it into memory and evaluates it. Teams can use it as a Go module inside a Go service, or run a relay proxy that offers an HTTP API so services in any language ask for flag values through OpenFeature providers. It suits teams who want flags reviewed like code: a rollout change is a pull request. It is a NON CNCF tool: the CNCF Landscape lists it under Observability and Analysis › Feature Flagging, but it is not a CNCF project. It is maintained by Thomas Poignant, calls itself part of the OpenFeature ecosystem and uses the MIT licence.
CNCF daily · Sprint 3, post 21 of 21 · Feature Flagging · NON CNCF
At a glance
| Category | Observability and Analysis › Feature Flagging |
| CNCF status | NON CNCF, listed in the CNCF Landscape |
| Written in | Go |
| License | MIT, with no paid enterprise tier |
| Flag format | YAML, JSON or TOML with variations, targeting rules, percentage rollouts and a default rule |
| Retrievers | File, HTTP, GitHub, GitLab, Bitbucket, S3, Google Cloud Storage, Azure Blob Storage, Kubernetes ConfigMap, MongoDB, PostgreSQL |
| Exporters | S3, GCS, Azure, Kafka, Kinesis, Pub/Sub, SQS, BigQuery, OpenTelemetry, webhook, file and log |
| Notifiers | Slack, Microsoft Teams, Discord and webhook |
| OpenFeature providers | Go, Java/Kotlin, JavaScript/TypeScript, Python, .NET, Ruby, Swift, PHP and Rust (through OFREP) |
| Admin UI | None at runtime; management is by file and Git, with a web editor to author and validate configuration |
| Latest release | v1.55.2 (18 August 2026); v1.55.0 added runtime flag sets and a BigQuery exporter |
Architecture
Blue is the developer, slate the applications and storage, purple GO Feature Flag. The flag file is the single source of truth; there is no database in the picture. Open the zoomable diagram, or download it as SVG or PNG.
| Component | Responsibility |
|---|---|
| Developer | Edits the flag file and opens a pull request. |
| Flag file in Git | Holds flags, variations, targeting rules and rollout percentages. Other retrievers read the same file from S3, GCS, HTTP or a ConfigMap. |
| Go service (library) | A Go application that embeds the module, polls the file and evaluates flags in process. |
| Any application | Uses an OpenFeature SDK and a GO Feature Flag provider to ask the relay proxy for a decision. |
| Relay proxy | A hostable service that keeps the flags in memory and exposes an HTTP API, including OFREP, the OpenFeature remote evaluation protocol. |
| Exporter target | Receives batched evaluation events for analysis. |
| Notifier | Announces flag changes to Slack, Teams, Discord or a webhook. |
Design principle. Treat flags as configuration under version control. Reviews, history and rollback come from Git, and the runtime stays stateless and simple to run.
Request flow
- Merge a change. A developer changes a rollout percentage in the flag file and merges the pull request.
- Poll and reload. The relay proxy polls the retriever at its interval, notices the new file and reloads the flags in memory.
- Announce the change. The notifier posts a summary of what changed to Slack, Teams or a webhook.
- Evaluate. An application sends a flag key and an evaluation context (a targeting key and attributes) to the proxy and gets back a variation, or its default value if evaluation fails.
- Export events. The proxy batches evaluation events and sends them to the exporter target, for example S3, Kafka or BigQuery.
Open the zoomable flow diagram, or download it as SVG or PNG.
Production reference design
This Sprint 3 design runs the relay proxy in the cloud cluster on Google Compute Engine (self-managed Kubernetes with Calico) with one flag repository for the whole multi-cluster platform. Edge clusters either run their own proxy or call the central one.
- Create the flag repository with a pull request review rule and a CI check that validates the file.
- Write the flag file:
Internal users always getnew-checkout: variations: on: true off: false targeting: - query: email co "@example.com" percentage: on: 100 off: 0 defaultRule: percentage: on: 20 off: 80on; for everyone else, 20% of users do. - Deploy the relay proxy (the
gofeatureflag/go-feature-flagimage, port 1031) as a Deployment with a proxy configuration file and the flag file mounted. In Kubernetes you can mount the flags in a ConfigMap and use theconfigmapretriever, or read from Git or (GCP) Google Cloud Storage. - Set a polling interval that suits you, and put two or more replicas behind a Service.
- Use the OpenFeature SDK in each application with the GO Feature Flag provider, and set sensible default values in code.
- Add an exporter and a notifier, for example BigQuery (GCP) or Kafka for events and a Slack channel for changes.
- Protect the proxy. Keep it inside the cluster, use its authorised keys, and restrict who can merge to the flag repository.
Typical uses include gradual rollouts, internal-first releases, kill switches, A/B tests with exported events and the same flag logic for services in several languages.
Operational considerations
- No admin UI. Non-developers cannot flip a flag from a console. If product managers need that, consider Unleash or a hosted service, or provide a simple pull request workflow.
- Polling delay. Changes reach the proxy at the polling interval, not instantly. Choose the interval to match how fast you must disable a bad flag, and test the kill-switch path.
- File size and structure. One large file becomes hard to review. The project supports flag sets, which v1.55.0 can add and remove at runtime without a restart.
- Consistency across replicas. Each proxy replica polls independently, so a change can briefly differ between replicas.
- Defaults matter. If evaluation fails, applications get the default value in code, so choose safe defaults.
- Single maintainer. The project is led by one maintainer and funded by sponsors. Check the repository’s release cadence and your support needs.
- Security fixes. Recent releases updated Go and dependencies to address CVEs. Pin and upgrade deliberately.
Adoption
- The repository’s README does not name adopters; it links to an
ADOPTERS.mdfile and invites organisations to add themselves. Check that file for current users before you rely on it. - The README shows sponsors including Swisscom, Cybozu and AltaModa Technologies. Sponsorship is not the same as production use, so these are not claimed as adopters.
- The project positions itself as part of the OpenFeature ecosystem; see the OpenFeature brief for the CNCF project it builds on.
Alternatives
| Solution | Model | Best suited to |
|---|---|---|
| OpenFeature (CNCF Incubating) | Vendor-neutral flag evaluation API | The API layer in front of any flag backend; see the OpenFeature brief |
| Unleash | Server with database and admin UI | Teams that want a console for non-developers; see the Unleash brief |
| flagd | OpenFeature-native evaluation daemon | Kubernetes setups using the OpenFeature operator |
| Flipt | Self-hosted flag service with UI | A simple server with a UI and Git sync |
| LaunchDarkly | Commercial hosted platform | Enterprises that want managed targeting and experimentation |
Strengths and limitations
| Strengths | Limitations |
|---|---|
| Flags are reviewed, versioned files with no database to run | No runtime admin UI |
| MIT licence with no paid tier | NON CNCF, with a single lead maintainer |
| OpenFeature providers for many languages | Changes arrive at the polling interval |
| Many retrievers, exporters and notifiers | No named adopters listed in the README |
| Works as a Go library or a stateless relay proxy | Large single files need discipline to keep reviewable |
Recommendation
Trial for engineering-led teams that already work in Git and want simple, self-hosted flags with OpenFeature, particularly on Kubernetes where a ConfigMap or Git retriever fits. Start with one service and one percentage rollout, test the kill-switch delay, and use OpenFeature SDKs in the application so you can change backends later. Teams that need a console for non-engineers should look at Unleash.
References: GO Feature Flag website · GO Feature Flag repository · Releases · Go package documentation · CNCF Landscape entry

