10 Sep 2026
Planet Mozilla
Firefox Tooling Announcements: Happy BMO Push Day! (20260908.1)
The following changes have been pushed to bugzilla.mozilla.org:
- Bug 1205300 - Missing: related documentation "Reporting"
- Bug 2068120 - Thunderbird access to "Iteration" and "Due Date" fields
- Bug 2066252 - Prevent save if keyword checkin-needed-tb exists without target milestone
- Bug 2070017 - Reinstate web bounty form
- Bug 2059948 - Do not offer printable recovery codes to Duo users
Discuss these changes in the BMO Matrix Room
1 post - 1 participant
10 Sep 2026 2:34am GMT
09 Sep 2026
Planet Mozilla
Firefox Tooling Announcements: MozPhab 2.19.0 Released
Bugs resolved in Moz-Phab 2.19.0:
- bug 1987220
moz-phab patch --apply-to hereshould apply to the original base revision and rebase, rather than applying the raw diff on HEAD - bug 2016442 add
moz-phab listsubcommand
Discuss these changes in #engineering-workflow on Slack or #Conduit Matrix.
1 post - 1 participant
09 Sep 2026 8:59pm GMT
Thunderbird Blog: Desktop Settings: Removing technical jargon

Our goal for this phase of work is to remove the technical jargon, use plain language, and make it effortless for everyone to make informed decisions about their settings. With over 250 blocks of settings content to untangle, we aimed for incremental improvements rather than striving for perfection.
While our previous research leaned heavily on our technical power users, this round intentionally focused on new users to make sure Thunderbird is intuitive from day one.
Summary of research
- The new copy tested well: We achieved >80% comprehension across our tested copy for Notifications, Appearance, and Composition settings.
- High confidence levels: Users felt confident to change settings without external help (asking someone, referencing docs, or using AI for support).
- Interactions need refinement: We found spots where the interface didn't always match expectations, like using a checkbox instead of an on/off toggle.
Using our content guidelines, we audited all 250+ content blocks to check accuracy, what was overly technical, and if anything was outdated. Our strategy was built up into steps to make it more achievable.
Step 1: Research & prioritization
Last month, we conducted research where we used a card sorting method to understand what users actually care about most and where they expect settings to live. Catch up on the Research Summary.
Step 2: Inventory audit
We mapped every piece of text in the app to build a full content inventory, assessing each piece of text for accuracy, freshness, and 8th-grade readability.
Step 3: Content redesign

