01 May 2026
Planet Mozilla
William Durand: Moziversary #8
Today is my eighth Moziversary 🎂 I joined Mozilla as a full-time employee on May 1st, 2018. I previously blogged in 2019, 2020, 2021, 2022, 2023, 2024, and 2025.
You might have come across this built-in data consent thing for extensions in Firefox. I spent a good chunk of last year working on this project, from developing a technical proposal to implementing the feature in Gecko, Firefox for desktop and Firefox for Android.
Talking about Android, I became the module owner for Fenix::Add-ons, a module for all the code related to add-ons in Firefox for Android (which we call "Fenix" internally). Between the creation of this new module, and an ever-solidifying collaboration between the Add-ons and Android teams, the support for extensions in Firefox for Android has a bright future! Having started my Android journey in 2023, this feels like a noteworthy achievement.
Near the end of last year, I moved back to being a full-time AMO engineer to support a team that was down to two engineers. I redesigned the detail page, and started some refactoring on our security scanners, which I had originally created back in 2019 😬
In other news, I joined the AI/LLM/vibe-coding crowd thanks to my colleague Paul, and it took me about a month to get brain-fried… AI fatigue is real, indeed. That said, Claude code has been somewhat useful to me, and I don't hate it, but I also don't love it.
Thank you to everyone in the Add-ons team as well as to all the folks I had the pleasure to work with so far. Cheers!
01 May 2026 12:00am GMT
The Rust Programming Language Blog: Raising the baseline for the `nvptx64-nvidia-cuda` target
The nvptx64-nvidia-cuda target is a compilation target for NVIDIA GPUs. When using this target, the final output is PTX. Two version choices shape that output:
- a GPU architecture (for example,
sm_70,sm_80, …), which determines which GPUs can run the PTX, and - a PTX ISA version, which determines which CUDA driver versions can load (and JIT-compile) the PTX.
In Rust 1.97 (scheduled for release on July 9, 2026), the baseline PTX ISA version and GPU architecture for nvptx64-nvidia-cuda will be increased. These changes affect both the Rust compiler (rustc) and related host tooling, and they make it impossible to generate PTX artifacts compatible with older GPUs and older CUDA drivers.
The new minimum supported versions will be:
- PTX ISA 7.0 (requires a CUDA 11 driver or newer)
- SM 7.0 (GPUs with compute capability below 7.0 are no longer supported)
Why are the requirements being changed?
Until now, Rust has supported emitting PTX for a wide range of GPU architectures and PTX ISA versions. In practice, several defects existed that could cause valid Rust code to trigger compiler crashes or miscompilations. Raising the baseline addresses these issues and enables more complete support for the remaining supported hardware.
Removing support affects users of the architectures being removed. In this case, the most recent affected GPU architectures date back to 2017 and are no longer actively supported by NVIDIA. We therefore expect the overall impact of this change to be limited.
Maintaining support for these architectures would require substantial effort. These removals let us focus development efforts on improving correctness and performance for currently supported hardware.
What happens when I update to Rust 1.97?
If you need to target a CUDA driver that does not support PTX ISA 7.0 (CUDA 10-era drivers and older), Rust 1.97 will no longer be able to generate PTX compatible with that environment. Similarly, if you need to run on GPUs with compute capability below 7.0 (for example, Maxwell or Pascal), Rust 1.97 will no longer be able to generate compatible PTX for those GPUs.
Assuming you are targeting a CUDA driver compatible with CUDA 11 or newer and using GPUs with compute capability 7.0 or newer:
- If you do not specify
-C target-cpu, the new default will besm_70, and your build should continue to work (but will no longer be compatible with pre-Volta GPUs). - If you currently specify an older
-C target-cpu(for example,sm_60), you will need to either:- remove that flag and let it default to
sm_70, or - update it to
sm_70or a newer architecture.
- remove that flag and let it default to
- If you already specify
-C target-cpu=sm_70(or newer), there should be no behavioral changes from this update.
For more details on building and configuring nvptx64-nvidia-cuda, see the platform support documentation.
01 May 2026 12:00am GMT
30 Apr 2026
Planet Mozilla
Firefox Nightly: Import-ant Updates – These Weeks in Firefox: Issue 201
Highlights
- Import attributes will be supported for WebExtensions, starting in Firefox 150!
- This allows WebExtension authors to import CSS module scripts and JSON into their JavaScript modules.
- Examples:
- import sheet from './styles.css' assert { type: 'css' };
- import schema from "./policies-schema.json" with { type: "json" };
- The Web Serial API is now available for testing in Firefox Nightly!
- See https://fosstodon.org/@balloob/116398481380578311 for more details on how to test this our yourself.
- Dharma created a new quick action for Firefox Library
- You can test this out in Firefox Nightly 151 by typing "library" in the URL bar

