02 Sep 2026
Planet Mozilla
Thunderbird Blog: Thunderbird Desktop New Protocol Support: Microsoft Graph API
As many of you know, Microsoft will be disabling Exchange Web Services (EWS) support on its Microsoft 365 platform later this year. The Thunderbird Desktop team has been hard at work to ensure continuity of functionality through this transition, and today we are pleased to announce the release of native Thunderbird support for the Microsoft Graph API! Curious what this means for you? Then keep reading to find out!
IMAP and EWS and Graph, Oh My!
When connecting to either on-premises or hosted Microsoft accounts, Thunderbird users now have an array of options. Users might not know which option is best for their case, so we'll start with a little bit of guidance to help users decide what will be best for them. First off, if you are currently using IMAP with an on-premises Exchange account or a Microsoft 365 hosted account, and it's currently working for you, then there's nothing you need to do! EWS and Graph support are for users whose organizations do not allow IMAP access.
Now for the more complicated part. Last year, we released EWS email support for both on-premises Exchange accounts and Microsoft 365 hosted accounts. If you are using the EWS protocol with an on-premises Exchange account, then you don't need to do anything.
However, if your organization uses Microsoft 365 for email, and you're currently using EWS to connect to that account, then you need to take action before October of this year. Earlier this year, Microsoft announced that they would begin a phased shutdown of EWS on Microsoft 365/Exchange Online starting in October of 2026 with the goal of a complete shutdown in 2027. If you are currently using Thunderbird's EWS support to connect to a Microsoft 365/Exchange Online email account, then you will need to switch to the Microsoft Graph API support to keep using Thunderbird beyond these dates. See below for details.
So the TL;DR is:
- IMAP for on-premises or Microsoft 365 hosted email => No action required.
- EWS for on-premises Exchange => No action required.
- EWS for Microsoft 365/Exchange Online => Set up a new Microsoft Graph account in Thunderbird.
Microsoft only supports the Graph protocol on Microsoft 365, so that is the only provider that offers it. On-premises Exchange servers do not implement the Graph API, so Thunderbird's EWS support will continue to be the primary mechanism for users on these servers to connect to their email accounts.
Microsoft Graph Account Set Up
Thunderbird does not support migrating accounts to different protocols. Instead, you will need to set up a new account. If you have an existing EWS-connected Microsoft 365 account, first you'll need to delete that account in Thunderbird. You can do this from the account settings. Deleting the account locally in Thunderbird will not affect any data stored on Microsoft 365, so your data is safe.
Once your previous EWS account has been deleted, you can use Account Hub to set up a new account. In the new account set up dialog, enter your Microsoft 365 hosted email account. Thunderbird should automatically detect that your email is hosted on Microsoft 365 and will give you a few options for getting connected. Choose the Microsoft Graph option, and you should be good to go! If for some reason automatic configuration doesn't work, you can still configure your account manually using these instructions.
What is currently supported?
As with EWS, Thunderbird's current Graph support extends only to email. Thunderbird does not yet support Calendar and Address Book functionality with either EWS or Graph.
What's in ESR?
Thunderbird's current Extended Support Release, version 153, supports the EWS protocol, but does not support the Microsoft Graph API, which was first enabled in the Thunderbird Release channel in version 154. Users on the ESR channel who are using Microsoft 365 will need to migrate to the Release channel in order to use the Microsoft Graph API support to continue accessing Microsoft 365 hosted mailboxes.
What's Next?
Calendar and Address Book! The Thunderbird Desktop team has already started working on support for connecting to Microsoft 365-hosted calendars using the Graph protocol. We will be busily working on this throughout the rest of the year. As with our previous work on Thunderbird support for EWS, this is the first new calendar protocol to be added to Thunderbird in many years. We are currently doing some up-front design work to ensure a sustainable product going forward and hopefully make the next calendar protocol easier to add.
How can users give us feedback?
As with all new functionality, there may be features we are missing or unexpected issues. As always, Bugzilla is always open! You can send us feature requests and issue reports using this Bugzilla link. Thunderbird's greatest strength is its community of users, developers, and supporters who help us deliver the best tools we can to connect people with one another. We welcome community involvement to help us make everything better!
Nitty-Gritty development details
Those of you who have followed along with development throughout EWS and into Graph support might have noticed that, compared to EWS, we were able to implement support for the Microsoft Graph API relatively quickly. This is largely due to the up-front thought and work that went into the design and development of Thunderbird's EWS support. The Graph implementation was the team's first test of the extensibility of the new architecture, and we were very pleased with the results. It took 11 months to enable basic synchronization with EWS. With the new architecture, we were able to cut that time down to 4 months with Graph.
Graph's operations are similar to the operations that EWS provides, but different enough that it served as a great first test case for how the new email client architecture can support future protocols, such as JMAP. Given the results of the Graph implementation, we are optimistic that the same architecture will extend to JMAP once the team decides to move forward to that new protocol. We are hopeful that what we have built here can provide a sustainable base on which to build future protocol support in Thunderbird.
This would not have been possible without many contributions from Thunderbird developers, past and present, and the community of users who have helped us improve Thunderbird by submitting issue reports and feature requests. We are grateful to everyone for their support!
The post Thunderbird Desktop New Protocol Support: Microsoft Graph API appeared first on The Thunderbird Blog.
02 Sep 2026 7:58pm GMT
The Mozilla Blog: AI on your terms: Firefox meets you where you are
People feel differently about AI, and here at Firefox, we think that is completely reasonable. Something else that is completely reasonable: deciding for yourself how and when you engage with AI features.
For some of you, AI is part of your everyday life, whether you are using it to summarize a large amount of information, brainstorm ideas for work, or research trips and personal purchases. Some of you interact with AI as little as possible, and prefer to keep it that way. And a lot of you are somewhere in between: curious, but exploring on your own terms and at your own pace.
Your personal use of AI is just that, personal. Firefox offers various levels of AI integration into your browser, and the choice between them is entirely yours.
Block new and current AI features in a single switch