We removed any developer or system updates from the interface and replaced it with language that speaks to what the setting actually does for the user.
Our findings
We tested prototypes for Notifications, Appearance, and Composition and asked 4 questions to test the purpose of each setting category, scenario comprehension, and user confidence. Our target threshold was 80% comprehension.
Here is how the new copy tested with room for improvement around the interactions, visuals, and how the language can be even more clear and user friendly.
| Settings Category | Purpose Comprehension | Scenario Accuracy | Confidence Score (out of 5) |
| Notifications | 86% | 71% | 4.00 |
| Appearance | 86% | 86% | 4.14 |
| Composition | 100% | 100% | 4.43 |
What's next
- Improve the interactions: Aligning component types with immediate vs. batch actions so the UI behaves the way people expect.
- Sharper indicators: Testers liked the visual diagrams for Threaded, Unthreaded, and Grouped messages, but they need a bit more detail to make the visual distinction instant.
- Continue iterating on copy: Cleaning up remaining awkward phrasing (like Autosave 5 seconds) that still makes the experience feel slightly dated.
Next, we are taking everything we learned from this copy testing and applying it to the overall settings navigation and layout structure.
Redesigning settings isn't always glamorous, which is why our team internally nicknamed this effort "Project Toto" inspired by high-tech Japanese toilets. Settings are something most people prefer not to think about, but when they are designed thoughtfully, the experience becomes seamless, intuitive, and surprisingly delightful.
As our new designs take shape, we'll be reaching back out to both new and long-time users for feedback. Stay tuned for our next update, and let us know your thoughts in the comments!
The post Desktop Settings: Removing technical jargon appeared first on The Thunderbird Blog.
09 Sep 2026 3:25pm GMT
This Week In Rust: This Week in Rust 668
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
Newsletters
Project/Tooling Updates
Observations/Thoughts
- Microcontrollers with good support for Rust
- What Does a Governed Data Runtime Cost? TeaQL vs Diesel and SeaORM on MusicBrainz
- Stabilizing Rust's never type
- Searching through 150 GiB of Text per Second with SIMD
- Nine Rules for Compile-Time Work with Rust
const fn: Parse files, build tables, and catch mistakes … without a build script (Part 2) - A Design Space Exploration of Async/Await
- Rust: When Empty Isn't Bottom
Rust Walkthroughs
- What Rust's +simd128 Actually Changed in My WebAssembly
- Rust Control Flow in Practice - Build a Number Guessing Game
- Unsizing unsized values
- Game architecture
- Introducing CUDA Rust: Two Tracks for Writing GPU Kernels
- The State of Allocators in 2026 - 6 Months Later
- Visualizing Rust's Vtables: How dyn Trait Works In Memory
- Safely generating legal chess moves at 475,000,000 nodes/s
- Speeding up gearhash on ARM64 (2× faster)
- Let's build a compressor from scratch
- Reverse engineering my e-scooter and rewriting the firmware in rust
- Gloo + Yew for persistent webapp state
Miscellaneous
Crate of the Week
This week's crate is tokio-rcu, a user-space RCU implementation specifically built around the semantics of async rust and tokio.
Thanks to Roee Shoshani 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, Rustup or Rust language RFCs.
Let us know if you would like your feature to be tracked as a part of this list.
RFCs
Rust
Rustup
If you are a feature implementer and would like your RFC to appear on the above list, add the new 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.
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.
- sysknife - action_reference_doc_is_current prints two 44 KB documents instead of the line that differs
- sysknife - packages/setup claims Node 18 support, and Node 18 has been end-of-life since 2025-04-30
- sysknife - cargo test fails intermittently on main: a test sets a process-global env var
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.
- No Calls for papers or presentations were submitted this week.
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
613 pull requests were merged in the last week
Compiler
- always rerun if we normalize local opaques
- optimize empty token streams
- store LiveLoans more densely packed
- use IndexVec instead of BTreeMap for polonius variances
Library
- add custom allocator support to
(try_)maponUniqueArcandUniqueRc - box: fixup
map/try_mapdeallocate calls - stabilize smart pointer map functions
Cargo
docs(lints): how to configure Cargo lintsdocs(trim-paths): add limitations and polishdocs(trim-paths): workspace remap begins with.fix(git): Apply pr hint to git-fetch-with-clifix(git): Make PR dep note cloer to our style guidefix(git): Simplify error messagefix(git): Use git's 429 retry, when availablefix(parser): Resolve theoretical use-after-free- avoid passing search path (-L) args when they are passed as --extern
- docs: switch from "target triple" to "target tuple"
- fix relative symlink handling in
write_atomic - fix(trim-paths)!: limit options to
none|object|all - fix(trim-paths)!: remove default scope from release profile
- fixed stale comment about fingerprint checking method
Rustdoc
Rustfmt
- fix non-idempotent block doc comment closer rewrite
- prevent infinite loops when parsing items from
cfg_select!arms
Clippy
unnecessary_self_imports: lint nested importslegacy_numeric_constants: make fixes machine-applicablestd_instead_of_core: don't suggest a path that does not resolveuseless_conversion: ignoreFrom::fromin generated codeuseless_format: improve suggestionregex_creation_in_loops: check MIR loop structure- check that intra-doc links are not broken
- detect integration tests in
is_in_test - do not trigger
integer_division_remainder_usedin macros - improve
map_unwrap_orlint to supportmap(f).unwrap_or_default() - move the
clippy_ci_panic_testintegration into a regular test - respect inline allows in
needless_pass_by_value - soft rename
clippy::alltoclippy::default
Rust-Analyzer
- add diagnostics for missing bodies for free and associated items
- fix
NamedTempFileconstructors - accept Self as non-leading path segment in attribute paths
- allow inner attributes on blocks in tuple expressions
- avoid type unification errors in term search
- fix handling of
#[unsafe()]attrs without inner meta - fix parsing of
self:: in fn param list - hover
1f64use float instead of integer - follow symlinks when scanning the sysroot for proc-macro dylibs
- install cargo tools with locked dependencies
- merge
hir_def::hir::Expr::UnsafeintoExpr::Block - render const value in completions label details
Rust Compiler Performance Triage
This week we've hit quite a few regressions, both expected and unexpected. One of them has already been fixed, with fixes for a few others being discussed. One big improvement comes from caching the sanitizer set in Session, which fixes a large regression from last week. A few minor improvements landed, including a 75% reduction in memory usage while compiling bevy_render with the next trait solver.
Triage done by @JonathanBrouwer. Revision range: 5321a4f4..656a9da1
Summary:
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions ❌ (primary) |
0.5% | [0.1%, 1.3%] | 121 |
| Regressions ❌ (secondary) |
0.6% | [0.1%, 10.3%] | 106 |
| Improvements ✅ (primary) |
-0.6% | [-1.9%, -0.1%] | 63 |
| Improvements ✅ (secondary) |
-0.6% | [-2.4%, -0.1%] | 65 |
| All ❌✅ (primary) | 0.1% | [-1.9%, 1.3%] | 184 |
3 Regressions, 2 Improvements, 8 Mixed; 6 of them in rollups 33 artifact comparisons made in total
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, Rustup or Rust language RFCs.
Let us know if you would like your feature to be tracked as a part of this list.
Approved RFCs
Changes to Rust follow the Rust RFC (request for comments) process. These are the RFCs that were approved for implementation this week:
- Rustdoc LaTeX math
- RFC: Cargo feature descriptions
- Change
i686-pc-windows-msvcfrom Tier 1 with host tools => Tier 1 without host tools
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
- riscv: stabilize 'd' and 'f' target features
- x86: on targets that requires SSE, use those registers for ABI
- Re-export
core::fmt::NumBufferinalloc(andstd) - fix: unfulfilled nested dead code lint
- turn aligned-in-packed error into lint
- Guarantee 8 bytes of alignment of RawWakerVTable
- libtest: Allow passing --test-threads and --color multiple times, with later arguments overriding earlier
- Stabilize
core::mem::DropGuard
No Items entered Final Comment Period this week for Rust RFCs, Compiler Team, Language Team or Leadership Council. 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
- No New or Updated RFCs were created this week.
Upcoming Events
Rusty Events between 2026-09-09 - 2026-10-07 🦀
Virtual
- 2026-09-09 | Virtual (Cardiff, UK) | 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-24 | Virtual (Charlottesville, VA, US) | Charlottesville Rust Meetup
- 2026-09-29 | Virtual (London, UK) | Women in Rust
- 2026-10-02 | Virtual | Rust Girona
- 2026-10-04 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2026-10-06 | Virtual (London, UK) | Women in Rust
- 2026-10-07 | Virtual (Indianapolis, IN, US) | Indy Rust
Europe
- 2026-09-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-17 | Dortmund, DE | Rust Dortmund
- 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-28 | Augsburg, DE | Rust Meetup Augsburg
- 2026-09-29 | Manchester, UK | Rust Manchester
- 2026-09-30 | Basel, CH | Rust Basel
- 2026-10-05 | München, DE | Rust Munich
North America
- 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-19 | Boston, MA, US | Boston Rust Meetup
- 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
- 2026-10-01 | Saint Louis, MO, US | STL Rust
- 2026-10-03 | Boston, MA, US | Boston Rust Meetup
Oceania
- 2026-09-29 | Barton, AU | Canberra Rust User Group
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
The Demon has access to a Super Turing Machine.
Thanks to Theemathas 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
09 Sep 2026 4:00am GMT
08 Sep 2026
Planet Mozilla
Firefox Nightly: Motion, Colour, Captions, Kit – These Weeks in Firefox: Issue 207
Highlights
- Want some Kit? Check out the store!
- Sebastian Zartner [:sebo] added a panel to expose @media emulation (#1692434) and provided a way to emulate @media (prefers-reduced-motion: reduce) (#1477920)
- More theme controls have been added to the New Tab customization panel:
- Improved Picture-in-Picture caption support from some volunteer contributors
- Thanks to Lukáš Lipinský for adding caption support to Česká televize!
- Thanks to kernp25 for adding caption support to ardmediathek.de!
Friends of the Firefox team
Resolved bugs (excluding employees)
Script to find new contributors from bug list
Volunteers that fixed more than one bug
- :Vincent
- japandi
- Nirmal Advani
- Sebastian Zartner [:sebo]
- tanvi.manku
New contributors (🌟 = first patch)
- Aditi: Increase the maximum number of PDF.js preferences
- 🌟 Anil Verman: [Docs] Trigger listeners doc is seriously out of date
- Fede: more than six thumbnails needed when Ctrl+Tab is used
- Giulio B: frameId is wrong in webRequest events triggered via importScripts
- 🌟 Luiz Henrique Vieira: Remove dead CSS rule .alltabs-item[selected="true"]
- 🌟 Devin Rousso: `emulation.setLocaleOverride` does not override `Accept-Language` header for in `Worker` for `fetch` and `WebSocket`
- 🌟 muhammad shaikh: Profile delete page heading should enclose profile name in quotes
- 🌟 Kevin Gosse: nsDataObj::QueryGetData in Firefox returns E_FAIL for formats it doesn't carry, instead of DV_E_FORMATETC per the COM contract
- Lukáš Lipinský: Česká televize captions do not display in the Picture-in-Picture window
- 🌟 mikey gough: Remove three unused devtools.debugger.file-search-* preferences
- 🌟 Nathan Leuz: Remove unused legacy preference browser.translation.neverForLanguages
- 🌟 Shawn Zivontsis: Reorder moz_origins composite unique index to UNIQUE(host, prefix)
- tanvi.manku:
- 🌟 Tim McNulty: Remove always-true clause from NS_ASSERTION in nsNavBookmarks::AdjustIndices (Coverity CID 1274453)
Project Updates
Add-ons / Web Extensions
Addon Manager & about:addons
- As part of Nova about:addons work:
- Introduced a shared localization module for built-in and curated AMO-hosted theme names, and updated the corresponding about:addons theme test to expect the new "Default" theme name shown when Nova is enabled - Bug 2055936 / Bug 2058235
- Added a message bar to the about:addons themes picker to surface AMO-hosted Nova theme download and install failures instead of failing silently - Bug 2054548
WebExtensions Framework
- Fixed a startup race where an extension's restored dynamic content scripts could be missing from the parent WebExtensionPolicy due to stale shared data - Bug 2058719
WebExtension APIs
- Fixed publicSuffix.isKnownSuffix() to reject invalid domain-name characters, including wildcard suffixes, that could previously be matched as a known public suffix - Bug 2059819
- Fixed the frameId reported by webRequest events for requests made from workers, including importScripts()-loaded scripts, which were previously attributed to the wrong frame - Bug 2048884
- Thanks to Giulio B for the fix to webRequest frameId attribution for worker requests.
DevTools
- Benoit made it possible to display JSON Lines (JSONL/NDJSON) documents in the JSON Viewer (#2055774)
- Leo McArdle [:leo] continues his quest to add MDN icons next links to MDN (#2049610, #2050159)
- Julian Descottes [:jdescottes] vastly improved DevTools screenshot performance (by up to 35%) (#2056716)
- Hubert Boma Manilla (:bomsy) fixed keyboard navigation for about:debugging (#2050797)
- Julian Descottes [:jdescottes] fixed a bug that was preventing to show error messages in about:debugging (#2058021)
- Nicolas Chevobbe [:nchevobbe] made ::checkmark pseudo element visible in the Inspector (#2009909)
- Used by customizable select (MDN)
- Preference: dom.select.customizable_select.enabled

WebDriver
- Nirmal Advani cleaned up our codebase by removing the executeSoon helper, which was just a thin wrapper on top of Services.tm.dispatchToMainThread().
- Sameem removed support for the "contexts" argument in the "session.unsubscribe" command. From now on, clients can unsubscribe only by event names or subscription ids.
- John Schanck added support for validating if an authentication id is stored in the Virtual Authenticator Database.
- Alexandra Borovova disabled the download panel to prevent the loss of the focus of the current document when a download begins.
Fluent
Lint, Docs and Workflow
- Sylvestre has converted all our in-tree documents to be Markdown instead of reStructuredText.
- Standard8 adjusted the source doc upload task, that runs on code review, to report failures into phabricator, rather than having a generic error message.
- Standard8 made it so that test-manifest-toml issues for out-of-order entries should show up in phabricator more often.
- https://arewemozsrcyet.com/ continues to head (mostly) in the right direction.
New Tab Page
- HNT Eng had a work week last week. Did a lot of prep for big cleanups (Nova, Widget cleanup post WCW)
- Also worked on ways to automate trainhops / make them easier to deploy
- Jack Brown updated newtabTrainhopAddon to allow co-enrollment and prioritize the highest version number, which ensures the New Tab Page picks the newest addon build when multiple enrollments overlap and prevents older experiment variants from replacing newer installs.
- Fred Chasen fixed AccuWeather sponsored text overlapping the "Tell us what you think" link by adjusting medium weather card CSS (z-index and pointer-events), restoring hover and click behavior for the feedback link on affected New Tab Page cards.
- Mike Kaply fixed wallpaper uploads failing when the wallpaper list can't be queried from remote settings by adding a remote‑settings query fallback/local cache and defensive error handling so users can upload custom wallpapers during remote‑settings outages or timeouts.
- japandi added the widgets.clocks.interaction pref and wired interaction tracking so World Clocks now emits telemetry/events for taps and opens (pref registration + tracker hooks), enabling accurate UX metrics without changing visible UI behavior.
- Maxx Crawford prevented the weather widget from activating without user opt‑in by gating activation on the opt‑in pref and updating the onboarding flow, so weather and related location/telemetry remain disabled by default until explicit user consent.
- Irene Ni made the New Tab client request layouts from remote-settings so NTP layouts and remote-config-driven content now update on load instead of remaining stale; this fixes cases where layout changes pushed via the remote-settings service (layouts collection) weren't applied, improving consistency on desktop and Android clients that rely on remote layouts.
- Nirmal Advani removed three unused activity-stream preferences (discoverystream.thumbsUpDown.*) from prefs and related code paths, reducing prefs surface area and avoiding confusion in about:config/telemetry without changing user-visible behavior.
- Mike Conley fixed ExternalComponentWrapper to forward "live" properties like isIntersecting from MessageWrapper, restoring correct IntersectionObserver-driven behavior (visibility-based lazy-load and impression tracking) for remote components in the New Tab Page and discovery streams that relied on isIntersecting for render/telemetry triggers.
- Irene Ni standardized New Tab widgets and sections header spacing (standardize spacing) to remove misaligned tiles and reduce visual jitter when resizing or toggling sections in the New Tab Page.
- Mike Conley removed version-153 train-hop compatibility shims for the World Cup newtab logo variations (remove compatibility shims), an internal cleanup that prevents legacy logo-selection fallbacks from influencing current logo variations.
- Maxx Crawford exposed available browser themes to New Tab and added apply/install actions (expose and apply themes), allowing users to install or immediately apply themes from the New Tab surface via ThemeManager/Theme API hooks.
- Maxx Crawford added New Tab Customize Panel browser theme selection strings (add theme selection strings) so the new theme-selection UI is localized and displays correct labels across locales.
- Maxx Crawford added a full browser theme selection sub-panel to the New Tab Customize Panel (theme selection sub-panel) to let users browse, preview, and pick themes directly inside the New Tab customization flow.
- Scott Downe fixed Custom newtab wallpapers flash / blink some seconds after loading newtab by ensuring the custom wallpaper is painted only after image data is ready, which removes the multi-second visual flash on about:newtab for users with custom backgrounds and improves perceived stability during initial new-tab load.
- Maxx Crawford exposed trainhopConfig values in Discovery Stream Admin tooling, giving operators direct access to trainhop routing/weight values from the admin UI/API so content trains and experiment routing can be adjusted without code deploys-this has no immediate end-user UI change but reduces time-to-rollout for Discovery Stream content changes.
- Dre fixed Newtab custom wallpapers flash when selecting from picture of the day widget by deferring the wallpaper swap until the selected Picture of the Day is decoded and ready, which prevents the transient blank/flash users saw when changing wallpapers via the widget and makes wallpaper selection feel instantaneous and stable.
- Maxx Crawford used the POTD thumbnailUrl image for the widget background (instead of the high-res image), which reduces bandwidth, memory footprint, and New Tab Page widget load latency for users who see the Picture‑of‑the‑Day widget.
- Kyle Jones added MAC support to TopSitesFeed when fetching tiles from MARS, which enforces authenticated tile retrieval and reduces missing/401 tile failures for users relying on MARS‑served Top Sites tiles.
Performance Tools (aka Firefox Profiler)
- Bug 2050028 - Enable the Gecko profiler by default with low-overhead features when running mochitests landed, which means mochitest failures now upload profiles by default:

- https://tests.firefox.dev/try.html can give you a prompt to ask an AI agent to look at the profile for you using profiler-cli:
Search and Urlbar
- Dao and Moritz continue work on MCAB working on making the address bar's contents to be content-process-safe and preparing to allow cross-process IPC for the address bar.
- Mike Kaply fixed hidden actions still visible in Quick Actions mode.
- Daisuke and Drew continued work on supporting Nova on the address bar and search bar components.
- Caleb continued work to use array-binding for places sql queries, to improve performance.
08 Sep 2026 6:38pm GMT
07 Sep 2026
Planet Mozilla
The Rust Programming Language Blog: Rust debugging survey 2026 results
One of the biggest challenges Rust developers report in our annual surveys is a subpar debugging experience. So, back in February, we ran our first Rust Debugging Survey, in the hopes of identifying how Rust developers are using debuggers and what problems they are facing when doing so. We received over 2,300 responses, and we'd like to thank everyone who took the time to participate in the survey!
In this report, we'll go over some of the results of the survey. If you'd like, you can also check out the complete results of the survey.
If you'd like to skip ahead to any particular section, you can do so with this index:
Who Uses Debuggers?
The first step to making sense of the survey results is understanding who took the survey. We asked respondents to rate their Rust expertise, from "Never used it" to "Advanced". Over 80% reported themselves as "Advanced" or "Intermediate", split roughly evenly between the two:
We also asked respondents if they currently use or have used debuggers in Rust. Over 46% said they currently do, with the remaining responses split between "have in the past" and "never have". That means that over half of respondents do not currently use a debugger for Rust!
Categorized by expertise, the responses reveal that roughly half of "beginners" have never used debuggers in Rust! On the other hand, nearly half of "advanced users" currently do use debuggers in Rust:
For respondents who indicated they had previously used Rust but no longer did, we asked if challenges with debugging support were why they stopped. For nearly 3%, the answer was "yes", with an additional 24% reporting debugging issues as being partially responsible (though mind the small response count; most respondents were active users of Rust):
How Are Debuggers Used?
Knowing what debuggers developers are using and how is another important part of understanding the challenges they face. To this end, we asked respondents how they were debugging their programs. Unsurprisingly, most developers make use of print debugging and the dbg! macro. Excluding those, using lldb inside an IDE was the most popular choice, followed by gdb on the command line:
We can get a more detailed breakdown of these results if we include the operating system on which the respondents use a given debugging approach. We examine this from two different angles. The first angle being, "On operating system X, what percent of responses are using debugger Y?". Print debugging and the dbg! macro are consistently the top two yet again, but looking beyond that, things get more interesting. On Linux, using gdb on the command line was the most popular choice by a thin margin, beating lldb in an IDE by only 0.4%. On Windows, Windows Subsystem for Linux (WSL), and macOS, lldb in an IDE was the top pick by at least 6%, making it a very popular choice in general. On Windows, the three least popular choices were the command line debuggers (gdb CLI, lldb CLI, and BugStalker), and on both Windows and macOS the third most popular pick was, "I don't know". Those who were debugging on operating systems not listed (Other) most frequently used some kind of special embedded debugger or gdb:
The other angle we can look at these responses from is, "For users of debugger X, what percent of responses are using it on operating system Y?". For most debuggers, Linux makes up the largest portion of uses, ranging from about 45% to about 77%, followed by Windows, then macOS. The most notable exceptions are WinDbg and the Visual Studio debugger, which are primarily used on Windows, and lldb, which is used more on macOS than Windows in an IDE and on the command line:
To the 6 respondents who use WinDbg on Linux: we wish you luck!
As for how people actually use their debugger of choice, the aggregate results are not particularly surprising. Roughly 87% of users are using debuggers for stepping line-by-line through programs and a little over half of users are using debuggers to obtain stack traces from hung/crashed processes. Only a quarter of the respondents use a debugger to debug async code. That might be partially caused by the async Rust debugging experience being clumsy and incomplete, or it could just be that users aren't writing much async code:
If we break these results down by expertise, we can learn a bit more about usage patterns. As users become more experienced with Rust, their use of debuggers for learning purposes decreases, and they get more stack traces from crashed processes:
The final bit of insight into how Rustaceans use debuggers is if they are debugging programs that use Rust alongside other programming languages. For 44% of respondents, the answer is "yes", which is a pretty high number!
As for which languages those are, C dominates the scene at a little over 70%, followed by C++ at about 43% and Python at about 20%:
Challenges
Instead of diving right into asking, "what problems do you face when using debuggers?", or something to that effect, we first asked respondents why they decide against using debuggers whenever they do, including for reasons that aren't necessarily "problems with debuggers".
The most commonly reported reason was that it was easier or faster to use logs or print debugging to solve problems, reported by a little over 81% of respondents. This could partially be explained by the open responses, which featured complaints that debuggers were too difficult to set up and/or use (especially on Windows, when dealing with Web Assembly, or in embedded contexts) and sentiment suggesting that small and/or simple problems just don't really need a debugger. It does leave one wondering if the user experience could be made convenient enough to dethrone print debugging, but it seems hard to beat something so intuitive. This is followed by roughly 37% of respondents who write code that Just Works. Fair enough. After that, about 26% of respondents indicated that they've decided not to use debuggers in situations where the language features they were working with had poor support. This is slightly more than issues with standard library types, at about 22%, which is slightly more than issues with external library types, at about 20%:
As stepping through code was anticipated to be one of the most common uses for debuggers, we directly asked respondents if they faced any issues when doing so. A little over 51% of respondents said they did! Of those who reported that they experienced issues stepping through code, we asked when they were experiencing issues. Async code was the most common case reported at slightly over 28%, followed by code involving macros at about 23%. The least common case reported was code involving function pointers, at almost 6%:
We also directly asked respondents which types in the standard library were hard to work with, if any. This was an open-response question, and reading through the responses, some particularly common complaints were with enums and collections, particularly std::collections::HashMap and std::vec::Vec. This is also visible in the word cloud in the full report.
We asked respondents to indicate which pain points, if any, they have encountered when using debuggers with Rust. At slightly over 74%, poor representation of values was the most common pain point by a decent margin, followed by being unable to print variables at just over 55%:
Debugger Visualizers
We asked respondents to indicate if they were library authors, and if so, if they were aware of and using the debugger_visualizer attribute. Nearly 62% of respondents indicated that they were library authors who were not aware of this attribute:
For those who indicated that they were library authors who knew about the attribute but did not use it, we also asked why. This represented a much smaller fraction of respondents, so keep that in mind! That said, half of these library authors indicated that they didn't have the time to maintain visualizer attributes, and just under half indicated they didn't know how to write visualizer scripts:
For those of you who have been reading this section asking yourself what the debugger_visualizer attribute is, you can read up on it in The Rust Reference: Debugger Attributes. The quick explanation is that the debugger_visualizer attribute can be applied to modules or the crate root to embed files in the debug information which improve the display of values with certain debuggers. The two currently supported file types are Natvis files, used by Microsoft debuggers such as WinDbg, and GDB "pretty printers", which are structured Python scripts used by GDB.
Closing Remarks
Thanks to your participation in this survey, we've gained some great insights about how Rustaceans are using debuggers and what issues they are facing. For example, knowing that such a high number of users are dealing with poor representation of values pairs well with knowing which standard library types are causing issues, knowing that many library authors haven't heard of the debugger_visualizer attribute, and knowing that many of those who have but don't use it either don't know how or don't have time to maintain visualizer scripts.
Looking to the future, the survey results have suggested that there are a few notable ways we could most significantly improve the debugging experience in Rust, such as:
- Fixing the way
enums are represented by debuggers so they show actual variants - Fixing the way collections (such as
HashMap) are represented by debuggers so they show their contents, rather than their implementation details - Fixing the way string types (such as
StringandCString) are represented by debuggers so they render as text, rather than their implementation details - Improving the
asyncdebugging experience, particularly with stack traces - Improving stepping through certain state machines (such as iterators and
Futures) - Providing documentation on basic set up and use of some common debuggers
A common suggestion that could resolve those first three points is to use the Debug implementation of types to display them in debuggers. There are challenges to that approach, such as the fact that the Debug implementation is not present in the final binary unless it is actually used somewhere in the program, but it isn't impossible. Notably, this is already supported by the BugStalker debugger (given the same condition that the Debug implementation must actually be used), which some of you first heard about from the survey! It also appears to have some support for async, with plans to expand.
One notable way the debugger experience is currently being improved is through the ongoing Google Summer of Code project improving how we test debug info and visualizer scripts, making it easier to maintain and improve our own visualizer scripts and general compatibility with visualizer scripts without silent breakage or regressions.
Once again, we'd like to thank everyone who took the time to participate in the survey!
07 Sep 2026 12:00am GMT
04 Sep 2026
Planet Mozilla
Firefox Tooling Announcements: Firefox DevTools MCP 0.10.2 released
Firefox DevTools MCP (firefox-devtools-mcp) 0.10.2 is out on npm.
New tools:
press_key- sends a single key, optionally with modifiers, to a snapshot element or the focused element (Return, Escape, Tab, arrows, ctrl+shift+t, …).type_text- types text key by key into the focused element, with an optional key to press afterwards.set_network_cache- bypass or restore the HTTP cache, for the selected tab or browser-wide. Useful before a performance measurement or when verifying a change a cached asset would otherwise hide.
Other changes:
navigate_pageandnew_pagetake an optionalwaitargument (none, interactive, complete), so an agent can wait for the load event before deciding a page is done.- Windows: per-user Firefox installs are now detected, instead of failing with "unable to find binary in default location".
- aarch64 Linux: geckodriver is now resolved on all platforms, fixing "Unable to obtain browser driver" when a native geckodriver is on PATH.
- Several Windows path fixes for --output-file, --log-file and saveTo.
- New generated reference page documenting every tool and its parameters: docs/tools.md (firefox-devtools-mcp/docs/tools.md at main · mozilla/firefox-devtools-mcp · GitHub)
Install:
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest
codex mcp add firefox-devtools - npx @mozilla/firefox-devtools-mcp@latest
For internal Firefox development, swap firefox-devtools-mcp with firefox-devtools-mcp-moz in order to benefit from additional tools, such as chrome-privileged script execution.
Special thanks to all the contributors who filed issues and submitted patches for this release: freema, f3tch (github), jasonanovak and shoemoney.
Full changelog: https://github.com/mozilla/firefox-devtools-mcp/releases/tag/v0.10.2
Repository and issues: GitHub - mozilla/firefox-devtools-mcp: Model Context Protocol server for Firefox DevTools - enables AI assistants to inspect and control Firefox browser through the Remote Debugging Protocol · GitHub
Public chatroom: https://chat.mozilla.org/#/room/#firefox-devtools-mcp:mozilla.org
1 post - 1 participant
04 Sep 2026 1:41pm GMT
03 Sep 2026
Planet Mozilla
Firefox Tooling Announcements: PerfCompare just deployed (Sept 3, 2026)
The latest version of PerfCompare is now live! This includes the launch of PerfCompare's Simple View. Read the following blog post, Introducing PerfCompare's Simple View, to learn more.
Check out the change-log below to see the updates:
Highlights:
[kala-moz]
-
Bug 2059826 - Simplified View: Create checkbox selection for advanced columns and display how to read the results #1069
-
Bug 2059830 Simplified View: Create checkbox selection for expanded row components (#1089)
-
Bug 2068296 Simplified View Follow up for expanded view (#1094)
-
Bug 2058240: Filters from cookies don't make it into the URL (#1076)
-
Simplified View Follow-up: reduce size of cols and link subtest pills to subtests page (#1083)
Other changes:
[kala-moz]
-
Removed silverman and kde warnings (#1082)
-
Bug 2059493: Clean up components in perfcompare frontend using the unecessary silverman_kde data (#1079)
-
Fix for Bug 2060613: PerfCompare statistical analysis has some NaN values in explanations (#1077)
[gopar]
[bug-2021092] Update light/dark toggle wording to be less ambiguous (#1073)
Thank you for the contributions!
Bugs or feature requests can be filed on Bugzilla. The team can also be found on the #perfcompare channel on Matrix. Come and chat!
1 post - 1 participant
03 Sep 2026 6:34pm GMT
Mozilla Performance Blog: Introducing PerfCompare’s Simple View
We heard you. You don't want to open your PerfCompare performance comparison and feel like you need a background in statistics to interpret the Mann-Whitney-U results. Cliff's Delta, CLES, and normality tests, oh my! It should not feel like you've blindly walked into a college stats exam, unless of course, you love statistics. For the rest, all you want is an easy answer to the question: Did my changes make things faster or slower?
So we fixed that. PerfCompare now shows the bare essentials by default and tucks the heavy statistics one click away.
An approachable default for beginners and occasional users
The results table now leads with the platform, the Base and New values, how far the median moved and its direction, the status (which includes the option to filter out noise) and the size of the change. To create a more advanced view, a single "Advanced options" dropdown allows you to add the expert columns (Cliff's Delta, CLES, Significance) and the info-rich expanded row details below the full-width graph. A small help section at the top of the results provides a quick explanation of the columns. The purpose is to serve a diverse audience while preserving your selections in the URL so a shared link reproduces your view.

The "Advanced options" dropdown lets you add the precise statistics columns:
- Cliff's Delta: An effect-size measure of how far the Base and New distributions have pulled apart
- CLES (Common Language Effect Size): The chance a random New run beats a random Base run, e.g. "New wins 78% of the time"
- Significance: Whether the difference is a real signal or just noise
Each one toggles on independently, so you can surface only Significance or the whole trio.

Expand a result and you get a clean panel: a full-width graph of how your Base and New runs are spread out, a quick summary (platform, app, which direction is "better"), and a little "how to read this graph" tool-tip for anyone who hasn't stared at a distribution curve before. You can still poke at the graph's mode controls if you want to dig in.

You can access the extra expanded row details such as effect size and confidence intervals or the full stats table in the "Advanced options" dropdown. Turn on what you need, and the expanded extras lay out in neat two-column rows. If you turn on mode analysis and there aren't multiple modes to show, we now say "No mode analysis available" instead of a blank space.
Lastly, the advanced columns and expanded-row details you've switched on, along with your filters and sorting, are all encoded in the URL. Paste it to a coworker and they'll land on the same result you were looking at; for filters and sorting, the shared link takes precedence over whatever they had saved locally. (One exception: the "How to read the results" panel is a personal per-browser preference, so it stays with you rather than tagging along on the link.)
What's next
Several follow-ups on the way:
- Remembering your advanced choices. Right now the advanced columns and expanded-row toggles start from the clean defaults each visit (they only persist in a link). Soon PerfCompare will remember them in your browser the same way we do for filters. However, if you open a shared link from a colleague, their specific view takes priority, overriding your own local settings so you both see the exact same data.
- Carrying your selections into subtests. Today, the Advanced options you pick on the main results page don't follow you when you open a test's subtests. We're wiring it up so whatever you've enabled up top is automatically enabled in the subtests dropdown too, for one consistent view.
- Expanding the "How to read the results" cheat sheet to include Cliff's Delta, CLES, and Significance definitions.
Share your feedback
We want PerfCompare to work for all users, whether you're chasing your first regression, or you're an expert who doesn't want to lose their favorite metrics to a cleaner view. Our answer is separating the simple view from the power user view, and making the toggle obvious and shareable.
The great news is it's live now! Go expand a Mann-Whitney-U result, click around the Advanced options, and tell us what you think. Please share your feedback, suggestions, or comments on the #perfcompare channel on Matrix. If you've encountered a bug or have a feature request, please file them in Bugzilla. We're listening.
03 Sep 2026 6:29pm GMT
Firefox Tooling Announcements: Firefox Profiler Deployment (September 3, 2026)
The latest version of the Firefox Profiler is now live! Check out the full changelog below to see what's changed:
Highlights:
- [Andrew Creskey] Show which network requests were prefetched (#6259)
- [Florian Quèze] profiler-cli: accept --limit 0 as unlimited, and make truncation loud (#6267)
Other Changes:
- [Nazım Can Altınova] Update oxfmt 0.59.0 → 0.63.0 (major) (#6262)
- [Florian Quèze] profiler-cli: document the marker field:value search syntax (#6265)
- [Florian Quèze] profiler-cli: report one time base for text and JSON output (#6266)
- [Florian Quèze] profiler-cli: avoid a stack overflow on large marker threads (#6264)
- [Markus Stange] Give the frameTable a lib column (#6258)
- [Florian Quèze] profiler-cli: report the network request count the filters ran against (#6274)
- [Nazım Can Altınova] Fix dark mode contrast of the warning icons in the publish panel (#6280)
- [Nazım Can Altınova] Extract the publish panel warning indicator into a small component (#6282)
- [Markus Stange] More typed arrays in the FrameTable (and a flags column) (#6173)
- [Nazım Can Altınova] Improve the profiler-cli publish script and document the whole deployment in a better way (#6260)
- [fatadel]
Sync: l10n → main (September 3, 2026) (#6301) - [fatadel] Bump profiler-cli version to 0.9.0 (#6302)
Big thanks to our amazing localizers for making this release possible:
- es-CL: ravmn
- nl: Mark Heijl
- sv-SE: Andreas Pettersson
- sv-SE: Luna Jernberg
- sv-SE: Peter Kihlstedt
- tr: Selim Şumlu
- tr: giray
- zh-CN: 高乐喆
Find out more about the Firefox Profiler on profiler.firefox.com! If you have any questions, join the discussion on our Matrix channel!
1 post - 1 participant
03 Sep 2026 3:36pm GMT
The Rust Programming Language Blog: Announcing Rust 1.98.1
The Rust team has published a new point release of Rust, 1.98.1. Rust is a programming language that is empowering everyone to build reliable and efficient software.
If you have a previous version of Rust installed via rustup, getting Rust 1.98.1 is as easy as:
rustup update stable
If you don't have it already, you can get rustup from the appropriate page on our website.
What's in 1.98.1
Rust 1.98.1 fixes a miscompilation in vtable generation.
In Rust 1.98.0, in some circumstances, rustc would incorrectly generate a trait object vtable with a null pointer where a function pointer should be. This leads to undefined behavior in the emitted code. In some cases this may 'just' cause segfaults due to the null pointer being loaded, but it is possible for it to be justification for arbitrary effects (as is typical for UB).
If you'd like to help us out by testing future releases, you might consider using the beta (rustup default beta) and nightly (rustup default nightly) channels locally and in your CI. Please report any bugs you might come across!
Contributors to 1.98.1
Many people came together to create Rust 1.98.1. We couldn't have done it without all of you. Thanks!
03 Sep 2026 12:00am GMT
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
01 Sep 2026
Planet Mozilla
Firefox Developer Experience: Firefox WebDriver Newsletter 155
WebDriver is a remote control interface that enables introspection and control of user agents. As such, it can help developers to verify that their websites are working and performing well with all major browsers. The protocol is standardized by the W3C and consists of two separate specifications: WebDriver classic (HTTP) and the new WebDriver BiDi (Bi-Directional).This newsletter gives an overview of the work we've done as part of the Firefox 155 release cycle.
Contributions
Firefox is an open source project, and we are always happy to receive external code contributions to our WebDriver implementation. We want to give special thanks to everyone who filed issues, bugs, and submitted patches. In Firefox 155, several WebDriver bugs were fixed by contributors:
- Khalid AlHaddad updated the Mozilla-specific
moz:debuggingmodule to no longer rely on the same nested event loop API as DevTools, which prevents conflicts when WebDriver BiDi and DevTools are used in parallel. - Nirmal Advani cleaned up our codebase by removing the executeSoon helper, which was just a thin wrapper on top of Services.tm.dispatchToMainThread().
- Nirmal Advani fixed the Actions API so that the
dblclickevent is fired when performing a double-click while holding down theCtrlkey on non-macOS platforms. - Sameem added the cleanup logic for subscriptions when a browsing context is destroyed.
- Sameem removed support for the
contextsargument in thesession.unsubscribecommand. From now on, clients can unsubscribe only by event names or subscription ids.
WebDriver code is written in JavaScript, Python, and Rust, so any web developer can contribute! Read how to set up the work environment and check the list of mentored issues for Marionette or the list of mentored JavaScript bugs for WebDriver BiDi. Join our chatroom if you need any help to get started!
All Changes
A complete list of developer-facing changes included in this Firefox release is available in the MDN Firefox 155 Release Notes.
01 Sep 2026 4:00pm GMT
Mozilla Open Policy & Advocacy Blog: Browsers compete on privacy. When the operating system allows.
For more than two decades, Mozilla has advocated for an internet where people, not powerful platforms, determine how technology works for them. Meaningful consumer choice requires more than the ability to select a browser. People should also be able to choose what their browser can do, from the privacy protections it provides to the ways they can customize their experience.
A recent Firefox product initiative brings that longstanding policy concern into focus.
Firefox is bringing a built-in Ad Blocker to Firefox for iOS, giving people an optional way to reduce intrusive ads and ad-related trackers while browsing. The feature uses an EasyList-based filter list and Apple's WebKit Content Blocker framework. It is off by default and can be enabled or disabled at any time.
The feature responds to years of requests from Firefox users on iPhone. It also illustrates a wider policy problem: dominant mobile platforms can determine which privacy and customization tools competing browsers are able to offer.
On Firefox for desktop and Android, people can install add-ons that change how they experience the web.
Almost 40% of all Firefox users take advantage of this functionality. They include content blockers, accessibility tools, password managers and other extensions that allow people to shape their browser around their own priorities.
Firefox cannot offer that same add-on ecosystem on iOS. Apple's App Review Guidelines generally require apps to remain self-contained and restrict them from downloading or executing code that introduces or changes an app's functionality.
Apple also controls the conditions under which browsers may use alternative browser engines, with entitlement pathways available only in certain jurisdictions and subject to detailed requirements that no browser developer has been able to meet. In practice, the combined effect of Apple's app distribution and browser policies prevents Mozilla from bringing the full Firefox add-on experience available on other platforms to iPhone users.
This is not simply a technical inconvenience but a competition and consumer-choice problem.
A mobile platform owner controls the operating system, the primary app-distribution channel and its own browser.
When that company can also determine which technologies, add-on models and operating-system capabilities competing browsers may use, it sets the boundaries within which browser competition takes place.
Operating system restrictions can prevent independent browsers from differentiating themselves.
Even when users want browsers to differentiate on privacy, operating system restrictions can prevent independent browsers from doing so. They can also force browser developers to recreate individual tools as platform-specific, built-in features rather than allowing people to choose from a broader add-on ecosystem. That increases development costs, slows or restricts innovation and produces uneven experiences across devices.
The new Firefox Ad Blocker is a practical response to those constraints. It gives iPhone users more control today using the technical options currently available to us. But building one feature directly into a browser is not a replacement for a healthy, independent add-on ecosystem. It addresses a specific capability gap for Firefox users on iOS at this time.
A competitive browser ecosystem should focus on the entire user experience.
The EU's Digital Markets Act has shown that policy interventions can improve user choice, with Mozilla and other browsers reporting significant growth following the introduction of browser choice screens. However, meaningful browser competition must extend to the full user experience. This includes whether people can easily choose and change their default browser. It also includes whether people can benefit from the full set of innovations developed by rival browsers by ensuring adequate interoperability with the operating system. With this deeper focus on the full user experience, people can benefit from differentiated privacy and security features.
People's privacy choices should not depend on whether a dominant platform permits their browser to offer them.
The post Browsers compete on privacy. When the operating system allows. appeared first on Open Policy & Advocacy.
01 Sep 2026 12:59pm GMT