- Alexandre Poirot [:ochameau] Enabled the JS Tracer DevTool by default on Nightly
- Read up on how to use the JS Tracer to analyze JavaScript usage on the web here
Friends of the Firefox team
Resolved bugs (excluding employees)
Volunteers that fixed more than one bug
- Chris Vander Linden
- Chukwuka Rosemary
- DrSeed
- EJiro Oghenekome
- Frédéric Wang Nélar
- Itoro James
- japandi
- John Iweh
- jonathancabera
- Josh Aas
- Justin Peter
- Keji Bakare
- kofoworola shonuyi
- konyhéa
- Noble Chinonso
- Okhuomon Ajayi
- Oluwatobi
- Pranjali Srivastava
- ROSHAAN
- Sameeksha
New contributors (🌟 = first patch)
- 🌟 Ben: UI issue in AST locale in Responsive design mode > (open Device picker) > Edit List… > Add Custom Device
- Brian Tsoi [:btsoi]: Create a badram checking library
- 🌟 Chidimma Okoloigwe: Port over tests in browser/base/content/test/sidebar
- japandi:
- Nathan Johnson [:narjoDev]: Remove browser.display.use_system_colors pref
- DrSeed:
- EJiro Oghenekome:
- Keji Bakare:
- 🌟 gotyaoi: Reload toolbar button is active on about:newtab
- 🌟 Hailia: Copied profile edit page heading should enclose profile name in quotes
- geppy: Rename -theme-graphs-* CSS variables
- Itoro James:
- John Iweh:
- jonathancabera:
- Aloys: Remove logic that forces distribution language packs to be reinstalled when upgrading from Firefoxes older than 67
- Mary cathline: Tab Group Label does not respect touch density in vertical tab bar
- 🌟 Brandon Lucier: Popups opened with window.open give window type normal instead of popup
- karan68: [dialog] New Shortcut dialog needs a label/accessible name
- 🌟 Osoble: Update font size and weight for synced tabs device name headers in Firefox View
- konyhéa:
- 🌟 don't restrict the sidebar width so much (to better support non-English locales)
- Add hairline separators between synced tabs device lists on the Recent Browsing page in Fx View
- Firefox View breakpoint for collapsing the sidebar triggers too late
- Split view does not show colored outline when used as a group target during dragging
- Noble Chinonso:
- 🌟 Add the 'command' property to the SidebarStateProps definition
- Timestamp not displayed for items under "Tabs from other devices" in Firefox View Next tab
- Move tab to Start/ End options are enabled and not working, even if the Split View tab is already at start/en,d and the other view is focused
- Mismatched closing tag in syncedtabs-tab-list.mjs itemTemplate
- Do not capitilize "tagName" returned from "WebDriver:GetElementTagName" command
- #shouldHandleEvent in SidebarTreeView.js compares event.keyCode to string values, causing Home/End keys to never be handled
- Knot False: Remove nsIScriptableUnicodeConverter from services/common/utils.js
- Pranjali Srivastava:
- Okhuomon Ajayi:
- 🌟 Rishan: Fix duplicated arrow function in browser_history_sidebar.js
- Chukwuka Rosemary:
- ROSHAAN:
- Sameeksha:
- kofoworola shonuyi:
- 🌟 Sayd Mateen: Page URL is displayed as tab name when page's <title> contains about:reader?
- Oluwatobi:
Project Updates
Add-ons / Web Extensions
Addon Manager & about:addons
- Removed obsolete migration logic that forced distribution language packs to be reinstalled when upgrading from Firefox versions older than 67 - Bug 2000797
- Thanks to Aloys for contributing the changes needed to cleanup this old XPIProvider migration logic
WebExtensions Framework
- Fixed a regression where WebRTC permission popups were queued and suppressed while an extension popup was open - Bug 1982832
WebExtension APIs
- Fixed an edge case where tabs.move would revert splitview tabs order while moving splitview tab to a new window - Bug 2028832
- Fixed windows API reporting window type normal instead of popup for windows opened via window.open() - Bug 2030631
- Thanks to Brandon Lucier for contributing this small but very much appreciated fix to the windows WebExtensions API!
DevTools
- Nicolas Chevobbe [:nchevobbe] added support for multi-conditions @container rules in the Inspector (#2023125), add specific style for unmatched conditions (#2030236)
![]()
- Nicolas Chevobbe [:nchevobbe] added container-name in the @container tooltip (#2030731)

WebDriver
- Henrik Skupin fixed a bug in the WebDriver BiDi session.new command where an empty proxy object was returned in the capabilities when no proxy was requested, even though that is not valid according to the CDDL.
- Henrik Skupin landed support for browser.setClientWindowState, originally started by Dan and continued by Liam DeBeasi, with final fixes and improvements completed after earlier contributors were unable to continue.
- Alexandra Borovova improved the "text" field of the "log.entryAdded" event to better align with Firefox DevTools behavior and Google Chrome WebDriver BiDi implementation.
Lint, Docs and Workflow
- A problem with the ESLint-build builder has been resolved. This had meant that the valid-ci-uses and valid-services-property rules were not being run.
- Work is ongoing to get various css files passing the use-design-tokens rules.
New Tab Page
- You can preview Nova on the New Tab browser.newtabpage.activity-stream.nova.enabled to true, and then opening a few tabs.
- The browser.nova.enabled pref was just introduced to turn on the Nova design tokens. That's still very much a work in progress.
Picture-in-Picture
- aoia7rz7l for added PiP wrapper captions support to various public Invidious instances
- chutten removed all legacy PiP telemetry
- sfarre is working on PiP API support and has a patch up integrating it nicely with our native implementation
Search and Urlbar
Search
- Mandy updated the search-config-v2 schema for partnerCodes (2027191)
- Florian fixed a high frequency intermittent test failure in the search code (2009494)
- Standard8 fixed a bug with duplicate keywords for search engines, so that we now prefer the default search engine (2024714)
Nova
- mconley made a rounder search input for about:newtab and about:privatebrowsing (2027144)
- Drew is continuing his work on making Nova updates to the urlbar (2026859)
New searchbar
- Moritz and Dao continue re-implementing the search bar using urlbar modules (2027749, 2027578, 2002834, 2025904, 2027565)
Urlbar
- Dharma also fixed a quick action telemetry error (1955058)
- James has been working on Adaptive History for Autofill Improvements (2019695, 2019695, 2021079, 2019719, 2021036, 2028730, 2021039, 2019626)
- Gijs landed a patch so that we use aria-notify instead of A11yUtils.announce for UrlbarView's "special" announcements (2026753)
- Dale added a tooltip to engines in the unified search panel (2028668)
- Drew has been working on sports suggestions (2025052)
- James fixed a bug where persisted search was not working for Fx versions prior to 148 (2025933)
Smart Window
- preparing for 150 mvp with various uplifts from 151
- telemetry: assistant 2024869, input/suggestions 2009615, MLtelemetry 2019772, settings 2009612
- security: spotlighting 2020807, url ledger 2023001
- polish: autoopen sidebar pref 2029686, memories strings 2029262, report issues link 2029257
- bugs: keeping conversations when switching windows 2026239, switching tabs 2023284, transition fullpage to sidebar 2024781
- a11y: ask button state 2015485, smartbar announce 2016758
Storybook/Reusable Components/Acorn Design System
- From more than two weeks ago (sorry I wasn't here and forget if they were shared):
- Finn converted the Settings page nav to match Firefox View/new design Bug 1867385
- Mark S imported the initial Nova design from Figma Bug 2021477
- Currently behind browser.design-tokens.nova but moving to browser.nova.enabled today most likely
- Mark S created an Icon Directory in Storybook - Bug 1990228
- Mark Striemer added breadcrumbs to sub-panes in Settings
- Anna Kulyk fixed arrow keys not working with panel-list variant of moz-select with separators
- Mark Kennedy fixed an display issue with the Applications view not updating when cancelling the Use other option
- Finn Terdal fixed some page navigation issues:page nav leaves a large gap when it first collapses to icon-only, sub-pane content being clipped by sticky search bar, reintroduced the vertical border next to static sidebar in prefers-reduced-motion
- Jules Simplicio landed a UI polish pass for the Settings Redesign with spacing, focus-ring, and contrast tweaks across subpanes, improving readability and target sizes.
- This also updated some global styling for card, message bar, text input border radiuses/colors and the moz-promo component got a refactor with better support for image styling by default
- Hanna Jones updated copy and illustrations for the Account and sync page, so it's ready for SRD release
- Osmond Arnesto converted urlbar variables to design tokens, preparing for JSON conversion and Nova import from Figma
- Jon Oliver converted tab variables into design tokens, and set them up in JSON for Nova import from Figma
- Jules Simplicio has been updating variable names in the Figma Nova Components/Styles files so our design token naming is consistent between Figma and central (so we can run our import script for more Nova automation)
UX Fundamentals
- Felt Privacy error pages now support more NSS errors instead of falling through to the legacy page. Updated introductory text for the denied-port-access error. - 2024150
- Fixed a test in browser_aboutCertError.js that was failing on Linux opt standalone and removed the platform skip. - 2028651
- Added clock skew detection to the Felt Privacy error pages. When a certificate error is caused by a wrong system clock, the Felt Privacy error pages now show the same dedicated clock-skew message that the legacy error pages had, and helps guide users to correct their system time. - 2025049
- Fixed misaligned bullet points in the "What can you do?" section of Felt Privacy network error pages, restoring correct visual indentation for that list. - 2028632
30 Apr 2026 4:29pm GMT
The Mozilla Blog: Welcoming Abigail Besdin, Mozilla’s new Chief Operating Officer

We're delighted that Abigail Besdin has joined Mozilla as our new Chief Operating Officer.
This is an incredibly exciting time for Mozilla. Our focus is to become the world's most trusted software company by building products that let people use the internet openly, safely, and on their terms. As technology changes rapidly, we are working to strengthen the business foundation and infrastructure that champions our mission. Delivering on that ambition takes more than great products; it demands operational rigor. Abigail will lead this effort, demonstrating how values-driven organizations can scale with discipline, speed, and trust in the AI era.
As COO, Abigail will drive company strategy and oversee Mozilla's Core Services teams: Business Operations, Data, Infrastructure, IT, Legal, People, Security, and Strategy. These are the functions that enable us to move quickly and scale with focus. Abigail will sharpen how we plan, prioritize, and execute across the company.
Abigail brings more than 18 years of experience building and scaling high-impact platforms. She co-founded Great Jones, a venture-backed property management startup where she raised $30M, reached $10M in ARR, and led a successful acquisition by Roofstock. At Roofstock, she served as Chief of Staff to the CEO - functioning as an internal COO - where she launched new product lines, closed and integrated two acquisitions, and led the company's strategic planning process.
Earlier in her career, she spent six years at Skillshare, where she launched the company's online learning platform and built its growth and content engines from the ground up.
That combination of founder's instinct and operator's discipline is exactly what Mozilla needs right now. Abigail will report directly to our CEO and join the executive team.
I've learned firsthand that ambitious product goals are only as effective as the operations underpinning them. Mozilla's mission is as big as it gets, and I'm thrilled to lead our Core Services organization to enable rigorous, smart, and quick decision-making across the business. With a powerful execution engine, we can make sure the best of Mozilla's mission materializes.
Abigail Besdin, Chief Operating Officer
Abigail studied Philosophy at NYU, with a focus on Ethics and Mathematical Logic. Born and raised in New York City, she still lives there with her husband and three kids.
Please join us in welcoming Abigail to Mozilla.
The post Welcoming Abigail Besdin, Mozilla's new Chief Operating Officer appeared first on The Mozilla Blog.
30 Apr 2026 12:57pm GMT
Firefox Tooling Announcements: Firefox Profiler Deployment (April 28, 2026)
The latest version of the Firefox Profiler is now live! Check out the full changelog below to see what's changed:
Highlights:
-
[fatadel] Dim non-matching nodes in the stack chart when searching (#5935)
-
[Markus Stange] Always render the CPU-usage-aware activity graph when CPU information is available (#5918)
-
[fatadel] Add CounterDisplayConfig to counters in the processed profile format (#5912)
-
[Nazım Can Altınova] Fallback to javascript highlighting in the source view as a backup (#5936)
-
[fatadel] Replace 4 counter track components with a single generic TrackCounter (#5944)
-
[Ryan Hunt] Add a fullscreen button to the bottom box (#5605)
-
[Nazım Can Altınova] Add "Include idle samples" toggle to the call tree settings (#5968)
-
[Markus Stange] Update the hovered item when panning any viewport canvas (#5903)
-
[Nazım Can Altınova] Fix loading .json.gz profiles from inside zip archives (#5959)
-
[Markus Stange] Replace symbolicator-cli with a profiler-edit node tool (#5965)
Other Changes:
-
[fatadel] Fix arrow panel appearing behind marker tooltips (#5926)
-
[fatadel] Upgrade Node.js from v22 to v24 (#5923)
-
[Markus Stange] Use createStackTableBySkippingDiscarded in focusSelf. (#5916)
-
[Markus Stange] Propagate isJS to symbolicated funcs (#5907)
-
[Nazım Can Altınova] Properly type the return value of _languageExtForPath (#5937)
-
[Nazım Can Altınova] Update typescript eslint dependencies (#5938)
-
[Markus Stange] Modernize more of the transform functions (#5934)
-
[Paul Adenot] Fix extractGeckoLogs for structured Log marker format (bug 2022540) (#5927)
-
[Nazım Can Altınova] Move some profile fetching code into a separate module. (#5939)
-
[Markus Stange] Migrate Home page animation to CSS transitions and remove react-transition-group (#5649)
-
[Nazım Can Altınova] Fix test/lint commands on Windows and fix CI (#5947)
-
[Nazım Can Altınova] Convert profile-logic/js-tracer.tsx to a ts file (#5942)
-
[Markus Stange] Remove panelLayoutGeneration (#5946)
-
[Nazım Can Altınova] Fix eslint-config-prettier silently overriding custom rules (#5955)
-
[Markus Stange] Speed up _computeCallNodeTableHierarchy by keeping siblings ordered by func (#5964)
-
[Nazım Can Altınova] Add dark mode versions of the fullscreen icons (#5972)
-
[fatadel] Use ephemeral port for esbuild's internal dev server (#5974)
-
[carverdamien] Remove category from LongTaskMarkerPayload (#5975)
Big thanks to our amazing localizers for making this release possible:
-
de: Ger
-
de: Michael Köhler
-
el: Jim Spentzos
-
en-GB: Ian Neal
-
es-CL: ravmn
-
fr: Théo Chevalier
-
ia: Melo46
-
it: Francesco Lodolo [:flod]
-
nl: Mark Heijl
-
pt-BR: Marcelo Ghelman
-
ru: Valery Ledovskoy
-
ru: berry
-
sv-SE: Andreas Pettersson
-
tr: Grk
-
zh-CN: Olvcpr423
-
zh-CN: wxie
-
zh-TW: Pin-guang Chen
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
30 Apr 2026 12:09pm GMT
Mozilla Data YouTube Channel: Outreachy Mentorship: A Retrospective
Will Lachance does a retrospective on the Glean Dictionary outreachy internship. See also "Linh's Outreachy Internship Highlights" https://www.youtube.com/watch?v=UJdIkHDPgGQ To learn more about Outreachy, see https://www.outreachy.org/
30 Apr 2026 7:37am GMT
Mozilla Localization (L10N): L10n Report: April Edition 2026
Please note some of the information provided in this report may be subject to change as we are sometimes sharing information about projects that are still in early stages and are not final yet.
Welcome!
Are you a locale leader and want us to include new members in our upcoming reports? Contact us!
What's new or coming up in Firefox desktop
Firefox string deadline changes
Starting with 149, some changes in developer deadlines relating to Nightly and Beta have resulted in a slight shift in string translation deadlines, giving us 2 extra days to land strings. Previously deadlines in Pontoon were set to the Sunday ahead of the final Release Candidate but going forward they will be set to a Tuesday. For example the upcoming deadline for Firefox 151 is Tuesday, May 12.
If you're interested to see more details on upcoming Firefox releases and milestones, https://whattrainisitnow.com has all the latest details.
UI Refresh
Behind the scenes a refresh on the visual look of Firefox has been ongoing using the internal name "Nova". You may have seen some blog reports recently on this, or perhaps have been seeing bugs in Bugzilla with this in the title. We will start seeing new strings related to these changes here and there as development work progresses, however we don't expect a large number of string changes stemming from this work.
That being said, these updates also bring some changes in how we communicate directly to our users within Firefox. One of these changes you may have already met: our new mascot Kit. If you missed the announcement give it a read here. You may also notice a shift voice for user directed messages - with source strings becoming more Genuine, Fiery, and Playful. See this recent update in Firefox's brand voice for more details.
Settings redesign
Localization for the update to about:settings has been going on for some time (starting early this year) and the bulk of the translation work is behind us at this point. You may see some new strings (particularly around Privacy & Security) but many of the strings are in a viewable/testable state in Nightly 152. You can check your translations and test out the redesign by typing about:config into your URL bar, proceeding past the warning message, and searching for browser.settings-redesign.enabled and setting the value to true.
What's new or coming up in mobile
Things have been particularly busy on mobile over the past couple of months. For example, Firefox for Android saw a significant spike in April, with the number of new strings increasing to over 200 compared to fewer than 50 in March - more than eight times the typical monthly volume*.
There are two main drivers behind this increase. First, Firefox for Android is introducing a built-in VPN feature, bringing it in line with the functionality already available in Firefox. Second, both iOS and Android teams are working on a new widget for the upcoming 2026 World Cup, allowing users to follow their team directly from the browser.
Given the short turnaround time for this feature, you will notice that many strings are intentionally kept consistent across platforms - and started landing on Desktop as well. We're also pre-landing as many strings as possible, ahead of implementation, to give localizers more time to complete translations.
* Did you know that you can track the number of new strings in a project from the Insights page in Pontoon? Check for example Firefox for Android. In the Translation activity chart, click on New source strings in the legend to display this data. Given the difference in scale, it can also help to hide other metrics to make the chart easier to read.
What's new or coming up in Pontoon
New documentation system. Pontoon now features a brand-new, unified documentation system. This new hub brings together previously scattered resources into a single, streamlined experience, consolidating developer, localizer, and admin documentation from three separate sites into one cohesive platform. By centralizing content, the new system makes it easier to find, navigate, and maintain documentation, ensuring contributors of all roles have quick access to up-to-date and consistent guidance.
Search. You can now set default search options directly in your profile. This allows you to tailor your search without having to adjust filters each time.
The same settings are also applied when using the recently introduced global search page, which brings a major step forward in unifying localization across Mozilla by allowing users to search for strings across all projects and locales in one place. Inspired by Transvision and designed as its successor, the feature integrates deeply with Pontoon, making it easy to filter results, compare translations across languages, and jump directly into the translation workflow.
AI integration. We've also refined the prompt used by the LLM-powered translation feature. The goal is not to change how the feature works, but to make its output more consistent and better aligned with the context available in Pontoon. For example, the updated prompt improves how punctuation is handled, reducing variability in suggestions.
In addition, the prompt now includes more contextual data:
- String ID.
- Comments, including pinned comments from project managers.
- Matches from terminology.
This additional context helps the model generate more relevant suggestions. It also represents a first step toward making LLM suggestions more useful, ahead of potential experiments with displaying them by default alongside suggestions from traditional machine translation.
New contributors. We're also excited to welcome a group of new contributors who have started making an impact on Pontoon over the past few months. MundiaNderi, nishitmistry, dannycolin, first-afk, wassafshahzad, huseynovvusal, and Peacanduck have all contributed valuable improvements across different parts of the project, helping us move faster and improve the overall experience.
A special shoutout goes to Serah (MundiaNderi), who not only made significant contributions but also shared insights into her work in a recent blog post about enhancing comment management in Pontoon-an excellent example of the kind of collaboration and knowledge sharing we love to see in the community.
Newly published localizer facing documentation
As part of the recent documentation update for Pontoon, we've reorganized the content around pretranslation to make it clearer and easier to navigate. There is now a dedicated page outlining the criteria required to enable pretranslation for a locale, along with guidance on how to monitor its effectiveness over time (for example, by tracking metrics like acceptance rate or time to review). If you're a locale manager and want to try pretranslation for your locale, you can request it directly from Pontoon.
Over the past 12 months, we also ran a limited experiment using paid translation agencies for two locales. The goal was to restore the localization level of Firefox for Android in cases where the community was inactive - situations that have since improved, with both communities now active again.
Because volunteer communities remain the foundation of Mozilla's localization model, we wanted to be transparent about when and why this approach was used, and what it means in practice. This includes clarifying how external support fits within a community-driven ecosystem, where localizers retain ownership and responsibility for quality and direction. You can find more details in this page.
Friends of the Lion
Image by Elio Qoshi
We continue the localizer spotlight series this year.
- Meet Oliver from China Firefox localizer, accounting student, former Minecraft translator, and Bocchi the Rock! fan He talks about starting with a single typo, why Firefox's independence matters to him, and how the Simplified Chinese community keeps quality high with cross-review and shared responsibility.
- Marcelo from Argentina needs no introduction to the localization communities. From Phoenix 0.3 to 24 years later, he shares how he got started, what it meant to be part of the Firefox 1.0 release, his experience as an l10n manager, and why using Mozilla products in his own language - Spanish (Argentina) - continues to motivate him.
- What does 18 years of volunteer localization look like? From discovering Firefox and Linux out of curiosity to leading the Portuguese translation team, Cláudio from Portugal reflects on why localization is a form of digital activism, and how every translated word helps build a more inclusive internet.
- Baurzhan from Kazakhstan began his localization journey with a simple question: why wasn't Kazakh available in widely used software? That curiosity grew into a long-term commitment to localization, leading to the successful translation of Firefox and many other open source projects. His work demonstrates the power of perseverance in making technology accessible to all.
If you enjoy the series, please help us identify the localizers you'd like to see featured filling out this nomination form. If you have stories to share, tell us in your own words.
Know someone in your l10n community who's been doing a great job and should appear here? Contact us and we'll make sure they get a shout-out!
Useful Links
- #l10n-community channel on Element (chat.mozilla.org)
- Localization category on Discourse
- Mastodon
- L10n blog
Questions? Want to get involved?
If you want to get involved, or have any question about l10n, reach out to:
- Francesco Lodolo (flod) - Engineering Manager
- Bryan - L10n Project Manager
- Peiying (CocoMo) - L10n Project Manager for mozilla.org, marketing, and legal
- Francis - L10n Project Manager for Common Voice, Mozilla Foundation
- Théo Chevalier - L10n Project Manager for Mozilla Foundation
- Kiki - L10n Project Manager for SUMO
- Matjaž (mathjazz) - Pontoon dev
- Eemeli - Pontoon, Fluent dev
Did you enjoy reading this report? Let us know how we can improve it.
30 Apr 2026 6:13am GMT
The Servo Blog: March in Servo: keyboard navigation, better debugging, FreeBSD support, and more!
Servo 0.1.0 represents Servo's biggest month ever, with a record 530 commits and our first ever release on crates.io! For security fixes, see § Security.
With this release Servo becomes more accessible, thanks to tab navigation (@mrobinson, @Loirooriol, #42952, #43019, #43058, #43246, #43267, #43067), keyboard navigation with Alt+Shift and the accesskey attribute (@mrobinson, #43031, #43144, #43434), and keyboard scrolling with Space and Shift+Space (@mrobinson, #43322).
We've shipped several new web platform features:
- <input type=range> (@BudiArb, @rayguo17, @mrobinson, #41562)
- <script blocking=render> (@TimvdLippe, #43150)
- <svg width> and <svg height> (@Loirooriol, #43583)
- 'X-Frame-Options' (@TimvdLippe, #43539, #43708)
- 'Content-Security-Policy: frame-ancestors' (@TimvdLippe, #43630)
- '::first-letter' styling (@minghuaw, @xiaochengh, @Loirooriol, #43027)
- '::placeholder' styling (@stevennovaryo, #43053)
- '::file-selector-button' styling (@lukewarlow, @AlexVasiluta, #43498)
- 'background-blend-mode' (@mrobinson, #43666)
- 'content' on '::marker' (@niyabits, @Loirooriol, #43515)
- 'list-style-type: <string>' (@Loirooriol, #43111)
- 'attr(namespace|local)' and 'clamp(none)' (@Loirooriol, #43045)
- <system-color> (@longvatrong111, @mrobinson, #42529, #43105, #43107)
- <step-position> values 'jump-start', 'jump-end', 'jump-none', and 'jump-both' (@yezhizhen, #43061)
Plus a bunch of new DOM APIs:
- CommandEvent (@lukewarlow, #43190)
- moveBefore() on Node (@lukewarlow, #41238)
- relatedTarget on MouseEvent and PointerEvent (@simonwuelker, #42989)
- command on HTMLButtonElement (@lukewarlow, #43190)
- selectedOptions on HTMLSelectElement (@jakubadamw, #43017)
- url on LargestContentfulPaint (@shubhamg13, #42901, #42949)
- crypto.subtle.digest() for TurboSHAKE (@kkoyung, #43551)
- crypto.subtle.getPublicKey() for ECDH, ECDSA, Ed25519, RSASSA-PKCS1-v1_5, RSA-PSS, RSA-OAEP, and X25519 (@kkoyung, @Taym95, #43073, #43093, #43106, #43115)

servoshell is now installed as servoshell or servoshell.exe, rather than servo or servo.exe (@jschwe, @mrobinson, #42958). --userscripts has been removed for now, but anyone who uses it is welcome to reinstate it as a wrapper around UserContentManager::add_script (@jschwe, #43573). We've fixed a bug where link hover status lines are sometimes not legible (@simartin, #43320), and we're working on getting servoshell signed for macOS to avoid getting blocked by Gatekeeper (@jschwe, #42912).
After a long effort by @valpackett, @dlrobertson, and more recently @nortti0 and @sagudev (#43116, #43134), we can now build Servo for FreeBSD! Note that Servo 0.1.0 still has some issues that need to be worked around, but you can get all the details in #44601.
A great deal of work went into making the crates.io release possible, including renaming libservo to just servo (@jschwe, #43141), making each package self-contained (@jschwe, #43180, #43165), fixing build issues (@delan, @jschwe, #43170, #43458, #43463) and crates.io compliance issues (@jschwe, #43459), configuring package metadata (@jschwe, @StaySafe020, #43078, #43264, #43451, #43457, #43654), and organising our dependency tree (@jschwe, @yezhizhen, @webbeef, @mrobinson, #42916, #43243, #43263, #43516, #43526, #43552, #43615, #43622, #43273, #43092). As a result, you can now take your first step towards embedding Servo in a Rust app with:
$ cargo add servo
This is another big update, so here's an outline:
Security
crypto.subtle.deriveBits() for X25519 checking for all-zero secrets, and verify() for HMAC comparing signatures, are now done in constant time (@kkoyung, #43775, #43773).
'Content-Security-Policy' now handles redirects correctly (@TimvdLippe, #43438), and sends violation reports with the correct blockedURI and referrer (@TimvdLippe, #43367, #43645, #43483). The policy in <meta> now combines with the policy sent in HTTP headers, rather than overriding it (@TimvdLippe, @elomscansio, #43063). When checking nonces, we now reject elements with duplicate attributes (@dyegoaurelio, #43216).
The document containing an <iframe> can no longer access the contents of error pages (@TimvdLippe, #43539), and CSP violations inside an <iframe> are now correctly reported (@TimvdLippe, #43652).
Work in progress
We've landed more work towards supporting IndexedDB, under --pref dom_indexeddb_enabled (@arihant2math, @gterzian, @Taym95, @jerensl, #42139, #42727, #43096, #43041, #42451, #43721, #43754, #42786), and towards supporting IntersectionObserver, under --pref dom_intersection_observer_enabled (@stevennovaryo, @mrobinson, #42251).
We're continuing to implement document.execCommand() for rich text editing (@TimvdLippe, #43177), under --pref dom_exec_command_enabled. 'beforeinput' and 'input' events are now fired when executing supported and enabled commands (@TimvdLippe, #43087), the 'defaultParagraphSeparator' and 'styleWithCSS' commands are now supported (@TimvdLippe, #43028), and the 'delete' command is partially supported (@TimvdLippe, #43016, #43082).
We're also working on the Font Loading API (@simonwuelker, #43286), under --pref dom_fontface_enabled. new FontFace() now accepts ArrayBuffer in its source argument (@simonwuelker, #43281).
All of the features above are enabled in servoshell's experimental mode.
Work on accessibility support for web contents continues under --pref accessibility_enabled. There was a breaking change in the embedding API (@delan, @alice, #43029), and we've landed support for "grafting" the accessibility tree of a document into that of its containing webview (@delan, @alice, #43012, #43013, #43556). As a result, when you navigate, separate documents can have separate accessibility trees without complicating the embedder.
<link rel=modulepreload> is now partially supported (@Gae24, #42964), though recursive fetching of descendants is gated by --pref dom_allow_preloading_module_descendants (@Gae24, #43353).
For a long time, Servo has had some support for the Web Bluetooth API under --pref dom_bluetooth_enabled. We've recently reworked our implementation to adopt btleplug, the cross-platform Rust-native Bluetooth LE library (@webbeef, #43529, #43581).
We're now implementing the Web Animations API, starting with AnimationTimeline and DocumentTimeline (@mrobinson, #43711).
We've landed more fixes to Servo's async parser (@simonwuelker, #42930, #42959), under --pref dom_servoparser_async_html_tokenizer_enabled. If we can get the feature working more reliably (#37418), it could halve the energy Servo spends on parsing, lower latency for pages that don't use document.write(), and even improve the html5ever API for the ecosystem.
For developers
Servo's DevTools feature now has partial support for inspecting service workers (@CynthiaOketch, #43659), as well as using the navigation controls along the top of the UI (@brentschroeter, @eerii, #43026).
In the Inspector tab, we've fixed a bug where the UI stops updating when navigating to a new page (@brentschroeter, #43153).
In the Console tab, you can now evaluate JavaScript in web workers and service workers (@SharanRP, #43361, #43492).
In the Debugger tab, you can now Step In, Step Out, and Step Over (@eerii, @atbrakhi, #42907, #43040, #43042, #43135). We've landed partial support for the Scopes panel (@eerii, @atbrakhi, #43166, #43167, #43232), the Call stack panel (@atbrakhi, @eerii, #43015, #43039), and showing you information when hovering over objects, arrays, functions, and other values (@atbrakhi, @eerii, #43319, #43356, #43456, #42996, #42936, #42994).

We've fixed some long-outstanding bugs where the DevTools UI may stop responding due to protocol desyncs (@brentschroeter, @eerii, #43230, #43236), or due to messages from multiple Servo threads being interleaved (@brentschroeter, @eerii, #43472).
For developers of Servo itself, mach can be a bit opaque at times. To make mach more transparent and composable, we've added mach print-env and mach exec commands (@jschwe, #42888).
We're also working on a new dev container, which will provide an alternative to our usual procedures for setting up a Servo build environment (@jschwe, @sagudev, #43127, #43131, #43139).
Embedding and automation
Breaking changes:
-
Servo::set_accessibility_active()is nowWebView::set_accessibility_active()(@delan, @alice, #43029), to make the API harder to misuse (see the docs for more details). -
What was previously named
WebView::pinch_zoom()has been renamed toadjust_pinch_zoom(), and we've added apinch_zoom()method that lets you read the current pinch zoom level (@chrisduerr, #43228). -
WebView::set_delegate(),set_clipboard_delegate(), andset_gamepad_provider()are nowWebViewBuilder::delegate(),clipboard_delegate(), andgamepad_delegate()(@mrobinson, #43205, #43233). Note that set_gamepad_provider() is now gamepad_delegate(), consistent with theGamepadProviderrename below. -
WebViewDelegate::show_bluetooth_device_dialog()has been reworked to use the same "request object" pattern as therequest_*()methods, giving you aBluetoothDeviceSelectionRequestwith clear methods (@webbeef, #43580). -
GamepadProviderhas been renamed toGamepadDelegate, andgamepad_provider()onWebViewhas been renamed togamepad_delegate()(@mrobinson, #43233). -
The empty default implementation of
EventLoopWaker::wakehas been removed, because it almost never makes sense for a new custom impl to leave the method empty (@chrisduerr, @mrobinson, #43250). -
Opts::print_pwmis nowDiagnosticsLogging::progressive_web_metrics(@mrobinson, #43209).
Removed from our API:
-
Opts::nonincremental_layout(@mrobinson, #43207) - no replacement. This only really worked in legacy layout. -
Opts::user_stylesheets(@mrobinson, #43206) - useUserContentManager::add_stylesheet()instead. This is how servoshell's--user-stylesheetoption works.
You can now read and write cookies with SiteDataManager::cookies_for_url() and set_cookie_for_url() (@longvatrong111, #43600).
ClipboardDelegate and StringRequest are now exposed to the public API, allowing you to implement custom clipboard delegates (@jdm, @chrisduerr, #43203, #43261). You can pass your custom delegate to WebViewBuilder::clipboard_delegate().
You can now get the EmbedderControlId associated with an InputMethodControl by calling InputMethodControl::id() (@chrisduerr, #43248).
PixelFormat now implements Debug (@chrisduerr, @mrobinson, #43249).
We've improved the docs for Servo, ServoBuilder, WebViewBuilder, RenderingContext (@chrisduerr, #43229), EmbedderControlId, EmbedderControlRequest, EmbedderControlResponse, SimpleDialogRequest, AlertResponse, ConfirmResponse, PromptResponse, EmbedderMsg (@mukilan, #43564), ResourceReaderMethods (@jschwe, @mrobinson, #43769), servo::input_events (@mukilan, #43681), and WheelDelta (@yezhizhen, @mrobinson, #43210).
We fixed a deadlock in WebDriver that occurs under heavy use of actions from multiple input sources (@yezhizhen, #43202, #43169, #43262, #43275, #43301), 'pointerMove' actions with a 'duration' are now smoothly interpolated (@yezhizhen, #42946, #43076).
Add Cookie is now more conformant (@yezhizhen, #43690), which led to Servo developers landing a spec patch. 'pause' actions are now slightly more efficient (@yezhizhen, #43014), and we've fixed a bug where 'wheel' actions fail to interleave with other actions (@yezhizhen, #43126).
More on the web platform
Carets now blink in text fields (@mrobinson, #43128). You can configure or disable blinking carets with --pref editing_caret_blink_time=0 or a duration in milliseconds. Clicking to move the caret is more forgiving now (@mrobinson, #43238), and moving the caret by a word at a time is more conventional on Windows and Linux, with Ctrl instead of Alt (@mrobinson, #43436). We've also fixed a bug where pressing the arrow keys in text fields both moves the caret (good) and scrolls the page (bad), and fixed a bug where the caret fails to render on empty lines (@mrobinson, @freyacodes, #43247, #42218).
Input has improved, with more responsive touchpad scrolling on Linux (@mrobinson, @chrisduerr, #43350). Pointer events and mouse events can now be captured across shadow DOM boundaries (@simonwuelker, #42987), and we've now started working towards shadow-DOM-compatible focus (@mrobinson, #43811). Pressing Space or Enter inside text fields no longer causes them to be clicked (@mrobinson, #43343).
The lang attribute is now taken into account when shaping, which is important for the correct rendering of Chinese and Japanese text (@RichardTjokroutomo, @mrobinson, #43447). 'font-weight' is now matched more accurately when no available font is an exact match (@shubhamg13, #43125).
Navigation is one of the most complicated parts of HTML: navigating can run some JavaScript that replaces the page, just run some JavaScript, or depending on the response, do nothing at all. <iframe> makes navigation doubly complicated: the document containing an <iframe> can observe and interact with the document inside the <iframe> in various ways, often synchronously. This has been the source of many bugs over the years, but we've recently fixed one of those major issues (@jdm, #43496).


javascript: URLs are a massive special case with many quirks, and <iframe> has its own big edge cases.
new Worker() now supports JS modules (@pylbrecht, @Gae24, #40365), and CanvasRenderingContext2D now supports drawing text with Variation Selectors, allowing you to control things like emoji presentation and CJK shaping (@yezhizhen, #43449).
Servo now fires 'pointerover', 'pointerout', 'pointerenter', and 'pointerleave' events on web content (@webbeef, #42736), 'scroll' events on VisualViewport (@stevennovaryo, #42771), and 'scrollend' events on Document, Element, and VisualViewport (@abdelrahman1234567, @mrobinson, #38773). We also fire 'error' events when event handler attributes contain syntax errors (@simonwuelker, #43178).
We've improved the default appearance of <summary> (@Loirooriol, #43111), <select> (@lukewarlow, #43175), <input type=file> (@lukewarlow, @AlexVasiluta, @lukewarlow, #43498, #43186), and <textarea> and <input type=text> and friends (@mrobinson, #43132), plus '::marker' in mixed LTR/RTL content (@Loirooriol, #43201). <select> also now requires user interaction to open the picker (@SharanRP, #43485).
<form action>, <iframe src>, open(url) on XMLHttpRequest, new EventSource(url), and new Worker(url) now correctly resolve the URL with the page encoding (@SharanRP, @jdm, @jayant911, @Veercodeprog, @sabbCodes, #43521, #43554, #43572, #43537, #43634, #43588).
'direction' now works on grid containers (@nicoburns, #42118), SVG images can now be used in 'border-image' (@shubhamg13, #42566), 'linear-gradient()' now dithers to reduce banding (@Messi002, #43603), 'letter-spacing' no longer applies to invisible zero-width formatting characters (@simonwuelker, #42961), and ':active' now matches disabled or non-focusable elements too, as long as they are being clicked (@webbeef, #42935).
DOMContentLoaded timings in PerformanceNavigationTiming are more accurate (@simonwuelker, #43151). PerformancePaintTiming and LargestContentfulPaint are more accurate too, taking <iframe> into account (@shubhamg13, #42149), and checking for and ignoring things like broken images and transparent backgrounds (@shubhamg13, #42833, #42975, #43475).
We've improved the conformance of JS modules (@Gae24, #43585), <button command> (@lukewarlow, #42883), <font size> (@shubhamg13, #43103), <link media> and <link type> (@TimvdLippe, #43043), <option selected> (@SharanRP, #43582), <script integrity> and <style integrity> (@Gae24, #42931), EventSource (@mishop-15, #42179), SubtleCrypto (@kkoyung, #42984, #43315, #43533, #43519), Worker (@simonwuelker, #43329), HTMLVideoElement (@shubhamg13, #43341), dataset on Element (@TimvdLippe, #43046), and querySelector() and querySelectorAll() (@simonwuelker, #42991).
We've fixed bugs related to error reporting (@simonwuelker, @xZaisk, @yezhizhen, @eyupcanakman, #43191, #43323, #43101, #43560), event loops (@jayant911, #43523), focus (@jakubadamw, #43431), quirks mode (@mrobinson, @Loirooriol, @lukewarlow, #42960, #43368), <iframe> (@TimvdLippe, @jdm, #43539, #43732), the 'animationstart' and 'animationend' events (@simonwuelker, #43454), the 'touchmove' event (@yezhizhen, #42926), CanvasRenderingContext2D (@simonwuelker, #43218), Worker (@bruno-j-nicoletti, #43213), ':active' on <input> (@mrobinson, #43722), 'overflow: scroll' on '::before' and '::after' (@stevennovaryo, #43231), 'position: absolute' (@yoursanonymous, @Loirooriol, #43084), and <img> and <svg> without width or height attributes (@Loirooriol, #42666). Fixing that last bug led to Servo developers finding two spec issues!
We've landed partial support for using CSS counters in 'list-style-type' on 'display: list-item' and 'content' on '::marker', but the counter values themselves are not calculated yet, so all list items still read as 0. or similar. In any case, you can use a <counter-style-name> or 'symbols()' in 'list-style-type', and 'counter()' and 'counters()' in 'content' (@Loirooriol, #43111).
We've also landed partial support for <marquee> and the HTMLMarqueeElement interface, including basic layout, but the contents are not animated yet (@mrobinson, @lukewarlow, #43520, #43610).
Servo now exposes several attributes that have no direct effect, but are needed for web compatibility (@lukewarlow, #43500, #43499, #43502, #43518):
- noHref on HTMLAreaElement
- hreflang, type, charset on HTMLAnchorElement
- useMap on HTMLInputElement and HTMLObjectElement
- longDesc on HTMLIFrameElement and HTMLFrameElement
Performance and stability
We've fixed sluggish scrolling on long documents like this page on docs.rs (@webbeef, @yezhizhen, #43074, #43138), and reduced the memory usage of BoxFragment by 10% (@stevennovaryo, #43056). about:memory now has a Force GC button (@webbeef, #42798), and no longer reports all processes as content processes in multiprocess mode (@webbeef, #42923).
Web fonts are no longer fetched more than once, and they no longer cause reflow when they fail to load (@minghuaw, #43382, #43595). We're also working towards better caching for shaping results (@mrobinson, @lukewarlow, @Loirooriol, #43653). Event handler attribute lookup is more efficient now (@Narfinger, #43337), and we've made DOM tree walking more efficient in many cases (@Narfinger, #42781, #42978, #43476).
crypto.subtle.encrypt(), decrypt(), sign(), verify(), digest(), importKey(), unwrapKey(), decapsulateKey(), and decapsulateBits() are more efficient now (@kkoyung, #42927), thanks to a recent spec update.
More of Servo now uses cheaper crossbeam channels instead of IPC channels, unless Servo is running in multiprocess mode, or avoids IPC altogether (@Narfinger, @jschwe, @Taym95, #42077, #43309, #42966). We've also reduced clones, allocations, conversions, comparisons, and borrow checks in many parts of Servo (@simonwuelker, @kkoyung, @mrobinson, @Narfinger, @yezhizhen, @TG199, #43212, #43055, #43066, #43304, #43452, #43717, #43780, #43088, #43226).
DOM data structures (#[dom_struct]) can refer to one another, with the help of garbage collection. But when DOM objects are being destroyed, those references can become invalid for a brief moment, depending on the order the GC finalizers run in. This can be unsound if those references are accessed, which is a very easy mistake to make if the type has an impl Drop. To help prevent that class of bug, we're reworking our DOM types so that none of them have #[dom_struct] and impl Drop at the same time (@willypuzzle, #42937, #42982, #43018, #43071, #43222, #43288, #43544, #43563, #43631).
We've fixed a crash caused by an IPC resource leak when making many requests over time (@yezhizhen, #43381), and some bugs found by ThreadSanitizer and --debug-mozjs (@jdm, @Loirooriol, #42976, #42963, #43487). We've also fixed crashes in CanvasRenderingContext2D (@yezhizhen, #43449), Crypto (@rogerkorantenng, #43501), devtools (@simonwuelker, #43133), event handler attributes (@simonwuelker, #43178), Promise (@Narfinger, @jdm, #43470), and WebDriver (@Tarmil, @yezhizhen, #42739, #43381).
We've continued our long-running effort to use the Rust type system to make certain kinds of dynamic borrow failures impossible (@Narfinger, @Gae24, @Uiniel, @TimvdLippe, @yezhizhen, @sagudev, @PuercoPop, @pylbrecht, @arabson99, @jayant911, #42957, #43108, #43130, #43215, #43183, #43219, #43245, #43220, #43252, #43268, #43184, #43277, #43278, #43284, #43302, #43312, #43348, #43327, #43362, #43365, #43383, #43432, #43259, #43439, #43473, #43481, #43480, #43479, #43525, #43535, #43543, #43549, #43570, #43571, #43569, #43579, #43584, #43657, #43713).
Thanks to a wide range of people, many of whom were contributing to Servo for their first time, we've also landed a bunch of architectural improvements (@elomscansio, @mukilan, #43646), cleanups (@simartin, @SharanRP, @TG199, @sabbCodes, @niyabits, @eerii, @atbrakhi, #43276, #43285, #43532, #43778, #43771, #43566, #43567, #43587, #43140, #43316), and refactors (@sabbCodes, @arabson99, @jayant911, @StaySafe020, @saydmateen, @eerii, @TimvdLippe, @elomscansio, @CynthiaOketch, #43614, #43641, #43619, #43642, #43623, #43656, #43644, #43672, #43664, #43676, #43684, #43679, #43678, #43655, #43675, #43731, #43729, #43728, #43740, #43751, #43748, #43747, #43752, #43745, #43724, #43723, #43765, #43767, #43181, #43269, #43270, #43279, #43437, #43597, #43607, #43602, #43616, #43609, #43612, #43647, #43651, #43662, #43714, #43774).
Donations
Thanks again for your generous support! We are now receiving 7167 USD/month (+2.6% from February) in recurring donations. This helps us cover the cost of our speedy CI and benchmarking servers, one of our latest Outreachy interns, and funding maintainer work that helps more people contribute to Servo.
Servo is also on thanks.dev, and already 37 GitHub users (+5 from February) that depend on Servo are sponsoring us there. If you use Servo libraries like url, html5ever, selectors, or cssparser, signing up for thanks.dev could be a good way for you (or your employer) to give back to the community.
We now have sponsorship tiers that allow you or your organisation to donate to the Servo project with public acknowlegement of your support. If you're interested in this kind of sponsorship, please contact us at join@servo.org.
Use of donations is decided transparently via the Technical Steering Committee's public funding request process, and active proposals are tracked in servo/project#187. For more details, head to our Sponsorship page.
30 Apr 2026 12:00am GMT
The Rust Programming Language Blog: Announcing Google Summer of Code 2026 selected projects
As previously announced, the Rust Project is participating in Google Summer of Code (GSoC) 2026. GSoC is a global program organized by Google that is designed to bring new contributors to the world of open source.
A few months ago, we published a list of GSoC project ideas, and started discussing these projects with potential GSoC applicants on our Zulip. We had many interesting discussions with the potential contributors, and even saw some of them making non-trivial contributions to various Rust Project repositories before GSoC officially started!
The applicants prepared and submitted their project proposals by the end of March. This year, we received 96 proposals, which is a 50% increase from last year. We are glad that there was again a lot of interest in our projects! Like many other GSoC organizations this year, we somewhat struggled with some AI-generated proposals and low-quality contributions generated using AI agents, but it stayed manageable.
GSoC requires us to produce an ordered list of the best proposals, which is always challenging, as Rust is a big project with many priorities. Our mentors examined the submitted proposals and evaluated them based on their prior interactions with the given applicant, their contributions so far, the quality of the proposal itself, but also the importance of the proposed project for the Rust Project and its wider community. We also had to take mentor bandwidth and availability into account. Unfortunately, we had to cancel some projects due to several mentors losing their funding for Rust work in the past few weeks.
As is usual in GSoC, even though some project topics received multiple proposals1, we had to pick only one proposal per project topic. We also had to choose between proposals targeting different work to avoid overloading a single mentor with multiple projects. In the end, we narrowed the list down to the best proposals that we could still realistically support with our available mentor pool. We submitted this list and eagerly awaited how many of them would be accepted into GSoC.
Selected projects
On the 30th of April, Google has announced the accepted projects. We are happy to share that 13 Rust Project proposals were accepted by Google for Google Summer of Code 2026. That is a lot of projects! We are really happy and excited about GSoC 2026!
Below you can find the list of accepted proposals (in alphabetical order), along with the names of their authors and the assigned mentor(s):
- A Frontend for Safe GPU Offloading in Rust by Marcelo Domínguez, mentored by Manuel Drehwald
- Adding WebAssembly Linking Support to Wild by Kei Akiyama, mentored by David Lattimore
- Bringing autodiff and offload into Rust CI by Shota Sugano, mentored by Manuel Drehwald
- Debugger for Miri by Mohamed Ali Mohamed, mentored by Oli Scherer
- Implementing impl and mut restrictions by Ryosuke Yamano, mentored by Jacob Pratt and Urgau
- Improving Ergonomics and Safety of serialport-rs by Tanmay, mentored by Christian Meusel
- libc: transition differing bit-width time and offset variants and deprecate bug-prone constants by Adam Martinez, mentored by Trevor Gross
- Link Linux kernel and its Modules with Wild by Vishruth Thimmaiah, mentored by David Lattimore
- Migrating rust-analyzer assists to SyntaxEditor by Shourya Sharma, mentored by Chayim Refael Friedman and Lukas Wirth
- Port std::arch test suite to rust-lang/rust by Sumit Kumar, mentored by Jakub Beránek and Folkert de Vries
- Reorganizing tests/ui/issues by Matthew, mentored by Teapot and Kivooeo
- Utilize debugger APIs to improve debug info test accuracy and error reporting by Anthony Bolden, mentored by Jakub Beránek and Jieyou Xu
- XDG path support for rustup by Guicheng Liu, mentored by rami3l
Congratulations to all applicants whose project was selected! Our mentors are looking forward to working with you on these exciting projects to improve the Rust ecosystem. You can expect to hear from us soon, so that we can start coordinating the work on your GSoC projects.
We are excited to mentor three contributors who already experienced GSoC with us in the previous year. Welcome back, Kei, Marcelo and Shourya!
We would like to thank all the applicants whose proposal was sadly not accepted, for their interactions with the Rust community and contributions to various Rust projects. There were some great proposals that did not make the cut, in large part because of limited mentorship capacity. However, even if your proposal was not accepted, we would be happy if you would consider contributing to the projects that got you interested, even outside GSoC! Our project idea list is still current and could serve as a general entry point for contributors that would like to work on projects that would help the Rust Project and the Rust ecosystem. Some of the Rust Project Goals are also looking for help.
There is a good chance we'll participate in GSoC next year as well (though we can't promise anything at this moment), so we hope to receive your proposals again in the future!
The accepted GSoC projects will run for several months. After GSoC 2026 finishes (in autumn of 2026), we will publish a blog post in which we will summarize the outcome of the accepted projects.
-
The most popular project topic received fourteen different proposals! ↩
30 Apr 2026 12:00am GMT
29 Apr 2026
Planet Mozilla
Firefox Tooling Announcements: MozPhab 2.14.0 Released
Bugs resolved in Moz-Phab 2.14.0:
- bug 2032102 Parallelize revision creation and diff property calls in submit for faster stack submission
Discuss these changes in #engineering-workflow on Slack or #Conduit Matrix.
1 post - 1 participant
29 Apr 2026 4:15am GMT
This Week In Rust: This Week in Rust 649
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
Newsletters
Project/Tooling Updates
- lean-ctx: A Context Runtime for AI Coding Agents
- Zed is 1.0
- Niri v26.04
- Announcing Symposium
- menhera-cooldown: The crates.io Cooldown Proxy
- cargo-cooldown 0.3.0: a Cargo wrapper for supply-chain cooldowns
- Nutype 0.7.0
- AimDB: Reactive Pipelines as the Engine of the Data-First Architecture
- pyscan v2.1.0: Python Dependency Vulnerability Scanner
- flodl 0.5.3
- Blade XR Asteroids
Observations/Thoughts
- Bugs Rust Won't Catch
- A Gopher Meets a Crab
- Using Rust to Build a $1 Handheld Gaming Console
- All databases will eventually be (re)written in Rust
- [video] Rust India Conference 2026 - Full Talk Recordings
- [audio] Helsing with Jon Gjengset
Rust Walkthroughs
- Build a JSON Parser in Rust from Scratch
- device-envoy-esp: Making Embedded ESP32 Fun: With Rust, Embassy, and Composable Device Abstractions
- Rust Projects - Write a Redis Clone - Version 2.0.0
- [video] Rust Parallelism with Rayon - Use ALL CPUs
Research
Miscellaneous
Crate of the Week
This week's crate is dithr, a buffer-first dithering and halftoning library.
Thanks to pbkx 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.
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.
- EuroRust 2026| 2026-05-04 (extended) | Barcelona, Spain | 2026-10-14 - 2026-10-17
- NDC Techtown | 2026-05-03 | Kongsberg, Norway | 2026-09-21 to 23.
- Scientific Computing in Rust 2026| 2026-06-05 | Virtual | 2026-07-08 - 2026-07-10
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
480 pull requests were merged in the last week
Compiler
AliasTermrefactor- add
on_unmatch_argsdiagnostic attribute - eliminate
CrateMetadataRef - fix performance regression introduced in #142531 by excluding
Storage{Live,Dead}from CGU size estimation - prefer
-1forNone - prevent deref coercions in
pin! - streamline
CrateMetadataRefconstruction inprovide_one!
Library
- constify
Veccomparisons - exposing Float Masks
- fix heap overflow in
slice::joincaused by misbehaving Borrow - generalize IO Traits for
Arc<T>where&T: IoTrait - maintain
CStringArraynull-termination even ifVec::pushpanics - move
std::io::RawOsErrortocore::io - implement more traits for field-representing types
Cargo
- clean: do not error if explicitly specified target-dir does not exist
compile: stabilizebuild.warningscompile: ignore unused deps if also transitivecompile: Log all ignored unused externs
Clippy
manual_assert_eq: new lint- new module style lint:
inline_modules needless_ifs: handle vertical tab as whitespace to avoid false negativeinline_modules: fix the rust version the lint was introduced in- make
unused_format_specscatch width issues - fix
from_over_intofalse positive with conflicting blanket From impl - fix wrong
question_marksuggestion when match arm body is a destructuring assignment
Rust-Analyzer
- add .new postfix completion based on expected type (rust-lang/r…
- add
unwrap_block, offerunwrap_blockandunwrap_branch - handle if
matches!()forreplace_if_let_with_match - offer on compound assign for
replace_arith_op - offer on non-block matcharm for
unwrap_branch - when renaming a field, rename variables in constructors as well
- fix trait auto import appearing again when trait already been imported as
_ - avoid prelude paths when
imports.preferPreludeis false - define the ABI of functions inside extern blocks as the ABI of the extern block
- fix closure capture hints being misplaced for async closures
- generate-method skips trait impl blocks when picking insertion site
- keep the same nonce when cloning a
RootDatabase - make
InferenceResult::binding_mode()fallible - mark
enumvariants as deprecated when their parentenumis deprecated - no complete where kw after qualified path
- offer on
!forapply_demorgan_iterator - offer on
is_some_andetc. forapply_demorgan_iterator - parse
return #[attr] expr - parse impl restrictions after the visibility
- pass
proc_macro_cwdtoAnalysis::from_single_file() - suppress infer vars in monomorphization
- migrate replace qualified name with use to SyntaxEditor
- perf: optimize allocation strategies of output/parser/event
- remove generate impl non syntax factory variant
Rust Compiler Performance Triage
Relatively few perf-affecting changes this week. Perf report is more positive than users should see due to the -Zincremental-verify-ich related improvements in #155473.
Triage done by @simulacrum. Revision range: 9ab01ae5..ca9a134e
1 Regression, 5 Improvements, 3 Mixed; 3 of them in rollups 32 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:
- No RFCs were approved 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
- Consider
Result<T, Uninhabited>andControlFlow<Uninhabited, T>to be equivalent toTfor must use lint - Switch the destructors implementation for thread locals on Windows to use FLS
- Stabilize
VecDeque::truncate_front - Derives
Copyforffi::FromBytesUntilNulError - Tracking Issue for ExitCodeExt on Windows
- remove forever-deprecated and hidden
f64methods
- Make stable hashing names consistent
- replace
box_patternsin the compiler withderef_patterns - Create a new Tier 3 target:
powerpc64le-unknown-none
- RFC: Inheriting of
default-featuresin Cargo - Rust Foundation Maintainer Fund
- build-std: explicit dependencies
No Items entered Final Comment Period this week for Language Reference, 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
Upcoming Events
Rusty Events between 2026-04-29 - 2026-05-27 🦀
Virtual
- 2026-04-29 | Virtual (Girona, ES) | Rust Girona
- 2026-05-01 | Virtual (Nürnberg, DE) | Rust Nuremberg
- 2026-05-02 | Virtual (Kampala, UG) | Rust Circle Meetup
- 2026-05-03 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2026-05-05 | Virtual (Tel Aviv-yafo, IL) | Code Mavens 🦀 - 🐍 - 🐪
- 2026-05-06 | Virtual (Cardiff, UK) | Rust and C++ Cardiff
- 2026-05-06 | Virtual (Girona, ES) | Rust Girona
- 2026-05-06 | Virtual (Indianapolis, IN, US) | Indy Rust
- 2026-05-07 | Virtual (Berlin, DE) | Rust Berlin
- 2026-05-07 | Virtual (Nürnberg, DE) | Rust Nuremberg
- 2026-05-12 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2026-05-12 | Virtual (London, UK) | Women in Rust
- 2026-05-17 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2026-05-19 | Virtual (Washington, DC, US) | Rust DC
- 2026-05-20 | Hybrid (Vancouver, BC, CA) | Vancouver Rust
- 2026-05-20 | Virtual (Girona, ES) | Rust Girona
- 2026-05-21 | Hybrid (Seattle, WA, US) | Seattle Rust User Group
- 2026-05-21 | Virtual (Berlin, DE) | Rust Berlin
- 2026-05-21 | Virtual (Charlottesville, VA, US) | Charlottesville Rust Meetup
- 2026-05-26 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2026-05-26 | Virtual (London, UK) | Women in Rust
- 2026-05-27 | Virtual (Girona, ES) | Rust Girona
Asia
- 2026-05-13 | Malaysia, MY | Rust Meetup Malaysia
- 2026-05-16 | Bangalore, IN | Rust Bangalore
Europe
- 2026-04-29 | Copenhagen, DK | Copenhagen Rust Community
- 2026-04-29 | Paris, FR | Paris Rustaceans
- 2026-04-30 | Berlin, DE | Rust Berlin
- 2026-04-30 | Manchester, GB | Rust Manchester
- 2026-05-02 | Augsburg, DE | Rust Munich and Rust Augsburg
- 2026-05-04 | Amsterdam, NH, NL | Rust Developers Amsterdam Group
- 2026-05-04 | Frankfurt, DE | Rust Rhein-Main
- 2026-05-05 | Olomouc, CZ | Rust Moravia
- 2026-05-06 | Milano, MI, IT | Rust Language Milan
- 2026-05-06 | Oxford, UK | Oxford ACCU/Rust Meetup.
- 2026-05-07 | Edinburgh, UK | Rust and Friends
- 2026-05-13 | Girona, ES | Rust Girona
- 2026-05-14 | Switzerland, CH | PostTenebrasLab
- 2026-05-18 - 2026-05-23 | Amsterdam, NL | RustWeek 2026
- 2026-05-19 | Aarhus, DK | Rust Aarhus
- 2026-05-19 | Leipzig, DE | Rust - Modern Systems Programming in Leipzig
- 2026-05-19 | London, UK | Women in Rust
- 2026-05-21 | Amsterdam, NL | RustNL
- 2026-05-22 | Amsterdam, NL | RustNL
- 2026-05-26 | Dortmund, DE | Rust Dortmund
- 2026-05-26 | Manchester, UK | Rust Manchester
North America
- 2026-04-30 | Atlanta, GA, US | Rust Atlanta
- 2026-04-30 | Mountain View, CA, US | Hacker Dojo
- 2026-05-02 | Boston, MA, US | Boston Rust Meetup
- 2026-05-07 | Saint Louis, MO, US | STL Rust
- 2026-05-09 | Boston, MA, US | Boston Rust Meetup
- 2026-05-14 | Portland, OR, US | PDXRust
- 2026-05-14 | San Diego, CA, US | San Diego Rust
- 2026-05-16 | Boston, MA, US | Boston Rust Meetup
- 2026-05-19 | San Francisco, CA, US | San Francisco Rust Study Group
- 2026-05-20 | Hybrid (Vancouver, BC, CA) | Vancouver Rust
- 2026-05-20 | San Francisco, CA, US | Bay Area Rust Meetup
- 2026-05-21 | Hybrid (Seattle, WA, US) | Seattle Rust User Group
- 2026-05-21 | Nashville, TN, US | Music City Rust Developers
- 2026-05-23 | Boston, MA, US | Boston Rust Meetup
- 2026-05-27 | Austin, TX, US | Rust ATX
Oceania
- 2026-05-14 | Melbourne, AU | Rust Melbourne
- 2026-05-26 | Barton, AC, AU | Canberra Rust User Group
South America
- 2026-05-13 | Montevideo, UY | Rust Meetup Uruguay
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
Sometimes, the best projects are the ones you never thought you could build.
Another week bereft of any quote suggestions. llogiq is glad to have found this anyway.
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
29 Apr 2026 4:00am GMT
28 Apr 2026
Planet Mozilla
Mozilla Data YouTube Channel: Glean Dictionary Looker Demo
A quick demonstration of the Glean Dictionary's new integration with Mozilla's instance of Looker.
28 Apr 2026 9:37pm GMT
Firefox Tooling Announcements: MozPhab 2.13.1 Released
Bugs resolved in Moz-Phab 2.13.1:
- bug 2033054 Add
AGENTS.md/CLAUDE.mdfor moz-phab - bug 2034269 reorg --force aborts on abandoned-revision ghost links in stackGraph
Discuss these changes in #engineering-workflow on Slack or #Conduit Matrix.
1 post - 1 participant
28 Apr 2026 7:40pm GMT
Jonathan Almeida: Rebase all WIPs to the latest upstream head
A small pet-peeve with fetching the latest main on jujutsu is that I like to move all my WIP patches to the new one. That's also nice because jj doesn't make me fix the conflicts immediately!
The solution from a co-worker (kudos to skippyhammond!) is to query all immediate decendants of the previous main after the fetch.
jj git fetch
# assuming 'z' is the rev-id of the previous main.
jj rebase -s "mutable()&z+" -d main
I haven't learnt how to make aliases accept params with it yet, so this will have to do for now.
Update: After a bit of searching, it seems that today this is only possible by wrapping it in a shell script. Based on the examples in the jj documentation an alias would look like this:
Update 2: After some months of usage across multiple repositories, I've found it better to be clear with the destination since main, trunk or others can be tracked with a combination of repository aliases too.
[aliases]
# Update all revs to the latest main; point to the previous one.
hoist = ["util", "exec", "--", "bash", "-c", """
set -euo pipefail
jj rebase -s "mutable()&$1+" -d "$2"
""", ""]
You can use this to rebase all your WIPs like so:
$ jj hoist <prev_main> <current_main>
If my previous main revision was kz, this is what I would end up doing:
$ jj fetch origin
$ jj hoist kz main@origin
28 Apr 2026 6:00pm GMT
27 Apr 2026
Planet Mozilla
Thunderbird Blog: Thunderbird Pro April 2026 Update

One of the most exciting aspects of bringing Thunderbird Pro to life is the opportunity to build an email service from Thunderbird together with our community, giving users the control and freedom they expect without relying on third party email service providers.
Over the past few months, we've been checking in with our community through quick surveys, and the feedback is clear: people care most about Thundermail. We're listening and working to deliver what you expect as quickly as possible, focusing our resources on building a great Thundermail experience first, with Appointment and Send as power features alongside that foundation. We're also adjusting the initial price to better align with your expectations.
We'll be sending out the first wave of Early Bird Beta invites next month. If you haven't already, please join the waitlist HERE and keep an eye on your inbox. We're excited to get Thundermail into your hands and continue building it together.
Latest Thundermail Developments
Our work right now is focused on making Thundermail reliable, easy to set up, and ensuring a smooth onboarding experience with an intuitive design, both visually and functionally.
Sign-in and Setup
A new connection flow is in development that will make it much easier to add a Thundermail account to Thunderbird, including options like QR code setup and deeper integration within the app. We have also fixed a range of sign in issues, improved domain setup, and made it easier to move from account creation to actually using the service.

The account dashboard has been updated for a cleaner look, smoother onboarding, and easier access to the key details our users care about. Configuring settings like app passwords, custom domains and aliases are now front and center when you first sign in.
Infrastructure
On the infrastructure side, we're continuing to improve stability and performance. This includes completed work on upgrading Stalwart to strengthen spam detection so legitimate emails are far less likely to end up in spam, along with improvements to how we monitor the services so problems are easier to catch and less likely to affect users. Everyday actions like archiving and managing settings should feel more intuitive for users, and the web app, add-ons, and related services now work together more smoothly.
April Onward
- Next up for the account experience is better alias and custom-domain handling, and even better integration between Thunderbird and the web account flow.
- The dashboard is also getting another round of refinement so settings, account details, and subscription information are easier to understand at a glance.
- Thundermail work continues by focusing on reliability and security, including aliases, delivery, transport security, and admin access controls.
- There will also be a final layer of polish across the entire experience between the web app, add-on, and desktop flows.
- Finally: Webmail is moving up our priority list. While still early, development is actively progressing and we're aiming to bring a usable experience much sooner than originally planned.
Progress on Appointment and Send
While Thundermail is our primary focus, work on other Thunderbird Pro services is continuing.
For Appointment, we've made progress on reliability and backend performance, including improvements to how calendar tasks are processed and fixes to event handling. Our priorities heading up to the release are also focused on reliability, with refinement on calendar connections, event syncing, Zoom access, and a simpler first-time setup flow.
For Send, we've made substantial visual improvement so that it feels like a more natural part of Thunderbird Pro. We've also made a number of security improvements and are continuing to evaluate infrastructure choices to ensure long term reliability. Our priorities for Send in the coming months include better encryption-key handling and clearer password-protected downloads.

What's Next
We'll begin inviting people from the waitlist into the Early Bird beta shortly. If you haven't signed up yet, now's the time. Your feedback will directly shape how Thundermail evolves.
For more up to date news, check out our services roadmap at: https://roadmaps.thunderbird.net/services/
If you want to get involved in the direction of these features or want to contribute ideas to the team, you can visit https://ideas.tb.pro/.
The post Thunderbird Pro April 2026 Update appeared first on The Thunderbird Blog.
27 Apr 2026 3:27pm GMT
Firefox Nightly: VPN, Split View, and Other Goodies – These Weeks in Firefox: Issue 200!
Highlights
- The VPN feature is rolling out to users in the United States, the United Kingdom, Germany and France! Read more about it here.
- Split View is now available for users on Firefox 149! Read more about it here.
- Improvements to tabs.move() split views support: extensions can now swap tabs within a split view, and passing a list of tabs that explicitly separates split-view members will properly unsplit the view to honor the requested ordering - Bug 2016762 / Bug 2022549
- Jeremy added the ability to copy all URLs from multi-selected tabs 1984362 - Share -> "Copy link" for multiselected tabs should copy all the tabs' information
- Alexandre Poirot [:ochameau] improved performance of the Inspector Rules view by supporting incremental updates, making some perf test 2 times faster (#2018538)
- The Tab Notes feature is now live in Firefox 149 in Firefox Labs! We have a few tweaks and fixes coming in Firefox 150 and 151, but we're mostly collecting feedback from users.
Friends of the Firefox team
Resolved bugs (excluding employees)
Script to find new contributors from bug list
Volunteers that fixed more than one bug
- Chris Vander Linden
- EJiro Oghenekome
- Keji Bakare
- konyhéa
- Noble Chinonso
- Pranjali Srivastava
- Sameeksha
New contributors (🌟 = first patch)
- 🌟Ben
- Bug 1705177 - Don't use fixed width for Add Device Save/Cancel buttons. R?nchevobbe!
- 🌟Chidimma Okoloigwe
- Bug 1901274 - Port over tests from browser/base/content/test/sidebar to browser/components/sidebar
- Japandi
- Bug 2015071 - Do not save tab note when input contains only whitespace. R?sthompson
- 🌟DrSeed
- Bug 1982888 - Remove obsolete sidebar Nimbus var r=nsharpley,sfoster
- 🌟EJiro Oghenekome
- Bug 1910902 - Update sidebar icons and references to use collapsed versions. r=nsharpley
- Bug 1938466 - Add tests for View > Sidebar menu items and checked state. r=jsudiaman
- Bug 1952061 - Refactor sidebar state management: rename loadInitialState to loadCurrentState and update related references. r=nsharpley
- 🌟Keji Bakare
- Bug 2006572 - fix right tab name and icon shift when the Split View is selected
- Bug 2025287 - Hide "Open Link in Split View" menu option for pinned tabs.
- 🌟Hailia
- Bug 2016934 - Update copied profile header with typographic quotes r?jhirsch
- geppy
- Bug 1767617 - Rename -theme-graphs-* CSS variables r?nchevobbe
- 🌟Itoro James
- Bug 1936929 - Document the ::%shadow% and ::%document% anchor selector tokens r?nsharpley,hanna_a
- 🌟konyhéa
- Bug 1856191 - don't restrict the sidebar width so much (better support non-English locales)
- konyhéa
- Bug 1876108 - add hairline separator between synced tabs device lists in firefox view
- Bug 1891970 - Update firefoxview breakpoint to 950px
- Bug 2014334 - add outline to tab-split-view-wrapper when used as a drag group target
- 🌟Noble Chinonso
- Bug 1945835 - Add timestamp display to synced tabs list
- Bug 1953621 - Fix command property type in SidebarStateProps from boolean to string
- Bug 2019235 - Disable Move to Start/End for split view tabs based on tab position
- Bug 2025701 - Fix mismatched closing tag in syncedtabs-tab-list.mjs itemTemplate
- Knot False
- Bug 1773932 - Remove nsIScriptableUnicodeConverter from services/common/utils.sys.mjs. r=skhamis,markh
- 🌟Pranjali Srivastava
- Bug 1874155 Remove browser.firefox-view
- Bug 2009917 - Added proper spacing
- 🌟Chukwuka Rosemary
- Bug 1846829 - Remove the max-history-rows pref used in Fx View
- 🌟Sameeksha
- Bug 2008178 - Add accessible name to ConfirmDialog using aria-labelledby. r=thecount
- Bug 2021421 - Remove redundant lazy preference getters in sidebar-pins-promo.mjs
- kofoworola shonuyi
- Bug 2019901 : Remove sidebar-ongoing-animations attribute from sidebarMain after animation reset.
- 🌟Oluwatobi
- Bug 2019936 - Remove preference configuration for the IE importer feature. r=nsharpley,kcochrane,mconley
Project Updates
Add-ons / Web Extensions
Addon Manager & about:addons
- Fixed a long-standing issue where extension paths stored in extensions.json (and addonStartup.json.lz4) became incorrect after restoring a Firefox profile to a different location and causing all previously installed add-ons to fail to load - Bug 1429838
DevTools
- geppy renamed some of our CSS variables to be more explicit (#1767617)
- Sebastian Zartner [:sebo] move the :visited pseudo-class to element-specific section in the Inspector pseudo-class (:hov) panel (#2017985)
- Ben improved the RDM "Add Custom Device" form by making sure it worked for any kind of locale (#1705177)
- Chris Vander Linden continued his work to migrate files to use actual private fields (#2022400, #2022402, #2022403, #2022405, #2022406, #2022407)
- Dana Keeler (she/her) [:keeler] added a distinct icon to Netmonitor requests when a request uses a certificate issued by a third-party root (#2022693)
- Nicolas Chevobbe [:nchevobbe] added a <global> node on objects which are not from the top-level debugged page (it's always visible in the browser console/browser toolbox) (#1962343)
- Nicolas Chevobbe [:nchevobbe] added possible anchor names to the autocomplete for the position-anchor property, as well as for the anchor() and anchor-size() functions (#1903278, #2023114, #2023576)
- Nicolas Chevobbe [:nchevobbe] added proper autocomplete (including things like interpolation/color space) for linear-gradient() (and repeating-linear-gradient()) (#2025761)
- Leo McArdle [:leo] fixed an issue in the Inspector Fonts panel Weight input (#1578023), and made sure we properly round displayed values (#1465026, #1578022, #2013940)
- Nicolas Chevobbe [:nchevobbe] made the animation speed drop down to be always visible in the animations panel (#1995485)
- it now impacts all the animations in the page, not only the ones in the subtree of the selected node
- Julian Descottes [:jdescottes] fixed frequent DevTools crashes by avoiding to access properties on remote proxy windows in various places (#2026134)
WebDriver
- Khalid AlHaddad refactored the WebDriver BiDi tests by moving the "wait_for_bidi_events" helper to a fixture.
- Henrik Skupin splitted fixtures and helpers for WebDriver classic and BiDi into protocol-specific folders and improved Marionette's window manipulation logic for Wayland headless/headful jobs.
- Henrik Skupin added support for "altitudeAngle" and "azimuthAngle" in pointer actions of subtype "touch" to both Marionette and WebDriver BiDi.
- Julian Descottes fixed browsingContext.reload to properly reload iframes and simulate more accurately a user-initiated reload.
- Alexandra Borovova updated "log.entryAdded" events to include top-most frame of the stacktrace for all types of Console APIs.
- Alexandra Borovova updated the handling of shutdown requests to make sure that all active downloads are canceled before to not block the actual browser shutdown.
Lint, Docs and Workflow
- Globals handling within VS Code (and maybe other editors) has been improved to avoid caching globals when the source file for the globals has been updated.
- The main impact of this is that when changing globals in head.js files, VS Code'S ESLint reporting will see the changes when you have the test files open that use the head.js file.
New Tab Page
- Irene Ni updated the Shortcuts UI to Nova, refreshing about:newtab shortcuts with the new design system and improved focus states.
- Irene Ni made it possible to increase shortcuts row count from 8 to 10 for Nova, which will let users pin two more sites per row without scrolling.
- Hanna Alemu built the UI code for asrouter-newtab-message, enabling ASRouter-driven new tab messages controlled via remote config.
- Dre fixed some New Tab keyboard navigation bugs, restoring predictable Tab/Arrow traversal across tiles, cards, and the customization controls.
- Nathan Barrett fixed a persistence bug where Weather, Shortcuts, and Recommended Stories couldn't be disabled after restart while New Tab was focused, ensuring section toggles reliably save and apply across restarts.
- Sameeksha added an accessible name to the 'Delete from History' dialog in Recent Activity, allowing screen readers to announce the dialog title and purpose.
- Maxx Crawford labeled the Detailed view menu button for accessibility, making the control discoverable to assistive tech.
- Maxx Crawford made the 'See full forecast' link keyboard-focusable in Detailed view, improving navigation without a mouse.
- Reem Hamoui conveyed high/low temperatures to screen readers in the Detailed view, exposing key weather info non-visually.
- Reem Hamoui added alternative text for hourly forecast graphics, enabling meaningful announcements instead of unlabeled images.
- Maxx Crawford fixed fluent-dom handling so a br element is preserved in newtab-topsites-add-shortcut-label, restoring the intended line break in the Add Shortcut label.
Search and Urlbar
- Dao and Moritz worked on follow ups and fixed several bugs related to the new search bar implementation, which shipped in Fx 149 (2026248, 2023611, 2025746, 2022159, 2022809, 2023656, 2023141)
- Mandy added a new `hasBeenUsed` attribute to search engines to enable better messaging system targeting (2024078)
- Mandy also added a new telemetry category for when search mode is activated via a feature callout (2018806)
- Drew and Daisuke are continuing their work on making Nova updates to the urlbar (2019165)
- Dale fixed two bugs related to the new Unified Trust Panel (2019928, 2013044)
- Florian used Claude to fix intermittent bugs related to urlbar and search telemetry (2009767, 2024301)
- James fixed a high frequency intermittent test failure in the urlbar code (2001962)
- Marco fixed a high frequency intermittent test failure in the places database code (1981199)
Tab Groups
DJ is adding the ability to copy all URLs from the tabs in a tab group 1984338 - Add a way to share/send/copy all tabs urls from a given tab group
27 Apr 2026 2:21pm GMT









