OpenSourcePicks

Open source alternatives to popular software, with live GitHub data

GitHub stats refreshed every day

Flagr

Single Go service for feature flags, sticky A/B assignment and dynamic configuration

Open source alternative to

Visit FlagrGitHubDocumentation

Main features

  • Flags with variants, segments, constraints, distribution and rollout percentage
  • Sticky A/B assignment by hashed entity ID
  • JSON attachments on variants for dynamic configuration
  • Web UI and REST API with batch evaluation
  • Eval-only mode reading flags from a JSON file or URL
  • Evaluation and exposure records to Kafka, Kinesis or Google Pub/Sub
  • Webhook notifications on flag changes with JSON diffs
  • Flag snapshots and a debug console
  • Basic auth for the UI and JWT auth for the API
  • Prometheus, StatsD, Sentry and New Relic monitoring

What Flagr does

Flagr is a feature flag service written in Go, first built at Checkr and now developed in the community repository openflagr/flagr; the old checkr/flagr address redirects there. It treats feature flags, A/B tests and dynamic configuration as one thing: a flag returns a variant, and each variant can carry a JSON attachment with configuration values. The same flag can start as a kill switch, become an experiment and later hold a runtime setting, without the calling code changing.

Each flag has segments, which are evaluated in order. A segment is a set of constraints on the entity’s context, such as state == "CA" or age >= 21, plus a distribution across variants and a rollout percentage. The first matching segment decides the result. Assignment is sticky: the same entity ID gets the same variant as long as the flag does not change, which Flagr achieves by hashing rather than storing per-user state.

How evaluation works

Evaluation always happens on the Flagr server. Your application sends an entity ID and context to the evaluation endpoint and receives a variant; official clients exist for Go, JavaScript, Python and Ruby, and any language can call the HTTP API directly. The server reads flags from an in-memory cache that is refreshed every few seconds by default, so a change takes effect after a short, documented delay.

Flagr can stream evaluation and exposure records to Kafka, Amazon Kinesis or Google Pub/Sub. It does not compute experiment results itself; the documentation says significance testing belongs in your own data stack.

Self-hosting Flagr

Flagr is a single container image with the web UI built in, configured entirely through environment variables. It uses SQLite by default for local use and MySQL or PostgreSQL in production. In eval-only mode it reads flags from a JSON file or URL instead of a database, which lets you manage flags in Git and run Flagr as a read-only evaluation service or sidecar. There is no Helm chart in the repository; the same image runs on Kubernetes or a VM.

Authentication is off by default, so a new server is open until you configure it. Basic auth can protect the UI and JWT auth the API. By default the evaluation and exposure endpoints stay open even with authentication on, which you may want to restrict.

Webhooks announce every change to a flag, with an optional JSON diff, and Prometheus, StatsD, Sentry and New Relic are supported for monitoring.

Hosted version

None. The README links to a public demo instance only.

Limitations

Every flag check is a network call to Flagr, since the clients do not evaluate locally; you need to run it close to your services. There is no user management or role system beyond basic auth and JWT, and no approval workflow. The client list is short, and there are no experiment statistics.

Who it suits

Flagr suits backend teams that want one small, permissively licensed service for flags, experiment assignment and remote config, and that already stream events to a warehouse for analysis. Teams that need a richer UI, roles and local evaluation in SDKs should compare Unleash, Flagsmith or FeatBit.

Technical details

Self-hosting needs

  • MySQL or PostgreSQL

Built with

  • Go
  • Vue

GitHub topics

  • ab-testing
  • dynamic-configuration
  • feature-flags
  • feature-toggles
  • golang
  • swagger

Reviewed by the OpenSourcePicks editors from the project's repository and documentation. Something out of date? Tell us.