Skip to content

Values and Rules

Every Remote Config returns a value on each request. That value is determined by an ordered set of rules in Setup → Rules, with a Default Value as the final fallback.

Four value types

Each Remote Config has exactly one value type. It determines the rule editor's style and the data shape the SDK receives.

TypeBest forEditor
BooleanFeature toggles, kill switches, show/hide togglesTrue / False toggle
NumberNumeric thresholds, durations, retry counts, weightsNumber input
StringCopy, URLs, single enum valuesSingle-line text input
JSONStructured payloads (themes, level configs, ad placements, and anything else that needs multiple fields delivered together)JSON editor with type validation

How to choose

A simple decision path:

  1. The answer is "yes / no" → Boolean
  2. The answer is a single number → Number (don't embed the unit in the value; use the field name to indicate the unit)
  3. The answer is a string or URL → String (don't squeeze JSON in; if you need multiple fields, upgrade to JSON)
  4. The structure is more complex → JSON (version related fields together)

⚠️ Changing the type is a destructive operation. Changing the Value Type after a config is live rebuilds the rule editor — any old values that cannot be parsed as the new type will be cleared. Think through the shape before you create the config. If you do need to change the shape, the recommended approach is to create a new config and migrate callers rather than editing in place.

Notes on each type

Boolean — best for the simplest "is this feature on for this user" question. If you're already thinking "yes, but with these parameters," you probably want JSON (one field as the switch, other fields as parameters) so the switch and parameters can change together.

Number — accepts integers and decimals. For numbers with units ("30 seconds" vs. "30 minutes"), document the unit in the config name or description; ABC does not store units.

String — if the text contains commas or curly braces and is essentially a list or map, switch to JSON.

JSON — the top of the editor provides Format JSON and Compress JSON tools. The value is validated as legal JSON before saving. Clients should treat the JSON shape as a contract: add new fields with defaults, avoid renaming existing fields, and handle breaking changes by versioning the config name (e.g. my_config_v2).

Rule evaluation

The Rules section presents rules as an IF / ELSE IF / ELSE list:

Remote Config IF/ELSE rules listRemote Config rules editor

Evaluation order

Rules are evaluated from top to bottom. For each request:

  1. Take the first rule.
  2. Check whether the user matches the audience and falls within the traffic percentage. If both conditions are met → return that rule's value and stop.
  3. Otherwise, move to the next rule.
  4. If no rule matches → return the Default Value.

A user matches at most one rule. Reordering rules means redefining priorities — Add Rules appends a new rule at the bottom; drag to reorder.

Order matters more than coverage. Two rules with overlapping audiences will only ever trigger the one listed first. Put the most specific rules at the top, the broadest fallback at the bottom.

Edit modes

The setup page provides two edit modes (Form / JSON toggle):

  • Form (default) — card-based visual editing
  • JSON — the same rules expressed as JSON; use this when copying a complete rule set across configs or environments

JSON edits sync back to the Form view in real time.

What a rule contains

Each rule has 4 fields:

FieldDescription
Select AudienceSelect an existing audience by name
AllowlistA fixed set of user IDs that always match this rule regardless of audience or traffic percentage. Commonly used for QA and internal users
Traffic PercentageOf the users who match the audience, the fraction actually served by this rule
ValueThe value returned when this rule is matched. The editor style changes with the value type

About Traffic Percentage

Traffic Percentage applies after the audience matches. For example, if a rule's audience is vip_user and Traffic Percentage = 50, then roughly half of VIP users match this rule; the other half flow to the next rule or the default value.

This lets you run a gradual rollout without touching the audience:

  • Day 1 — set traffic to 5%; 95% of matching users still get the default value
  • Day 3 — metrics look healthy; raise to 25%
  • Day 7 — raise to 100%; fully live

If you promote this rule to an experiment, the experiment further splits that traffic slice into different variants.

How the audience selector works

Rules store the audience name, not a copy of its conditions. The audience's attribute conditions are rendered in read-only form below the selector so reviewers can see the full filter (e.g. os_platform equals "ios") without leaving the setup page.

Because a reference is stored rather than a copy, editing an audience changes the target population for every Remote Config (and experiment) that references it. The platform locks the audience's rule-editing entry point when it is referenced by an active experiment to prevent accidental drift.

Default Value

ELSE → Default Value is required. When no rule matches — either because no audience matched, or a user matched an audience but was excluded by the traffic percentage — the SDK returns this value.

The default value should be the safest value for the largest group, typically the old value from before launch. New behavior is introduced by adding rules on top of the default value, not by changing the default value in place — this way, clients falling back to the default value do not experience a sudden behavior change.

Rule order and overlapping audiences

When two rules reference audiences that overlap, users in the overlap will only ever trigger the rule listed first.

Order by specificity: put the most specific audience at the top, the broadest (or default) at the bottom.

A common pattern:

Remote Config rule priority example

If rules 1 and 2 were swapped, internal testers would fall into the new_installs_v1_8 bucket first and could not be force-enabled, because the broader audience matched first.


Archive

The platform's recommended way to retire a config:

  • Hidden from the default list view (visible only with the Status filter set to Archived)
  • No longer evaluated for new SDK requests
  • Associated experiments that are In Progress continue to resolve for already-bucketed users; new traffic no longer enters this config

Note: If you try to archive a config that is driving an Active experiment, the platform will reject the request — end or stop the experiment first.

Unarchive

The ⋮ menu on an archived row provides Unarchive. After restoring, the status returns to Active and the config re-enters SDK evaluation.

Log (audit history)

Every save creates a log entry. Open the Log menu on the detail page to view the history: each row shows one change — who, when, and which fields changed. Remote Config audit log listRemote Config audit log detail