Remote Config conditional expression reference

This page contains reference information for building conditionalexpressions usingRemote Config backend APIs or theFirebase console. Formore information about setting up and using the backend APIs, seeModify Remote Config programmatically.

Elements used to create conditions

TheRemote Config REST API supports the same elements that you can use tocreate conditions when configuringRemote Config using theFirebase Console:

ElementDescription
&&

Used to create a logical "and" of elements if using more than one element for a condition. If an element is used in REST syntax without the &&, that element is treated as a condition.

Note: a space is required before and after the ampersands. For example:element1 && element2.

app.build

Evaluates toTRUE orFALSE based on the value of an app's build number.

Note: Only available on Apple and Android devices. For Apple, use the value ofCFBundleVersion and for Android, use the value ofversionCode.

app.version

Evaluates toTRUE orFALSE based on the value of an app's version number.

Note: For Android devices use the value ofversionName, and for Apple devices use the value ofCFBundleShortVersionString.

app.idAn element based on the app's Firebase App ID
app.audiencesAn element that evaluates toTRUE orFALSE based on the user's presence or absence in one or moreFirebase Analytics audience(s).
app.firstOpenTimestampAn element based on the first time the user launches an app, obtained fromtheGoogle Analyticsfirst_open event. Uses ISO dateformat with the option to specify a fixed time zone; for example,app.firstOpenTimestamp >= ('2022-10-31T14:37:47', 'America/Los_Angeles'). If no time zone is specified, GMT is used.
app.userPropertyAn element that evaluates toTRUE orFALSE based on the numeric or string value of aGoogle Analytics User Property.
app.operatingSystemAndVersion

An element based on the operating system on which an app is running. Evaluates toTRUE when the OS and OS version matches the specified target.

Note: Only available for Web apps.

app.browserAndVersion

An element based on the browser on which an app is running. Evaluates toTRUE when the browser and browser version matches the specified target.

Note: Only available for Web apps.

app.firebaseInstallationIdAn element based on the IDs of specific device installations. Evaluates toTRUE when theinstallation ID matches one of specified installation IDs.
app.customSignalAn element that evaluates toTRUE orFALSE based on the numeric, semantic, or string value of thecustom signal conditions.
device.countryAn element based on the region/country that a device is located in, using the ISO 3166-1 alpha-2 standard (for example, US or UK). Evaluates toTRUE when a country matches an expected country code.
device.dateTimeAn element based on the time of the last fetch the device performs. Uses ISO date format with the option to specify a fixed time zone; for example,dateTime('2017-03-22T13:39:44', 'America/Los_Angeles').
device.languageAn element based on the language selected on a device. The language is represented using an IETF Language tag such as es-ES, pt-BR, or en-US. Evaluates toTRUE when a language matches an expected language code.
device.osAn element based on the operating system used on a device (Apple or Android). Evaluates toTRUE when the device OS is the expected type.
percentEvaluates toTRUE based on a user's inclusion in a randomly assigned fractional percentage (with sample sizes as small as 0.000001%).

A single-element condition contains three fields:

  1. An arbitrarily-definedname (up to 100 characters)
  2. A conditional expression that evaluates toTRUE orFALSE,made up of the elements shown above.
  3. (Optional) ThetagColor, which canbe "BLUE", "BROWN", "CYAN", "DEEP_ORANGE", "GREEN", "INDIGO","LIME", "ORANGE", "PINK", "PURPLE", or "TEAL". The color iscase-insensitive, and only affects how conditions are displayed in theFirebase console.

Supported operators

For example,app.build.notContains([123, 456]) returnsTRUE if the actual app build is 123 or 492, but returnsFALSE if the actual app build is 999.

For example,app.version.notContains([123, 456]) returnsTRUE if the actual app version is 123 or 492, but returnsFALSE if the actual app version is 999.

ElementSupported operatorsDescription
app.audiences.inAtLeastOne([...])

ReturnsTRUE if the actual audience matches at least one audience name in the list.
For example:

app.audiences.inAtLeastOne(['Audience 1', 'Audience 2'])

app.audiences.notInAtLeastOne([...])

ReturnsTRUE if the actual audience does not match at least one audience name in the list.

app.audiences.inAll([...])

ReturnsTRUE if the actual audience is a member of every audience name in the list.

app.audiences.notInAll([...])

ReturnsTRUE if the actual audience is not a member of any audience in the list.

app.firstOpenTimestamp<=, >

Compares the time of thefirst_open event with the specified time in the condition and returnsTRUE orFALSE based on the operator.
Sample usage:
app.firstOpenTimestamp >= ('2022-10-31T14:37:47', 'America/Los_Angeles').
To specify a range:
app.firstOpenTimestamp >= ('2022-11-01T00:00:00') && app.firstOpenTimestamp< ('2022-12-01T00:00:00') If no time zone is specified, GMT is used.

app.userProperty<,<=,==,!=,>=,>

ReturnsTRUE if the actual user property numerically compares to the value specified in a way that matches the operator.

