Main features
- Flags defined in YAML, JSON or TOML files
- Flag files read from Git hosts, S3, GCS, Azure Blob, Kubernetes ConfigMaps, HTTP, MongoDB, Redis, PostgreSQL or local files
- Targeting rules on any evaluation context attribute
- Percentage, progressive and scheduled rollouts
- Time-boxed experimentation rollouts for A/B tests
- Export of evaluation data to S3, GCS, Kafka, Kinesis, SQS, Pub/Sub, BigQuery and OpenTelemetry
- Change notifications to Slack, Discord, Microsoft Teams and webhooks
- OpenFeature providers for server, web and mobile languages
- Go module for in-process evaluation
- Web-based flag editor for configuration files
- FIPS 140-3 container image
What GO Feature Flag does
GO Feature Flag (often shortened to GOFF) is a feature flag system without a database. You write flags as YAML, JSON or TOML: variations, targeting rules on any attribute of the evaluation context, and a default rule such as a 20/80 percentage split. The file lives wherever suits you, for example a GitHub or GitLab repository, an S3 or Google Cloud Storage bucket, a Kubernetes ConfigMap, an HTTP endpoint, a local file, or a MongoDB, Redis or PostgreSQL database.
Rollouts can be by percentage, progressive (increasing the share of users over a set period) or scheduled for a given date. An experimentation rollout serves a split only between a start and an end date, which is how GOFF handles A/B tests.
How it works
The project started as a Go library and still offers one: Go applications can import the module and evaluate flags in process. For every other language there is the relay proxy, a stateless API server that loads the flag file into memory, polls the source for changes and answers evaluation requests. Applications call it through OpenFeature providers, which exist for Go, Java and Kotlin, JavaScript and TypeScript, Python, .NET, Ruby, Swift and PHP; Rust is supported through the OpenFeature Remote Evaluation Protocol. Because your code talks to the OpenFeature API, replacing GOFF later means changing the provider, not every flag check.
GOFF can export evaluation events to files, object storage, Kafka, Kinesis, SQS, Pub/Sub, BigQuery, webhooks or OpenTelemetry, so you can analyze rollouts and experiments in your own tools. It can also post a notice to Slack, Discord, Microsoft Teams or a webhook whenever a flag changes.
Self-hosting GO Feature Flag
There is only one component to run: the relay proxy, a Go binary. It is published as a Docker image on Docker Hub and the GitHub Container Registry, through Homebrew and Scoop, and as binaries for x86 and ARM. A FIPS 140-3 image is available for environments that require validated cryptography. No database is needed; the relay proxy keeps flags in memory.
Flag changes are made by editing the file. If you keep it in Git, every change can be reviewed in a pull request and has a history. A web-based flag editor helps build valid configuration without writing YAML by hand.
Hosted version
There is no hosted service. The pricing page lists the free open source plan, with every feature included, and a paid enterprise support offer with an SLA on security fixes and help from the maintainers.
Limitations
GOFF has no dashboard, user accounts, roles or approval workflow of its own; access control is whatever protects the file, such as branch protection in Git. Changes reach the relay proxy on its next poll, so the speed of a kill switch depends on the polling interval and your deployment pipeline for the file. Experiments only split traffic; computing results is up to your analytics stack.
Who it suits
GO Feature Flag suits engineering teams that want flags as code, already work through pull requests, and prefer running one stateless container over a platform with a database. If non-developers need to change flags in a UI, look at Unleash, Flagsmith or FeatBit. For a similar approach from the OpenFeature project itself, see flagd.
Technical details
Built with
- Go
GitHub topics
- beginner-friendly
- continuous-delivery
- continuous-deployment
- continuous-testing
- experimentation
- experiments
- feature-flag
- feature-flags
- feature-toggle
- feature-toggles
- feature-toggling
- go-feature-flag
- golang-library
- help-wanted
Reviewed by the OpenSourcePicks editors from the project's repository and documentation. Something out of date? Tell us.