<a href="https://github.com/openflagr/flagr/actions/workflows/ci.yml?query=branch%3Amain+" target="_blank">
<img src="https://github.com/openflagr/flagr/actions/workflows/ci.yml/badge.svg?branch=main">
</a>
<a href="https://goreportcard.com/report/github.com/openflagr/flagr" target="_blank">
<img src="https://goreportcard.com/badge/github.com/openflagr/flagr">
</a>
<a href="https://godoc.org/github.com/openflagr/flagr" target="_blank">
<img src="https://img.shields.io/badge/godoc-reference-green.svg">
</a>
<a href="https://github.com/openflagr/flagr/releases" target="_blank">
<img src="https://img.shields.io/github/release/openflagr/flagr.svg?style=flat&color=green">
</a>
<a href="https://codecov.io/gh/openflagr/flagr">
<img src="https://codecov.io/gh/openflagr/flagr/branch/main/graph/badge.svg?token=iwjv26grrN">
</a>
<a href="https://deepwiki.com/openflagr/flagr">
<img src="https://deepwiki.com/badge.svg?color=green" alt="Ask DeepWiki">
</a>
Flagr is an open-source Go service for feature flags, A/B testing, and dynamic configuration. One primitive — the flag — covers all three: a decision point in your code that the evaluation engine resolves at runtime based on who is asking.
It exists to decouple deploy from release — turn a feature on for one user, a thousand, or nobody, without redeploying. Run experiments and trust the numbers. Change configuration without a code change or a restart.
openflagr/flagr is the community-driven home of Flagr, advancing development
beyond the original checkr/flagr.
https://openflagr.github.io/flagr
Developers: clone the repo and run make help for build, test, and UI commands (single entrypoint for CI and local work).
| Page | Content |
|---|---|
| Home | Quick start, dev, testing, deploy |
| Overview | Concepts, running example, architecture |
| Use Cases | Feature flags, A/B testing, dynamic configuration |
| Debug Console | UI evaluation testing |
| Server Configuration | Environment variables, DB, auth, recorders |
| JSON Flag Source | GitOps, JSON format, validator |
| Notifications | Webhooks on flag changes |
| Exposure Logging | POST /exposures API |
| Data Recorders & A/B Analysis | Kafka, Kinesis, Pub/Sub; sample consumer; A/B analytics |
| Datar Analytics | In-process eval aggregates |
| API Reference | Swagger/OpenAPI spec |
POST /flags/{id}/duplicate or Flag Management on flag detail)git revertPOST /exposures for client-reported impressions, the trustworthy A/B denominatorApiResult); see make help for build-ui / test-e2edocker pull ghcr.io/openflagr/flagr
docker run -it -p 18000:18000 ghcr.io/openflagr/flagr
# Open the Flagr UI
open localhost:18000
Or try the hosted demo at https://try-flagr.onrender.com (cold starts may take a moment):
curl --request POST \
--url https://try-flagr.onrender.com/api/v1/evaluation \
--header 'content-type: application/json' \
--data '{
"entityID": "127",
"entityType": "user",
"entityContext": { "state": "NY" },
"flagID": 1,
"enableDebug": true
}'
<img src="https://github.com/openflagr/flagr/raw/1.2.2/docs/images/demo_readme.png" width="900">
Flagr has three components:
See the architecture overview for diagrams, request flows, and the deterministic bucketing algorithm.
Tested with vegeta — 2,000 req/s sustained, sub-millisecond
median latency:
Requests [total, rate] 56521, 2000.04
Duration [total, attack, wait] 28.26s, 28.26s, 365.53µs
Latencies [mean, 50, 95, 99, max] 371.63µs, 327.99µs, 614.92µs, 1.39ms, 12.50ms
Success [ratio] 100.00%
Status Codes [code:count] 200:56521
| Language | Client |
|---|---|
| Go | goflagr |
| JavaScript | jsflagr |
| Python | pyflagr |
| Ruby | rbflagr |
openflagr/flagr — Apache 2.0checkr/flagr — Apache 2.0 (original project)$ claude mcp add flagr \
-- python -m otcore.mcp_server <graph>