Command-Line Interface for Firebase that provides deployment, testing, and management functionality for Firebase projects.
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Firebase Remote Config management for dynamically updating app behavior and appearance without requiring users to download an app update.
Retrieves the current Remote Config template from Firebase.
/**
* Get Firebase Remote Config template
* @param options - Command options
* @returns Promise resolving to Remote Config template
*/
function get(options?: Options & {
/** Version number to retrieve (default: latest) */
versionNumber?: string;
/** Output format */
format?: "json" | "yaml";
/** Output file path */
output?: string;
}): Promise<{
conditions: Array<{
name: string;
expression: string;
tagColor?: string;
}>;
parameters: Record<string, {
defaultValue?: {
value?: string;
useInAppDefault?: boolean;
};
conditionalValues?: Record<string, {
value: string;
}>;
description?: string;
}>;
parameterGroups: Record<string, {
description?: string;
parameters: Record<string, any>;
}>;
version: {
versionNumber: string;
updateTime: string;
updateUser: {
email: string;
};
updateOrigin: string;
updateType: string;
rollbackSource?: string;
description?: string;
};
etag: string;
}>;Usage Examples:
const client = require("firebase-tools");
// Get current Remote Config template
const config = await client.remoteconfig.get({
project: "my-project"
});
console.log("Current config version:", config.version.versionNumber);
console.log("Parameters:", Object.keys(config.parameters));
// Get specific version
const oldConfig = await client.remoteconfig.get({
project: "my-project",
versionNumber: "123"
});
// Save to file
await client.remoteconfig.get({
project: "my-project",
output: "./remote-config-backup.json",
format: "json"
});Rolls back Remote Config to a previous version.
/**
* Rollback Firebase Remote Config to previous version
* @param versionNumber - Version number to rollback to
* @param options - Rollback options
* @returns Promise resolving when rollback completes
*/
function rollback(
versionNumber: string,
options?: Options & {
/** Confirm rollback without prompting */
confirm?: boolean;
}
): Promise<{
version: {
versionNumber: string;
updateTime: string;
updateUser: {
email: string;
};
updateOrigin: string;
updateType: string;
rollbackSource: string;
description?: string;
};
}>;Usage Examples:
// Rollback to specific version
await client.remoteconfig.rollback("125", {
project: "my-project",
confirm: true
});
// Interactive rollback (prompts for confirmation)
await client.remoteconfig.rollback("124", {
project: "my-project"
});Lists Remote Config version history.
/**
* List Firebase Remote Config versions
* @param options - Command options
* @returns Promise resolving to array of version information
*/
function versionsList(options?: Options & {
/** Limit number of versions to return */
limit?: number;
}): Promise<Array<{
versionNumber: string;
updateTime: string;
updateUser: {
email: string;
name?: string;
};
updateOrigin: "REMOTE_CONFIG_UPDATE_ORIGIN_UNSPECIFIED" | "CONSOLE" | "REST_API" | "ADMIN_SDK_NODE" | "ADMIN_SDK_JAVA" | "ADMIN_SDK_PYTHON" | "ADMIN_SDK_GO";
updateType: "REMOTE_CONFIG_UPDATE_TYPE_UNSPECIFIED" | "INCREMENTAL_UPDATE" | "FORCED_UPDATE" | "ROLLBACK";
rollbackSource?: string;
description?: string;
}>>;Usage Examples:
// List recent versions
const versions = await client.remoteconfig.versions.list({
project: "my-project",
limit: 10
});
console.log("Recent Remote Config versions:");
versions.forEach(version => {
console.log(`- Version ${version.versionNumber}: ${version.updateTime} by ${version.updateUser.email}`);
if (version.description) {
console.log(` Description: ${version.description}`);
}
});Remote Config parameters are key-value pairs that control app behavior:
{
"parameters": {
"welcome_message": {
"defaultValue": {
"value": "Welcome to our app!"
},
"conditionalValues": {
"premium_users": {
"value": "Welcome back, premium user!"
}
},
"description": "Message shown on app launch"
},
"feature_enabled": {
"defaultValue": {
"value": "false"
},
"conditionalValues": {
"beta_testers": {
"value": "true"
}
}
},
"max_items_per_page": {
"defaultValue": {
"value": "10"
},
"conditionalValues": {
"mobile_users": {
"value": "5"
}
}
}
}
}Conditions determine when to serve different parameter values:
{
"conditions": [
{
"name": "premium_users",
"expression": "user.customAttribute['subscription_type'] == 'premium'",
"tagColor": "BLUE"
},
{
"name": "beta_testers",
"expression": "user.inRandomPercentile <= 10",
"tagColor": "GREEN"
},
{
"name": "mobile_users",
"expression": "device.os == 'ios' || device.os == 'android'",
"tagColor": "ORANGE"
},
{
"name": "us_users",
"expression": "user.country in ['us', 'ca']",
"tagColor": "RED"
}
]
}Group related parameters for better organization:
{
"parameterGroups": {
"ui_customization": {
"description": "UI appearance and behavior settings",
"parameters": {
"primary_color": {
"defaultValue": {
"value": "#1976D2"
}
},
"show_banner": {
"defaultValue": {
"value": "true"
}
}
}
},
"feature_flags": {
"description": "Feature toggle switches",
"parameters": {
"new_checkout_flow": {
"defaultValue": {
"value": "false"
}
}
}
}
}
}Remote Config templates are deployed as part of the Firebase deployment process:
# Deploy Remote Config with other services
firebase deploy --only remoteconfig
# Deploy only Remote Config
firebase deploy --only remoteconfig{
"remoteconfig": {
"template": "remoteconfig.template.json"
}
}The template file should contain the complete Remote Config structure:
{
"conditions": [...],
"parameters": {...},
"parameterGroups": {...},
"version": {
"description": "Updated feature flags and UI customization"
}
}{
"parameters": {
"new_payment_flow": {
"defaultValue": {"value": "false"},
"conditionalValues": {
"early_adopters": {"value": "true"}
}
}
},
"conditions": [
{
"name": "early_adopters",
"expression": "user.customAttribute['beta_tester'] == 'true'"
}
]
}{
"parameters": {
"button_color": {
"defaultValue": {"value": "blue"},
"conditionalValues": {
"variant_a": {"value": "blue"},
"variant_b": {"value": "green"}
}
}
},
"conditions": [
{
"name": "variant_a",
"expression": "user.inRandomPercentile <= 50"
},
{
"name": "variant_b",
"expression": "user.inRandomPercentile > 50"
}
]
}