Add-On Update Tutorials
Each of these tutorials is designed so it can be completed in a short amount of time. Please contact us via our support channels, if anything is unclear or you need further assistance.
All tutorials will be announced here. You can get automatically notified by subscribing to this issue.
The first tutorial has been released!
Switch to the WebExtension i18n locale system
This tutorial includes the following steps:
- convert your
DTDandpropertieslocale files to the new WebExtension i18n JSON format using a converter tool - remove usage of
DTDfiles - remove usage of
nsIStringBundleandpropertiesfiles
This tutorial also shows, how to automatically localize i18n locale strings in WebExtension HTML windows, like option pages, browser action pages or any other page created using the windows API.
The second tutorial has been released!
Convert add-on parts individually by using a messaging system
This tutorial includes the following steps:
- introduce the concept of sending notifications between the WebExtension background page and privileged scripts executed by an Experiment API

One of the key concepts of the WindowListener update approach is to move smaller code segments from the Experiment into the WebExtension part without having to change everything at once. The introduced messaging system aims to allow just that.
The third tutorial has been released!
Convert your legacy XHTML options page into a WebExtension HTML options page (keeping your preferences in Thunderbird's prefBranch for now)
This tutorial is based on the universal messaging introduced in the second tutorial:
- switch to a messaging approach to get and set preferences
- only the options page has to be touched, preferences remain in Thunderbirds preference system (prefBranch)
- developers can continue to replace the remaining preference calls by messaging requests step-by-step
- after all preference calls have been replaced, developers can switch from using Thunderbirds preference system to using WebExtension local storage by just loading a different preference handler into their background page.