Opting out of upcoming and current AI features on your browser should not require endless navigation through multiple Settings pages. That's why Firefox offers an AI controls section within its General Settings panel. A single, easily located place where you can block current and future AI features and related pop-ups with the swipe of a toggle.
Not only do we want people to have the choice to remove certain AI features from their Firefox browsing experience, we make sure doing so is as easy and accessible as possible.
Choose the features that work for you
For the many people who sit in the middle of the AI usage spectrum, we made sure you can opt in and out of specific features in line with your preferences. Capabilities like AI translations, image alt text in Firefox PDF viewer, tab group suggestions, and key points in link previews can all be individually switched on and off, ensuring you can enjoy such offerings on a case by case basis as it suits your needs.
In addition, if there is an AI chatbot provider you already trust or pay for, you can use it directly inside Firefox's built-in desktop sidebar. This means you can use your chatbot of choice and browse side by side without ping-ponging between tabs.
While some browsers integrate a singular AI model or chatbot into their system, this can restrict flexibility and concentrate data sharing. Firefox prioritizes transparency and user control by letting you select from multiple providers, allowing you to review each option's policies before you engage with them.
You can turn on AI chatbot providers in the AI controls section of browser settings and select one of the following: Anthropic Claude, ChatGPT, Google Gemini, and Le Chat Mistral. Once this feature is turned on, you can switch between chatbots within the sidebar itself based on your preferences and task at hand.
Smart Window, for when you want help finishing what you started

