Firebase Remote Config can be a powerful and easy way to make changes in your app, discover what resonates with your audience, and then quickly revert those changes if needed. Previously, if you wanted to remember what values you used in the past and how they changed over time, you had to keep track of them manually. In one-person teams, this is a hassle. But for large teams, where lots of different developers could be changing the project's Remote Config values at once, this is a major headache.

Today, we are happy to announce that we're adding change history to Remote Config. Finding out who made changes to what values, and reverting back to an earlier set of values is now as simple as a click of a button!

Change History in Remote Config

With change history in Remote Config, Firebase will save 300 versions of a project's Remote Config values for up to 90 days. You'll also be able to see how parameters and conditions have changed over time, who made those changes, when they were made, and how were they made (via the Firebase console or the REST API). And if you ever want to roll back to a previous version, all you have to do is click the rollback button.

Change history is available both on the Firebase Console and via the Remote Config REST API.

Just-eat.com, a European-based food delivery company and a long time Remote Config user, were delighted with change history for Remote Config.

"Thanks to change history, no change going to production goes unnoticed anymore. The team now has more confidence and there is no room for ambiguity when it comes to updating Remote Config. We can inspect who across the company made a particular change and rollback to a previous configuration with confidence should there be a need to." - Alberto De Bortoli, Principal iOS Engineer from Just-eat.com

Let's go over briefly how Change History works in Remote Config

Let's assume Developer Denise wanted to see the previous values of new_search param in her project's Remote Config.

She opens the change history view of her project and sees that her project is currently at Version 37 & that it was created by Mayank Jain. She clicks on the previous version of her project's Remote Config (version 36).

](https://2.bp.blogspot.com/-4ld2sD_Z1iY/W33kVHGRAdI/AAAAAAAACc4/OXoXxBboHiMTyFrsjaVyoJwJ7tM2KOIcACLcBGAs/s1600/image4a.png)

](https://2.bp.blogspot.com/-VoYo5eBObCw/W33kVGxqu3I/AAAAAAAACc0/XBlNrHs7dzssVlR6pAXweiHy8R9-y2GxACLcBGAs/s1600/image5a.png)

In the change history view, she can see that in the previous version 36, the value of new_search param was built with a 10% users condition - and that Mayank Jain (from her team) had set the value of new_search param to true in version 37 (current live version). Denise can also see that Mayank made that incremental update from the Firebase Console.

Denise wants to roll back Remote Config to version 36, so she clicks the "Rollback to version 36" button.

Remote Config creates a new version 38 which is based on the rollback to version 36.

new_search param in version 38 now has the same conditional value targeting 10% users as was the case in version 36.

Remote Config Management REST API workflow

Change history for Remote Config is also accessible through the Remote Config REST API.

Following is an excerpt from updates samples to list the last 5 versions using Node.js. See the full Node.js, Java and Python examples on GitHub and the technical documentation about change history can be found here.


function listLastFiveVersions(accessToken) {
    const options = {
        hostname: 'firebaseremoteconfig.googleapis.com',
        path: '/v1/projects/' + PROJECT_ID + '/remoteConfig' + ':listVersions?pageSize=5',
        method: 'GET',
        headers: {
            'Authorization': 'Bearer ' + accessToken,
        },
    };

    const request = https.request(options, function(resp) {
        if (resp.statusCode === 200) {
            console.log('Versions:');
            resp.on('data', function(data) {
                console.log(data.toString());
            });
        } else {
            resp.on('data', function(err) {
                console.log(err.toString());
            });
        }
    });

    request.on('error', function(err) {
        console.error('Request for template versions failed.');
        console.error(err.toString());
    });

    request.end();
} 

We hope you give change history in Remote Config a try, and as always, we are eager to hear your feedback, so we can make Firebase Remote Config the best way to remotely configure your app. If you're interested in sharing your thoughts, feedback, or opinions on Remote Config or want to see sneak previews of what we've got in the works, please join the Remote Config Discussion Group.

Happy developing!