LogoLogo
  • About Thunderbird
  • Contributing to Thunderbird
    • Getting Started Contributing
    • Setting Up A Build Environment
    • Building Thunderbird
      • Windows Build Prerequisites
      • Linux Build Prerequisites
      • macOS Build Prerequisites
      • Artifact Builds
    • Codebase Overview
      • Account Configuration
      • Address Book
      • Chat Core
        • Notifications
        • Message Styles
        • Keyboard shortcuts
        • Chat Core Protocols
        • Contacts
      • Mail Front-End
    • Tutorials and Examples
      • Hello World Example
      • Thunderbird Live Development Videos
    • Fixing a Bug
      • Bug Triaging 101
        • Bug Status Classicification
        • Bug Types
        • Garbage Collection
        • Narrow the Scope
      • Using Mercurial Bookmarks
      • Using Mercurial Queues
      • Lint and Format Code
      • Using ESLint to Format Javascript Code
      • Try Server
      • Landing a Patch
      • Care and Feeding of the Tree
    • Testing
      • Running Tests
      • Adding Tests
      • Writing Mochitest Tests
  • Planning
    • Roadmap
    • Android Roadmap
    • Supported Standards
  • Add-on Development
    • Introduction
    • What's new?
      • Manifest Version 3
    • A "Hello World" Extension Tutorial
      • Using WebExtension APIs
      • Using a Background Page
      • Using Content Scripts
    • A Guide to Extensions
      • Supported Manifest Keys
      • Supported UI Elements
      • Supported WebExtension APIs
      • Thunderbird's WebExtension API Documentation
      • Thunderbird WebExtension Examples
      • Introducing Experiments
    • A Guide to Themes
    • Developer Community
    • Documentation & Resources
      • Tips and Tricks
    • Add-on Update Guides
      • Update for Thunderbird 128
      • Update for Thunderbird 115
        • Adapt to Changes in Thunderbird 103-115
      • Update for Thunderbird 102
        • Adapt to Changes in Thunderbird 92-102
      • Update for Thunderbird 91
        • Adapt to Changes in Thunderbird 79-91
      • Update for Thunderbird 78
        • Adapt to Changes in Thunderbird 69-78
      • Update for Thunderbird 68
        • Adapt to Changes in Thunderbird 61-68
      • How to convert legacy extensions?
        • Convert wrapped WebExtensions to modern WebExtensions
        • Convert legacy WebExtensions to modern WebExtensions
        • Convert legacy overlay extension to legacy WebExtension
        • Convert legacy bootstrapped extension to legacy WebExtension
  • Releases
    • Thunderbird Channels
    • Release Cadence
    • Uplifting Fixes
    • Feature Flags
    • Tracking Fixes for Releases
    • Contributing to Release Notes
Powered by GitBook
On this page
  • Rework of Thunderbird's main messenger window
  • Changed tab implementation
  • Unified Toolbar
  • XUL Tree replacement
  • XUL flexbox changes
  • Removed JSM files
  • Services.jsm
  • osfile.jsm
  • Changed API
  • calITimezoneService.timezoneIds
  • callTimezoneService.aliasIds
  • nsIMsgDatabase.ContainsKey()
  • Process Restrictions
  • Removed CSS features
  • -moz-image-region

Was this helpful?

Edit on GitHub
Export as PDF
  1. Add-on Development
  2. Add-on Update Guides
  3. Update for Thunderbird 115

Adapt to Changes in Thunderbird 103-115

PreviousUpdate for Thunderbird 115NextUpdate for Thunderbird 102

Last updated 7 months ago

Was this helpful?

This document tries to cover the internal changes that may be needed to make Experiment add-ons compatible with Thunderbird Supernova. If you find changes which are not yet listed on this page, you can ask for help and advice in one of our .

Rework of Thunderbird's main messenger window

Changed tab implementation

Each mail3PaneTab and mailMessageTab in Thunderbird's main messenger window is now loaded into its own browser element, instead of sharing and updating a single browser.

A general and very helpful introduction to the new front end can be found in its .

The mail3PaneWindow (about:3pane) can now be accessed as follows:

  1. window.gTabmail.currentAbout3Pane

  2. window.gTabmail.currentTabInfo.chromeBrowser.contentWindow

  3. window.gTabmail.tabInfo[0].chromeBrowser.contentWindow

  4. window.gTabmail.tabInfo.find( t => t.mode.name == "mail3PaneTab" ).chromeBrowser.contentWindow

Options #1 & #2 will only work if the current active tab is a mail3PaneTab. Option #3 assumes the first tab is always a mail3PaneTab. The mailMessageWindow (about:message) can be accessed similarly:

  1. window.gTabmail.currentAboutMessage

  2. window.gTabmail.currentTabInfo.chromeBrowser.contentWindow

  3. mail3PaneWindow.messageBrowser.contentWindow

  4. window.messageBrowser.contentWindow

Option #1 will only work if the current tab is a mail3PaneTab or a mailMessageTab. Option #2 will return the mailMessageWindow, if the current tab is a mailMessageTab (it will return the mail3PaneWindow, if the current tab is a mail3PaneTab). Option #3 will return the nested message browser of a mail3PaneTab through its mail3PaneWindow as defined in the previous section. Option #4 will return the message browser of a message window.