Smart Window is Firefox's most integrated AI experience, but that doesn't mean it compromises our commitment to choice, privacy, and transparency. Our newest window type, which we've been polishing and testing in beta, uses only the context you share with it to help you move work forward and across the finish line.
When permitted by you, its built-in, AI-powered assistant can work directly with your open tabs and browsing history to connect the dots. This means comparing information, generating recommendations, summarizing pages, and planning projects without having to feed every crumb of context from your previous and current browsing activity each time you enter a new prompt.
As we've built out Smart Window, we've added a few additional features to align its design with how people actually browse. These include the ability to group related tabs together - so you can make sense of what's open without spending time organizing everything yourself - and visual history previews that help you spot a page you visited earlier when you can't remember the exact URL or phrase searched. In addition, a new partnership with Exa enables Smart Window to not only locate current web information to include in responses, but also display the sources behind these responses so you can verify what you're seeing, without breaking your flow.
We understand people use different Firefox windows for different reasons, and often switch between options based on the task at hand. Smart Window is the window you reach for when your browsing turns into a project. When your quick search becomes inspo for the girls' trip you've been meaning to plan, or finding the perfect gift for your partner becomes a dozen tabs comparing prices and reviews, turn the window you're already using into a Smart Window. Your tabs and progress stay in place while Smart Window helps organize the task and move it forward. Use it for one complex project, use it all the time, or switch it back when you're done.
Smart Window remains in beta as we continue to learn and improve from our community's feedback. At present, it's available in English to people in the U.S. and Canada.
To try Smart Window, visit: https://www.firefox.com/smart-window
Always your call
Your opinions and preferences on AI usage are individual to you.
We don't think there is one right answer for how and when to engage with AI, and we're not going to pretend there is one. What we can do is make sure that whatever level of engagement is right for you, Firefox supports it well. Because the only person telling you how much AI you need should be you.
The post AI on your terms: Firefox meets you where you are appeared first on The Mozilla Blog.
02 Sep 2026 1:00pm GMT
This Week In Rust: This Week in Rust 667
Hello and welcome to another issue of This Week in Rust! Rust is a programming language empowering everyone to build reliable and efficient software. This is a weekly summary of its progress and community. Want something mentioned? Tag us at @thisweekinrust.bsky.social on Bluesky or @ThisWeekinRust on mastodon.social, or send us a pull request. Want to get involved? We love contributions.
This Week in Rust is openly developed on GitHub and archives can be viewed at this-week-in-rust.org. If you find any errors in this week's issue, please submit a PR.
Want TWIR in your inbox? Subscribe here.
Updates from Rust Community
Official
Foundation
- How the Rust Standard Library Verification Contest Scaled Past Manual Proof Engineering
- Welcoming Rust Program Manager, Tomáš Šedovič, to the Rust Foundation Team!
- Welcoming Jess Izen as Engineer in Residence at the Rust Foundation
Newsletters
Project/Tooling Updates
- Wasmi 2.0 - Engineering of the Fastest Wasm Interpreters
- How I made Rustdoc 33% faster in one week
- A Self-Baked Async FFI Framework for Rust C# Interop
Observations/Thoughts
- Could Cargo's scheduler be better?
- How we developed the world's first safety-certified product written in Rust - and why we went bare metal
- How we saved 100 terabytes of memory by optimizing 1.1.1.1's DNS cache
- Rust concurrency vs Go concurrency: stackless vs stackfull coroutines
- Nine Rules for Compile-Time Work with Rust const fn: Parse files, build tables, and catch mistakes … without a build script (Part 1)
- [video] An Agentic VM in Rust - by Cristian Sánchez
- [video] Making Progress on AsyncIterator - by Jack O'Connor
Rust Walkthroughs
- The 'rnull' Rust block driver
- Your First GPUI App - Building a Desktop UI in Rust
- Welcome to the machine: emulating a CPU
- Proving my Rust NVR doesn't leak memory (it did)
- Software That Must Not Be Wrong: Property Tests for a Pediatric Dosing Calculator
- Drawing Shapes with GPUI's Canvas
- Pinning Down Rust's Pin
Research
Miscellaneous
Crate of the Week
This week's crate is buf_read_splitter, a crate to split (separate) a stream into sub-subtreams.
Thanks to flo for the self-suggestion!
Please submit your suggestions and votes for next week!
Calls for Testing
An important step for RFC implementation is for people to experiment with the implementation and give feedback, especially before stabilization.
If you are a feature implementer and would like your RFC to appear in this list, add a call-for-testing label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature need testing.
No calls for testing were issued this week by Rust, Cargo, Rustup or Rust language RFCs.
Let us know if you would like your feature to be tracked as a part of this list.
Call for Participation; projects and speakers
CFP - Projects
Always wanted to contribute to open-source projects but did not know where to start? Every week we highlight some tasks from the Rust community for you to pick and get started!
Some of these tasks may also have mentors available, visit the task page for more information.
- Zynlex - Add case-sensitive and whole-word toggles to find-in-page
- HookEcho - High-contrast theme: colormaps and stroke widths do not respond to it
- sysknife - UfwDeleteRule needs a rule number that no action in the catalogue can produce
- sysknife - peer_pidfd cannot tell a pre-6.5 kernel from a peer that already exited, so the PID-reuse check is off in the reuse case
- sysknife - The signed trail names which account asked for a change, never which one approved it
If you are a Rust project owner and are looking for contributors, please submit tasks here or through a PR to TWiR or by reaching out on Bluesky or Mastodon!
CFP - Events
Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.
If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a PR to TWiR or by reaching out on Bluesky or Mastodon!
Updates from the Rust Project
522 pull requests were merged in the last week
Compiler
- compiler: allow safestack to be togglable via
#[sanitize(safestack = "...")] - perf: push nominal obligations instead of returning them
- reduce perf impact of scalar size checks
- remove unneeded clone in macro deriving
Library
- add custom allocators to
(try_)maponBox, Rc, Arc - add intrinsics for integer minimum and maximum
- add SVE-accelerated
Vec::retain_mutfor aarch64 - alloc
String::retainoptimization - core: expose volatile atomic operations
- implement
[u8]::split_ascii_whitespace - implement
clamp_to
Cargo
- diag: Stabilize cargo-lints
- resolver: Stabilize min-publish-age
- run: Printing a new line to avoid overwriting error code after \r
- trim-paths: custom workspace-relative member paths remap
perf(git): Reduce extra work when using git-cli- cargo profiling improvements
- manifest!: implement feature-metadata RFC3416
- perf: do not build SBOM if user has not set build.sbom
Rustdoc
- correctly handle when a macro generates multiple items in
--generate-macro-expansion - fix lint
cargo::non_kebab_case_bins - take into account edition information for keyword highlighting
Rustfmt
Clippy
fix(cargo_common_metadata): stop checkingpackage.readmefix(redundant_clone): Makevisit_local_usageanalyse loop bodies instead of giving up on them- add comma to
lint_groups_priorityerror message - fix
--explainlint lookup being case-mismatched - fix false positive for never type impls
missing_transmute_annotationsshould not contain fn name in suggestion- perf: bail early in
too_many_lineslint if rule is not enabled - perf: skip redundant clone analysis for clone-free functions
Rust-Analyzer
- allow "Extract variable" to be invoked on field names in record expressions
- fix HIR lowering of params of trait assoc fns
- fix incorrect generic shown on hover
- fix
NamedTempFile - fix some subtle bugs in docs rendering
- fix unsafeck of
&raw * - fix panic on accessing numeric fields in unions
- fix panic on deref of unresolved aliases
- fix panic when computing
extract_variablewith macros - fix panic when hovering a dyn trait with a binder
- print the ABI for fn pointers (if not the default)
- push a generic params scope for consts
- range pattern inside a parenthesis parsed as tuple pattern
- reinfer never type in array repeat expressions
- strip leading asterisk decoration from block doc comments
- switch from
temp-dirto a homemadeNamedTempFileimplementation
Rust Compiler Performance Triage
This week continues a steady stream of compile time improvements. Most of the impact this week comes from type system micro-optimization in #160473 and dead_code lint propagation fix in #161571. We've also hit unexpected regression in a standard library refactor, but we expect that to be addressed soon.
Triage done by @panstromek. Revision range: 9a4ad59a..5321a4f4
Summary:
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions ❌ (primary) |
0.6% | [0.2%, 1.8%] | 27 |
| Regressions ❌ (secondary) |
0.6% | [0.2%, 1.8%] | 27 |
| Improvements ✅ (primary) |
-0.7% | [-2.4%, -0.1%] | 135 |
| Improvements ✅ (secondary) |
-0.7% | [-2.2%, -0.1%] | 120 |
| All ❌✅ (primary) | -0.5% | [-2.4%, 1.8%] | 162 |
5 Regressions, 4 Improvements, 4 Mixed; 9 of them in rollups 39 artifact comparisons made in total
Approved RFCs
Changes to Rust follow the Rust RFC (request for comments) process. These are the RFCs that were approved for implementation this week:
Final Comment Period
Every week, the team announces the 'final comment period' for RFCs and key PRs which are reaching a decision. Express your opinions now.
Tracking Issues & PRs
- Re-export
core::fmt::NumBufferinalloc(andstd) - Guarantee 8 bytes of alignment of RawWakerVTable
- Stabilize
core::mem::DropGuard - "stabilize never type" T-types FCP
No Items entered Final Comment Period this week for Cargo, Compiler Team, Language Team, Language Reference or Unsafe Code Guidelines. Let us know if you would like your PRs, Tracking Issues or RFCs to be tracked as a part of this list.
New and Updated RFCs
Upcoming Events
Rusty Events between 2026-09-02 - 2026-09-30 🦀
Virtual
- 2026-09-02 | Virtual (Indianapolis, IN, US) | Indy Rust
- 2026-09-02 | Virtual (Indianapolis, IN, US) | Indy Rust
- 2026-09-04 | Virtual | Rust Girona
- 2026-09-06 | Virtual | Rust 🦀 Maven
- 2026-09-06 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2026-09-08 - 2026-09-11 | Hybrid (Montreal, CA) | RustConf 2026
- 2026-09-08 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2026-09-08 | Virtual (London, UK) | Women in Rust
- 2026-09-09 | Virtual (Cardiff, GB) | Rust and C++ Cardiff
- 2026-09-10 | Virtual | Rust 🦀 Maven
- 2026-09-10 | Virtual (Berlin, DE) | Rust Berlin
- 2026-09-10 | Virtual (Nürnberg, DE) | Rust Nuremberg
- 2026-09-15 | Virtual (Washington, DC, US) | Rust DC
- 2026-09-16 | Hybrid (Vancouver, CA) | Vancouver Rust
- 2026-09-17 | Hybrid (Seattle, WA, US) | Seattle Rust User Group
- 2026-09-18 | Virtual | Rust Girona
- 2026-09-20 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2026-09-22 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2026-09-24 | Virtual (Berlin, DE) | Rust Berlin
- 2026-09-29 | Virtual (London, UK) | Women in Rust
Africa
- 2026-09-08 | Johannesburg, ZA | Johannesburg Rust Meetup
Europe
- 2026-09-03 | Berlin, DE | Rust Berlin
- 2026-09-03 | Oxford, GB | Oxford ACCU/Rust Meetup.
- 2026-09-08 | Paris, FR | Rust Paris
- 2026-10-10 | Geneva, CH | Rust Geneva
- 2026-09-14 - 2026-09-16 | Berlin, DE | Oxidize 2026
- 2026-09-15 | Leipzig, DE | Rust - Modern Systems Programming in Leipzig
- 2026-09-15 | Madrid, ES | MadRust
- 2026-09-22 | Prague, CZ | Rust Prague
- 2026-09-24 | Aarhus, DK | Rust Aarhus
- 2026-09-24 | Amsterdam, NL | Rust Developers Amsterdam Group
- 2026-09-24 | Frankfurt, DE | Rust Rhein-Main
- 2026-09-29 | Manchester, GB | Rust Manchester
- 2026-09-30 | Basel, CH | Rust Basel
North America
- 2026-09-03 | Mountain View, CA, US | Hacker Dojo
- 2026-09-03 | Saint Louis, MO, US | STL Rust
- 2026-09-05 | Boston, MA, US | Boston Rust Meetup
- 2026-09-08 | Montreal, CA| The Rust Foundation
- 2026-09-08 - 2026-09-11 | Hybrid (Montreal, CA) | RustConf 2026
- 2026-09-09 | Montreal, CA | Women in Rust
- 2026-09-10 | Lehi, UT, US | Utah Rust
- 2026-09-10 | San Diego, CA, US | San Diego Rust
- 2026-09-12 | Boston, MA, US | Boston Rust Meetup
- 2026-09-15 | San Francisco, CA, US | San Francisco Rust Study Group
- 2026-09-16 | San Francisco, CA, US | Bay Area Rust
- 2026-09-16 | Hybrid (Vancouver, CA) | Vancouver Rust
- 2026-09-17 | Hybrid (Seattle, WA, US) | Seattle Rust User Group
- 2026-09-17 | Mountain View, CA, US | Hacker Dojo
- 2026-09-23 | Austin, TX, US | Rust ATX
- 2026-09-24 | Atlanta, GA, US | Rust Atlanta
- 2026-09-26 | Boston, MA, US | Boston Rust Meetup
If you are running a Rust event please add it to the calendar to get it mentioned here. Please remember to add a link to the event too. Email the Rust Community Team for access.
Jobs
Please see the latest Who's Hiring thread on r/rust
Quote of the Week
I think you are inventing provenance for integers. Please, let's not.
- Ralf Jung in an RFC discussion
Thanks to kleines Filmröllchen for the suggestion!
Please submit quotes and vote for next week!
This Week in Rust is edited by:
- nellshamrell
- llogiq
- ericseppanen
- extrawurst
- U007D
- mariannegoldin
- bdillo
- opeolluwa
- bnchi
- KannanPalani57
- tzilist
Email list hosting is sponsored by The Rust Foundation
02 Sep 2026 4:00am GMT