- HTML 63.3%
- Go 36.1%
- Dockerfile 0.6%
|
|
||
|---|---|---|
| cmd/server | ||
| internal | ||
| migrations | ||
| ui | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| README.md | ||
FlagForge
self hosted feature flags. no cloud, no vendor lock, no four hundred dollar a month invoice
docker compose up -d
done. you have a flag service.
why this exists
launchdarkly costs a fortune. unleash is heavy. flagsmith wants you to run k8s. flagforge is one go binary, postgres, and a UI. does one thing
| FlagForge | LaunchDarkly | Unleash | |
|---|---|---|---|
| self-hosted | yes | no | yes |
| single binary | yes | no | no |
| gradual rollout | yes | yes | yes |
| targeting rules | yes | yes | yes |
| audit log | yes | yes | yes |
| price | free | |
free or $ |
| setup | 2 min | 30 min | 1 hr |
features
toggle flags on and off per project. targeting rules with eq, neq, in, nin, contains, prefix. gradual rollouts with FNV bucketing so same user same result. projects for separate apps or envs. audit log for every change. SSE so clients can subscribe instead of polling. dashboard to create edit toggle set rules. tiny SDK, plain HTTP, no deps, any language
quick start
docker compose (easiest)
git clone https://git.hexed.systems/lifelessai/flagforge
cd flagforge
docker compose up -d
API on 8080, dashboard on 5173
or run locally: start postgres, apply migrations/001_init.sql, run the server with DATABASE_URL and ADDR. see the compose file for the shape
API
all SDK calls need X-API-Key with your project key
evaluate one flag: POST /sdk/v1/evaluate with flag_key and context. you get enabled and reason (disabled, rule_match, rollout, default). bulk: POST /sdk/v1/evaluate/bulk with flag_keys and context. all flags for caching: GET /sdk/v1/flags
targeting rules
evaluated in order, first match wins. eq, neq, in, nin, contains, prefix. examples: plan eq "pro", country neq "CN", plan in ["pro","enterprise"], email contains "@acme.com", user_id prefix "internal_"
rollouts
percentage plus sticky key (e.g. user_id). FNV hash so deterministic, no db hit per request. same user same result. roll 0 to 100 at your pace
SDK
its just HTTP. POST to evaluate with JSON, read enabled. go, js, python, whatever. no magic SDK required
config
DATABASE_URL for postgres. ADDR for listen, default :8080
roadmap
multivariate flags, flag dependencies, scheduled changes, webhooks on toggle, import from launchdarkly JSON, official SDK packages, eval counts, SSO for the dashboard. PRs welcome
contributing
clone, docker compose up postgres, go run ./cmd/server, open the ui
license
MIT