Moved global objects

Some of the global objects defined in Thunderbird's main messenger window have been moved into the mail3PaneWindow (about:3pane) and/or the mailMessageWindow (about:message). Some objects have been removed.

  • gDBView: Available in mail3PaneWindow and in mailMessageWindow.

  • gFolderDisplay: Removed. Find displayed folder via mail3PaneWindow.gFolder.

  • gMessageDisplay: Removed. Find displayed message via mailMessageWindow.gMessage or mailMessageWindow.gMessageURI.

Useful functions, methods and objects which have been moved from elsewhere:

  • mail3PaneWindow.displayFolder(folderURI)

  • mail3PaneWindow.messagePane.displayMessage(messageURI)

  • mail3PaneWindow.messagePane.displayMessages(messageURIs)

  • mail3PaneWindow.messagePane.displayWebPage(url)

  • mail3PaneWindow.folderPane.*

  • mail3PaneWindow.folderTree.*

  • mail3PaneWindow.threadPane.*

  • mail3PaneWindow.threadTree.*

  • mailMessageWindow.currentHeaderData

  • mailMessageWindow.currentAttachments

Using WebExtension APIs

It is recommended to leverage WebExtension APIs as much a possible. Instead of adjusting to core changes, the following WebExtension APIs can be helpful:

Using shared Experiments

There may already be a shared Experiment, which could help with add-on updates (or which could give helpful hints):

Unified Toolbar

XUL Tree replacement

The folderTree and threadTree in about:3pane (the mail3PaneTab) no longer use the deprecated XUL tree elements, but have been replaced by HTML lists and HTML tables.

XUL flexbox changes

Known attributes which have to be replaced:

Removed JSM files

Services.jsm

const Services = globalThis.Services;

For a backward compatible solution, use

const Services = globalThis.Services || ChromeUtils.import("resource://gre/modules/Services.jsm").Services;

osfile.jsm

Removed in Thunderbird 115. Can be replaced as follows:

  • OS.Constants.Sys.Name -> Services.appinfo.OS

  • OS.Constants.Path.profileDir -> PathUtils.profileDir

  • OS.Constants.Path.tmpDir-> PathUtils.tempDir

Changed API

calITimezoneService.timezoneIds

In Thunderbird 106, this has been changed from an enumerator to a simple array.

callTimezoneService.aliasIds

Removed in Thunderbird 106.

nsIMsgDatabase.ContainsKey()

Renamed in Thunderbird 108 to containsKey(). Example msgHdr.folder.msgDatabase.containsKey().

Process Restrictions

Content processes, such as the extension process executing "child" experiment code, are subject to additional restrictions compared to Thunderbird 102. Known limitations include:

  • Raw TCP socket operations never complete, even if timeouts are set up. It is likely that other networking primitives are affected in a similar way.

Removed CSS features

-moz-image-region

The CSS feature -moz-image-region has been removed. It is no longer possible to specify a button icon or a list-style-image as a region from a larger image. Add-on developers have to resort to individual images.

This holds instructions on how to find other moved objects and functions.

Use the to add buttons to Thunderbird's unified toolbar

Use the to add entries to Thunderbird's context menu (for example in the folder pane or in the thread pane)

Use the to register keyboard shortcuts. Additional benefit: all WebExtension shortcuts can be adjusted by the user in the Add-on Manager according to their needs.

Use the to interact with the mail tab.

community Experiments listed on

Experiments from the repository

Experiments from the repository (scheduled to be shipped with Thunderbird soon)

The mail toolbar has been replaced by the unified toolbar. Adding your own buttons will become difficult, because the unified toolbar tends to remove unknown objects. Instead, use the to add buttons.

Mozilla continued to remove XUL in favour of standard HTML5/CSS. The most relevant changes are related to the XUL flexbox. A very helpful read is .

height: replace with

width: replace with

flex: replace with (a very helpful tutorial is available at )

Important: If add-ons still create old-fashioned XUL dialogues and load *.xhtml files, it is not recommended to invest time into fixing them. It is more efficient to re-create them as pure *.html files. They can be opened using the or the .

Removed in Thunderbird 103. The in API implementation scripts. If needed in self-created JSMs, it can be accessed as follows:

OS.File.* ->

OS.Path.* ->

In consequence, you might need to move some functionality from "child" experiment code to the "parent" context. One way to achieve this is to implement the necessary functionality as a regular asynchronous API method in the "parent" experiment (without extending the API schema), then using await context.childManager.callParentAsyncFunction("your_api_name.some_function", [arguments, passed, to, some_function]) to call it from the child experiment. Note that function arguments passed in between processes are subject to the .

communication channels
official documentation
topicbox post
browserAction API
menus API
commands API
mailTabs API
DTN
webext-support
webext-experiments
browserAction API
this blogpost from the responsible developer
CSS height property
CSS width property
CSS flex
css-tricks.com
tabs API
windows API
service object is now globally available
IOUtils.*
PathUtils.*
structured clone algorithm