e-volv
Contents

e-volv Launch

e-volv Launch serves feature flags to every service and app in a workspace. A flag has named variants, targeting rules that pick a variant per subject, and a kill switch for incidents. Server SDKs receive the full ruleset and evaluate locally; browser and mobile SDKs receive evaluated values for one context and never hold targeting logic. The full delivery contract lives in the Launch SDK contract.

Projects and environments

A Launch project groups flags for one product area. Each project has environments - typically production and staging - and every environment has its own ruleset: the same flag can be on in staging and off in production with different defaults in each. Every SDK request is scoped to one environment by the key it presents.

Flags and variants

A flag declares a type - boolean, string, number or JSON - and named variants of that type, e.g. on/off or a/b. Rules and rollouts reference variants by name, so renaming a variant does not rewrite targeting.

Precedence

First match wins:

OrderStepReason
1Flag absent from the rulesetFLAG_NOT_FOUND
2killedKILLED
3An unmet prerequisitePREREQUISITE_FAILED
4Ordered rules; the first whose clauses and segments all matchRULE:n or ROLLOUT
5That rule's rollout if it has one, else its variantROLLOUT or RULE:n
6The environment's defaultVariantDEFAULT
7The caller's fallback if the default variant does not existERROR

Two properties are load-bearing. A kill beats everything below it - during an incident the operator must not reason about whether an allowlist rule outranks them. And evaluation never throws and never performs I/O: it sits on the customer’s request path, so a malformed payload returns the fallback with reason ERROR; it does not raise.

Rollouts and bucketing

bucket(flagKey, subject, salt) → 0-9999, sha1(flagKey[:salt]:subject), first 8 hex digits, modulo 10 000. The flag key is inside the hash deliberately: without it every flag at 5% selects the same 5% of subjects. A rollout with no targetingKey cannot be deterministic, so it serves the environment default with reason DEFAULT rather than guessing.

Segments

A segment is a named, reusable set of rules referenced from any flag: an allow list of keys, a deny list that beats it, and rule clauses with optional percentage weights. Huge membership lists stay in the store as external segments; an SDK asked to evaluate one locally treats the subject as not a member: the narrower, safe answer.

The kill switch

The kill switch forces a flag to its off variant for everyone, ahead of every rule, and is stored separately from targeting: killing during an incident does not destroy the targeting underneath, and un-killing restores exactly what was there before.

Reasons

Every evaluation returns a reason, which is what makes the evaluation debugger answer “why is this on for me” without a support ticket:

ReasonMeans
KILLEDThe kill switch is on; everyone gets the off variant.
OFFThe flag is off; everyone gets the off variant.
PREREQUISITE_FAILEDA flag this one depends on is not serving one of the required variants.
TARGET_MATCHThe subject was on an individual target list.
RULE:nTargeting rule n matched and served its variant.
ROLLOUTA percentage rollout placed the subject in a slice.
DEFAULTThe flag is on and nothing else matched; the environment default variant was served.
FLAG_NOT_FOUNDThe flag does not exist (or is absent from the payload); the caller’s default was returned.
TYPE_MISMATCHThe served value was not of the requested type; the caller’s default was returned.
ERRORThe payload was malformed; the caller’s default was returned.

Next

Server and client keys - which key each platform gets and how origin allowlists work. The HTTP API - bootstrap, streaming, exposures and ping, for any language we do not ship an SDK for. SDKs - one client per platform, installable from its registry.

We use only essential cookies to keep you signed in and the app working. With your consent we may enable optional analytics to help us improve e-volv. See our Privacy Policy and Terms.