Skip to content

openflagr/flagr

Repository files navigation

Ask DeepWiki

What is Flagr?

Flagr is an open-source Go service for feature flags, A/B tests, and dynamic configuration. One primitive, the flag, backs all three: your code calls POST /api/v1/evaluation, Flagr looks at who is asking (entityID, entityContext), and returns a variant plus optional JSON attachment.

That lets you decouple deploy from release (ship code dark, turn it on per audience), run experiments with sticky assignment, and change runtime config without redeploying.

openflagr/flagr is the community home of Flagr, continuing development from the original checkr/flagr.


Documentation

Site: https://openflagr.github.io/flagr

Contributors: clone the repo and run make help (build, test, UI, CI targets).

Page Content
Behavioral contracts Eval vs exposure, recording, eval-only, cache
Integration guide Eval, batch, exposures (client API)
Contributing Clone, build, test, OpenAPI
Overview Concepts, running example, architecture
Use cases Flags, A/B, dynamic config; GET ?json= eval
Built-in context injection @ts*, @http_* in entityContext
Self-hosting Docker, DB, Compose, K8s
Environment variables DB, auth, recorders (pkg/config/env.go)
Exposure logging Client impressions for A/B
Data recorders Kafka, Kinesis, Pub/Sub
API reference OpenAPI

Features

  • Feature flags — kill switches, targeted rollouts
  • GET evaluationGET /api/v1/evaluation?json=… (same JSON as POST; use cases)
  • Built-in context injection@ts* and @http_* keys merged server-side (guide)
  • Duplicate flagPOST /flags/{id}/duplicate or UI Duplicate Flag
  • A/B testing — deterministic assignment; pair with exposure logging
  • Dynamic configurationvariantAttachment JSON on eval responses
  • GitOpsjson_file / json_http; flagr-validate in CI
  • Exposure loggingPOST /exposures for trustworthy denominators
  • Self-hosted — official Docker image + env vars
  • Databases — SQLite, MySQL, PostgreSQL, or JSON sources
  • Vue 3 UI — TypeScript (browser/flagr-ui); make build-ui, make test-e2e

Quick start

docker pull ghcr.io/openflagr/flagr
docker run -it -p 18000:18000 ghcr.io/openflagr/flagr

open http://localhost:18000

Demo API: try-flagr.onrender.com (may cold-start)

curl -sS -X POST https://try-flagr.onrender.com/api/v1/evaluation \
  -H 'content-type: application/json' \
  -d '{
    "entityID": "127",
    "entityType": "user",
    "entityContext": { "state": "NY" },
    "flagID": 1,
    "enableDebug": true
  }'

Flagr UI

Flagr UI

Architecture

Three parts (overview diagram, behavioral contracts):

  • EvaluatorPOST or GET /evaluation reads EvalCache in memory (default reload 3s; no per-request SQL). GET: use cases.
  • Manager — CRUD + flag_snapshot rows; webhooks after commit.
  • Metrics — async recorders (Kafka, Kinesis, Pub/Sub, Datar); slow sinks do not block eval.

Source: pkg/handler/eval.go, eval_cache.go, crud.go.

Performance

vegeta load test (~2k req/s, sub-ms median in published run):

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

Client libraries

Language Client
Go goflagr
JavaScript jsflagr
Python pyflagr
Ruby rbflagr

License

About

Flagr is a feature flagging, A/B testing and dynamic configuration microservice

Topics

Resources

License

Code of conduct

Contributing

Stars

2.6k stars

Watchers

55 watching

Forks

Packages

 
 
 

Contributors