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 Config | AirStrings | |
|---|---|---|
| Unit of content | Parameter with conditional values | String key with a value per locale |
| Translations | One condition per device language, per parameter | Locales are first-class: every key has a value per locale; CSV import and export |
| Plurals and selects | Your own code | ICU MessageFormat per key, formatted by the SDK |
| Limits | 3,000 parameters, 2,000 conditions, 1,000,000 value characters per project | 1,000 keys and 3 locales on Free; up to 10,000 keys and unlimited locales on paid plans |
| Delivery cost | Free up to 100,000 fetches per day, then per-fetch on Blaze | Not metered by downloads on any plan |
| Content signed and verified on device | No | Ed25519 on every bundle; tampered bundles are rejected |
| Offline first launch | In-app defaults you maintain in code or a plist | Signed bundles committed with airstrings bundles pull |
| Environments | Separate Firebase projects or conditions | Staging and production per project, with promotion |
| Targeting and A/B tests | Analytics audiences, country, app version, percentiles, Firebase A/B Testing | String variants with on-device assignment |
| Platforms | Apple, 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 publishYou 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.