app.userProperty.contains([...])

ReturnsTRUE if any of the target values is a substring of the actual user property.

app.userProperty.notContains([...])

ReturnsTRUE if none of the target values is a substring of the actual user property.

app.userProperty.exactlyMatches([...])

ReturnsTRUE if the actual user property exactly matches (case-sensitive)any of the target values in the list.

app.userProperty.matches([...])

ReturnsTRUE ifany target regular expression in the list matches a substring of, or the entire, actual value. To force matching of the entire string, preface the regular expression with "^" and suffix it with "$". UsesRE2 syntax.

app.id==

ReturnsTRUE if the value specified matches the app's App Id.

app.build<,<=,==,!=,>=,>

ReturnsTRUE if the actual app build numerically compares to the value specified in a way that matches the operator.

app.build.contains([...])

ReturnsTRUE if any of the target values is a substring of the actual app build—for example, "a" and "bc" are substrings of "abc".

app.build.notContains([...])

ReturnsTRUE if none of the target values is a substring of the actual app build.

app.build.exactlyMatches([...])

ReturnsTRUE if the actual app build exactly matchesany of the target values in the list.

app.build.matches([...])

ReturnsTRUE ifany target regular expression in the list matches a substring of, or the entire, actual value. To force matching of the entire string, preface the regular expression with "^" and suffix it with "$". UsesRE2 syntax.

app.version<,<=,==,!=,>=,>

ReturnsTRUE if the actual app version numerically compares to the value specified in a way that matches the operator.

app.version.contains([...])

ReturnsTRUE if any of the target values is a substring of the actual app version—for example, "a" and "bc" are substrings of "abc".

app.version.notContains([...])

ReturnsTRUE if none of the target values is a substring of the actual app version.

app.version.exactlyMatches([...])

ReturnsTRUE if the actual app version exactly matchesany of the target values in the list.

app.version.matches([...])

ReturnsTRUE ifany target regular expression in the list matches a substring of, or the entire, actual value. To force matching of the entire string, preface the regular expression with "^" and suffix it with "$". UsesRE2 syntax.

app.operatingSystemAndVersion.inOne([...])

ReturnsTRUE if the OS and version matchesany of the target values in the list.
For example:

    app.operatingSystemAndVersion.inOne([operatingSystemName('Macintosh')    .version.==('10.15')])

app.browserAndVersion.inOne([...])

ReturnsTRUE if the browser and version matchesany of the target values in the list.
For example:

    app.browserAndVersion.inOne([browserName('Chrome').anyVersion])

app.firebaseInstallationIdin [...]

ReturnsTRUE if the installation id matches any specified in the list. Sample usage:app.firebaseInstallationId in ['eyJhbGciOiJFUzI1N_iIs5', 'eapzYQai_g8flVQyfKoGs7']

app.customSignal<,<=,==,!=,>=,>

ReturnsTRUE if the custom signal condition numerically compares to the value specified in a way that matches the operator.

app.customSignal.contains([...])

ReturnsTRUE if any of the target values is a substring of the actual custom signal condition.

app.customSignal.notContains([...])

ReturnsTRUE if any of the target values is a substring of the actual custom signal condition.

app.customSignal.exactlyMatches([...])

ReturnsTRUE if the actual custom signal condition exactly matches (case-sensitive) any of the target values in the list.

app.customSignal.matches([...])

ReturnsTRUE if any target regular expression in the list matches a substring of, or the entire, actual custom signal condition. To force matching of the entire string, preface the regular expression with "^" and suffix it with "$". UsesRE2 syntax.

version(app.customSignal)<,<=,==,!=,>=,>

ReturnsTRUE if the custom signal condition semantically compares to the value specified in a way that matches the operator.

device.countryin [...]

ReturnsTRUE if the device's country matches any specified in the list. Sample usage:device.country in ['gb', 'us']. The device country code is determined using the device's IP address in the request or the country code determined by Firebase Analytics (if Analytics data is shared with Firebase).

device.dateTime<=,>

Compares the current time to the target time of the condition and evaluates toTRUE orFALSE based on the operator. Sample usage:dateTime< dateTime('2017-03-22T13:39:44').

device.languagein [...]

ReturnsTRUE if any of the app's languages match a language in the list. Sample usage:device.language in ['en-UK', 'en-US'].

device.os==,!=ReturnsTRUE if the device's operating system compares to the value in that field matching the operator.
percent<=,>,between

ReturnsTRUE if the value in thepercent field compares to the value that was randomly assigned matching the operator.

You can specify a seed to select a new randomly-assigned group of app instances for a given percentage range as described inCondition rule types.

To do this, provide the name of the seed before the operator, as in the following example:

percent('keyName')<= 10

To configure a specific range, you can use thebetween operator. To configure a range of users between 20 and 60 using thedefault seed:

percent between 20 and 60

To configure a range of users between 60 and 80 using a custom seed:

percent('seedName') between 60 and 80

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2026-02-04 UTC.