Nothing runs when nothing asks
Scale-to-zero on the Cloudflare free tier. No always-on process, no database instance, no monthly floor.
Open source, Apache-2.0
No server. No database. No bill. Self-host your flag service in five minutes, and drive it from any OpenFeature SDK.
Drag the rollout. The same visitors stay raised as it climbs.
Works today with these languages, each through its own OpenFeature provider:

One deploy brings up the OFREP read API, the admin API and this, at/admin, inside your own infrastructure. There is no second service to run and no vendor console to log into.
The rule you just built in the hero is the same rule shape this editor writes, evaluated by the same engine.
Scale-to-zero on the Cloudflare free tier. No always-on process, no database instance, no monthly floor.
The read path implements OFREP, so Go, Java, Python and .NET work through their own OpenFeature providers. We ship no SDKs.
A storage adapter is four methods. Cloudflare KV, Redis and Postgres ship today, and a conformance suite proves any adapter you write.
Sticky SHA-256 rollouts keep the same users in the same bucket across deploys. Ordered rules, first match wins.
The read API, the admin API and the dashboard all come up together at one URL. There is no second service to operate.
Flags live in your account and your compliance perimeter. Swapping to another provider is a one-line change.
An honest table, including the rows where Flaghoist loses today.
| LaunchDarkly | Flagsmith / Unleash | PostHog | flagd | Flaghoist | |
|---|---|---|---|---|---|
| Deployment | SaaS | Server + Postgres | SaaS or server + DB | Sidecar per pod | Serverless, or any runtime |
| Idle cost | Subscription | Always-on server + DB | Free tier, then usage | A sidecar per pod | $0, scale-to-zero |
| Management UI | Yes | Yes | Yes | No | Yes, self-hosted |
| Protocol | Proprietary SDK | OF providers | Own SDK | OpenFeature-native | OpenFeature + OFREP |
| Your data lives | Their cloud | Your DB | Their cloud | Files | Your DB, your account |
| Multivariate flags | Yes | Yes | Yes | Yes | Not yet, boolean only |
| Experiments / A-B | Yes | Yes | Yes | No | No, bring your own analytics |
| Maturity | Mature | Mature | Mature | CNCF | Pre-alpha, one maintainer |
Why not just build it yourself? You can. A JSON blob in object storage gets you 60% of the way. The other 40% is what is here: sticky SHA-256 rollouts that do not reshuffle users on every deploy, ordered targeting rules, OFREP conformance so every OpenFeature SDK works unmodified, an audit trail, and a UI your PM can use without a deploy.
One config file, one command. Your own Worker and KV, or bring Redis, Postgres, or an adapter you wrote.
$ npm create flaghoist@latest team-flags
$ cd team-flags && npx flaghoist deploy
→ https://team-flags.you.workers.devJavaScript shown. In Go, Python, Java or .NET, install your language's official OFREP provider instead. There is nothing Flaghoist-specific to add.
$ npm i @openfeature/web-sdk @flaghoist/vueWire it at startup and your application code never mentions Flaghoist again. It only ever talks to OpenFeature.
await OpenFeature.setProviderAndWait(
new FlaghoistProvider({ url, apiKey }),
)Then toggle it, roll it to 25%, or target a cohort. From the dashboard or the CLI, with no deploy.
const newCheckout = useFeatureFlag('new-checkout')Weighing a single-maintainer project before you adopt it is fair. Here is exactly what it means for you, and why it matters less here than it would elsewhere.
If this project stalled tomorrow, you would keep running exactly what you are running today. That is deliberate. It is the whole point of self-hosting on open protocols.
Self-host it, read it, fork it. Never pay per seat for a toggle again.
$ npm create flaghoist@latest team-flags