Compare

Firebase Remote Config for translations: when it works and when it doesn’t

Updated

Firebase Remote Config can hold app strings, and for a handful of values it works well, but it is a key-value store for configuration, not a strings system: each string is one parameter, translations are one conditional value per device language, and it has no plural rules, no translation workflow and no signature the app can verify. If you are changing a few labels, Remote Config is fine; once you are managing copy and translations across locales, a dedicated strings service like AirStrings is the better fit.

This page explains where Remote Config works for strings, where it starts to hurt, and what changes with a strings service.

How teams use Remote Config for strings

The usual pattern: create a parameter such as checkout_cta, set an in-app default, then add conditional values that target the device language (Device language: German, Device language: French, and so on). The app calls fetchAndActivate() and reads the value with a fallback to the default.

That gets you remote text with no extra vendor, and it is a reasonable choice for a promo banner or a single headline.

The limits that matter for copy

  • One parameter per string, one condition per language. Every translation is a conditional value, and the console has no view of “all strings in German” or of which strings are missing a translation.
  • Project-wide caps. Remote Config allows up to 3,000 parameters and 2,000 conditions per project, and up to 1,000,000 characters across all parameter values (Remote Config parameters and limits). Copy and configuration for every platform share those caps.
  • Fetch interval. The default and recommended production minimum fetch interval is 12 hours, and clients that fetch too often are throttled (Get started, Apple platforms). Real-time Remote Config can push changes sooner on supported SDKs.
  • Fetches are now metered. Starting September 1, 2026, Remote Config is free up to 100,000 fetch requests per day per project. On the Spark plan, a project that keeps exceeding that is throttled after a 30-day grace period; on Blaze, additional fetches cost $0.000006 each up to 10 million per day (Remote Config pricing).
  • No plurals or ICU. Values are strings that you can validate as String, Boolean, Number or JSON. Plural forms, gender selects and number formatting are left to your own code.
  • No signature on values. Delivery runs over HTTPS to Google, and Firebase does not provide a signature the app can check before rendering a value.

Facts above checked on October 4, 2026, from the Firebase documentation.

Comparison

Firebase Remote ConfigAirStrings
Unit of contentParameter with conditional valuesString key with a value per locale
TranslationsOne condition per device language, per parameterLocales are first-class: every key has a value per locale; CSV import and export
Plurals and selectsYour own codeICU MessageFormat per key, formatted by the SDK
Limits3,000 parameters, 2,000 conditions, 1,000,000 value characters per project1,000 keys and 3 locales on Free; up to 10,000 keys and unlimited locales on paid plans
Delivery costFree up to 100,000 fetches per day, then per-fetch on BlazeNot metered by downloads on any plan
Content signed and verified on deviceNoEd25519 on every bundle; tampered bundles are rejected
Offline first launchIn-app defaults you maintain in code or a plistSigned bundles committed with airstrings bundles pull
EnvironmentsSeparate Firebase projects or conditionsStaging and production per project, with promotion
Targeting and A/B testsAnalytics audiences, country, app version, percentiles, Firebase A/B TestingString variants with on-device assignment
PlatformsApple, Android, Web, Flutter, Unity, C++iOS (Swift), Android (Kotlin), React Native, Web

When Remote Config is the right tool

  • A few strings, mostly one language. A banner, a promo headline or a support message. Adding a strings SDK for five values is not worth it.
  • The text is tied to a feature flag or experiment. If copy changes together with a rollout targeted by Analytics audiences, keeping both in Remote Config keeps them in one place.
  • You already use Firebase everywhere, including Flutter, Unity or C++, which AirStrings does not cover.

When to move strings out of it

  • You support more than one or two languages, and translators or PMs need to see what is missing.
  • You need correct plurals in languages with more than two plural forms.
  • Your string parameters are crowding out real configuration, or the fetch meter is becoming a cost line.
  • The text on screen has to be provably what you published: support numbers, prices, legal or safety copy.

What it looks like with AirStrings

val airStrings = AirStrings.create(context, AirStringsConfiguration(
    organizationId = "org_xxx",
    projectId = "proj_xxx",
    environmentId = "env_xxx",
    publicKeys = listOf("BASE64_ED25519_PUBLIC_KEY"),
))

val text = airStrings.format("items.count", mapOf("count" to 5))
airstrings strings set items.count en="{count, plural, one {# item} other {# items}}" --format icu --push
airstrings publish

You can keep Remote Config for flags and experiments and move only the copy. The full setup for iOS, Android, React Native and web is in How to update app strings without an App Store release. For a comparison with a translation platform’s OTA feature, see AirStrings vs Lokalise OTA.

FAQ

Can I use Firebase Remote Config for translations?

Yes, for a few strings. Create a parameter per string and add a conditional value for each device language. It gets harder with many strings and languages: there is no per-locale view, no plural handling and a project limit of 3,000 parameters and 2,000 conditions.

How often does Remote Config update strings on the device?

The default and recommended production minimum fetch interval is 12 hours, and clients that fetch too often are throttled. Real-time Remote Config can deliver changes sooner on supported SDK versions.

Is Firebase Remote Config free?

Since September 1, 2026, Remote Config is free up to 100,000 fetch requests per day per project. Beyond that, Spark projects are throttled after a 30-day grace period and Blaze projects pay per fetch.

Does Remote Config support ICU plurals?

No. Values are plain strings validated as String, Boolean, Number or JSON. Plurals and selects have to be handled in your own code. AirStrings stores ICU MessageFormat per key and the SDK formats it.

Can I use Remote Config and AirStrings together?

Yes. Keep feature flags, rollouts and experiments in Remote Config and move user-facing copy and translations to AirStrings.