Flag Evaluation Flow

FlagSync evaluates flags using the same logic flow across SDKs:
1

Is the SDK ready?

If not, the SDK returns the defaultValue (e.g., false) or control string.
// Before SDK is ready
const one = client.flag('flag-one', false); // false (defaultValue)
const two = client.flag('flag-two'); // "control"
await client.waitForReady();
Client-side SDKs can bootstrap via LocalStorage or from an initial flag set, using those values until the SDK initializes with server data.
2

Does the flag key exist?

If the flag key isn’t found, the SDK returns the defaultValue or control.
// Unknown flag, returns true (defaultValue)
const value = client.flag('foobarbaz', true);
If the flag key was included in the bootstrapped values, this value will be returned.
3

Is the flag disabled?

  • If disabled: The default “off” variant is returned, halting further evaluation.
  • If enabled: The algorithm proceeds to targeting and rollout checks.
Explore Flags: All Users to learn about default variants.
4

Does the flag have Targeting Rules?

5

Does the flag have a Percentage Rollout?

6

Fallback

Returns the “on” variant if no rules or percentages apply.
See Flags: All Users to learn about default variants.

Flow Diagram

Next Steps

Dive deeper into the flag evaluation process: