ivarconr
Joined 13 years ago
Joined 13 years ago
Unleash also originates from Europe.
We see teams move when they have more complicated needs, either in terms of compliance, 4-eyes approvals, scalability and lifecycle tracking.
Anything you’re missing today, or is it working fine?
- Self-hosted open source is free, with no usage limits. Run it on your own Postgres and you pay for a small VM.
- Paid plans are priced per seat (people using the admin UI), not per end user or per request. One million MAUs or a hundred million costs the same (we have some protection for high traffic volumes)
- Server-side SDKs evaluate locally, so a flag check never hits our servers and there's nothing to meter. Frontend traffic goes through Edge, which you can also self-host.
If you'd rather not lock into any vendor, put flags behind OpenFeature. Unleash, Flagsmith, GrowthBook and others all have providers, so switching later is a config change, not a rewrite.
Unleash started in 2014 as an internal tool at my company at the time, because we wanted to ship to production continuously without big-bang releases. It's an Open-Source feature flag platform with SDKs for >25 languages.
A few design choices that might be interesting:
- Local evaluation: server-side SDKs fetch the flag config and evaluate in-process, so user data never leaves your app and a flag check is a memory lookup, not a network call.
- Shared Rust engine (Yggdrasil): the evaluation logic is written once in Rust and embedded in the SDKs, so behaviour is the same across languages.
- Unleash Edge: a Rust proxy/cache for frontend and edge clients at scale. (Commercial)
- OpenFeature: supported if you don't want to lock into our SDKs.
We have a few tricks we apply:
- Yggdrasil is the "Unleash SDK Engine". Written in rust and cross-compiled to multiple languages. This makes it easier to add features, and ensures all SDKs implements the protocol the same way. https://github.com/Unleash/yggdrasil
- Try to have a simple and generic protocol - This allows us to add new targeting capabilities later, without having to change the SDKs. In practice I must admit this is not easy and have only been possible in a few scenarios
- Make sure the SDK report their protocol version. This allows you do adapt the product to tell the user to upgrade to get new features. We also leveraged the SDK version when we introduced segments, as we could rewrite those to a less performant format in the API, to simplify the rollout.