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
  • Changes in Manifest V2 WebExtension APIs
  • Introducing Manifest V3
  • Changes in Thunderbird Core
  • ESMification
  • nsIMsgCopyServiceListener
  • thread-pane-columns.mjs
  • nsIFilePicker::init()
  • FileUtils.getFile()
  • MailServices.accounts.FindAccountForServer()
  • MozElements.NotificationBox.appendNotification()
  • Services.jsm
  • Services.logins.addLogin()
  • XPCOMUtils.defineLazyGetter()

Was this helpful?

Edit on GitHub
Export as PDF
  1. Add-on Development
  2. Add-on Update Guides

Update for Thunderbird 128

Required steps to update add-ons for Thunderbird Nebula 128.

PreviousAdd-on Update GuidesNextUpdate for Thunderbird 115

Last updated 8 months ago

Was this helpful?

This section covers the required update steps for add-ons which are already compatible with Thunderbird 115 and need to be made compatible with Thunderbird 128.

Changes in Manifest V2 WebExtension APIs

Our WebExtension APIs are meant to be stable, but we are adding new features and since this is a very young technology this might also require backward incompatible changes. All WebExtension API changes are listed in our WebExtension API documentation:

The known backward incompatible changes are:

  • Introduction of the messagesUpdate permission, required to use .

Introducing Manifest V3

Thunderbird 128 is the first release to officially support . The required changes to convert a Manifest V2 extension to Manifest V3 are listed in our WebExtension API documentation:

Changes in Thunderbird Core

Thunderbird WebExtensions can still run legacy code inside . Such legacy code has to be adjusted to changes made in Thunderbird Core. All known changes are listed below.

If you have encountered a change which is not yet listed there, please , so we can update the list.

ESMification

The Thunderbird team has finished the conversion of all its JSM files and now only uses ES6 modules instead. There is a compatibility layer, which still maps requests for the old *.jsm files to the new *.sys.mjs files. It is however recommended to use the new files now already. The new files are either loaded via ChromeUtils.importESModule():

const { XPCOMUtils } = ChromeUtils.importESModule("resource://gre/modules/XPCOMUtils.sys.mjs");

or via ChromeUtils.defineESModuleGetters():

ChromeUtils.defineESModuleGetters(this, {
  AttachmentInfo: "resource:///modules/AttachmentInfo.sys.mjs",
  MailUtils: "resource:///modules/MailUtils.sys.mjs",
  PluralForm: "resource:///modules/PluralForm.sys.mjs",
});

nsIMsgCopyServiceListener

Changed in Thunderbird 126 (Bug 1887047).

  • OnProgress() -> onProgress()

  • OnStartCopy() -> onStartCopy()

  • OnStopCopy() -> onStopCopy()

  • GetMessageId() -> getMessageId()

  • SetMessageKey() -> setMessageKey()

thread-pane-columns.mjs

This file has been renamed to ThreadPaneColumns.mjs in Thunderbird 128 (Bug 1890731).

nsIFilePicker::init()

Changed in Thunderbird 125 (Bug 1878401). The type of the first parameter was changed from DOMWindow to BrowsingContext. It will fail when a DOMWindow is passed in. Every DOMWindow has a browsingContext getter:

window.browsingContext

FileUtils.getFile()

The getFile() method has been removed in Thunderbird 116 (Bug 1747467). Use FileUtils.File() instead. Example:

let file = FileUtils.getFile("TmpD", [fileName]);

can be replaced by

let file = new FileUtils.File(PathUtils.join(PathUtils.tempDir, fileName));

MailServices.accounts.FindAccountForServer()

The FindAccountForServer() method has been renamed to findAccountForServer() in Thunderbird 121 (Bug 1865068).

MozElements.NotificationBox.appendNotification()

Services.jsm

The file Services.jsm and its compatibility layer (added in Thunderbird 115) have been removed, and loading it will now cause an error in Thunderbird 128. It is safe to simply remove all code which was used to load the module in Thunderbird 115 and later.

Services.logins.addLogin()

The addLogin() method has been replaced by the async method Services.logins.addLoginAsync().

XPCOMUtils.defineLazyGetter()

This method has been a thin wrapper for ChromeUtils.defineLazyGetter() since Thunderbird 112 (Bug 1805288). Its usage has been purged from core code and it may stop working anytime.

The implementation of this method has become async in Thunderbird 123. The has been adjusted accordingly.

NotificationBox Experiment
WebExtension changes from Thunderbird 115 to Thunderbird 128
messages.update()
Manifest Version 3
Changes in Manifest V3
contact us
Experiments