20 Jun 2025
Planet Mozilla
Mozilla Thunderbird: Thunderbird Mobile Progress Report: May 2025
Thunderbird for iOS
We're growing a few more stars! We're so happy to hear there is great interest in Thunderbird for iOS, and hope to reach a stage soon where you all can be more involved. Thank you, also, to those of you who've submitted an increasing number of ideas via Mozilla Connect.
Todd has been preparing the JMAP implementation for iOS, which will allow us to test the app with real data. We're exploring the possibility of releasing the first community TestFlight a bit earlier by working directly with in-memory live data instead of syncing everything to a database upfront. The app may crash if your inbox has 30GB of email, but this approach should help us iterate more quickly. We still believe offline-first is the right path, and designing a database that supports this will follow soon after.
Further we've set up the initial localization infrastructure. This was surprisingly easy using Weblate's translation propagation feature. We simply needed to add a new component to our Android localization project that pulls from the iOS repository. While Weblate doesn't (yet?) auto-propagate when the component is set up, if there are changes across iOS and Android in the future, the strings will automatically apply to both products.
Thunderbird for Android
We spent a lot of time thinking about the beta and making adjustments. Fast forward to June, we're still experiencing a number of crashes. If you are running the beta, please report crashes and try to find out how to trigger them. If you are not using Beta, please give it a try and report back on the beta list or issue tracker. We'd greatly appreciate it! Here are a few updates worth noting for the month of May:
- Some folks on beta may have noticed the "recipient field contains incomplete input" error which kept you from sending emails. We've noticed as well, and halted the rollout of 11.0b1 on app stores where supported. Shamim fixed this issue for 11.0b2.
- Another important issue was when attaching multiple issues, only one image would be attached. This happens all the way back to 10.0, and we'll release a 10.1 that includes this fix. Again thank you to Shamim!
- Final round of fixes from Shamim: new mail notifications can be disabled again, we have a bunch of new tests and refactoring, we have a few new UI types for the new preference system that Wolf created.
- Timur Erofeev solved a crash on Android 7 due to some library changes in dependency updates we didn't anticipate
- Wolf is getting closer to finishing the drawer updates that we're excited to share in a beta soon. He has also been working diligently to remove some of the crashes we've been experiencing on beta due to the new drawer and some of the legacy code it needs to fall back to. Finally, as we're venturing into Thunderbird for iOS, Wolf has been thinking about the KMP (Kotlin Multiplatform) approach and added support to the Thunderbird for Android repository. He will soon separate a simple component and set things up so we can re-use it from Thunderbird for iOS.
- Rafael and Marcos have fixed some issues with the system bar appearing transparent. The issue has been very persistent, we're still getting reports of cases where this isn't yet resolved.
- Philipp has fixed an issue for our release automation to make sure the changelog doesn't break on HTML entities.
I also wanted to highlight the new Git Commit Guide that Wolf created to give us a little more stability in our commits and set expectations for pull requests. We have a few more docs coming up in June, stay tuned.
You could be on this list next month, please get in touch if you'd like to help out!
-
Philipp Kewisch (he/him)
Thunderbird Mobile Engineering | Mozilla Thunderbird
The post Thunderbird Mobile Progress Report: May 2025 appeared first on The Thunderbird Blog.
20 Jun 2025 2:47pm GMT
18 Jun 2025
Planet Mozilla
Firefox Nightly: Absolute Unit of an Update – These Weeks in Firefox: Issue 183
Highlights
- Henrik removed all the code related to our experimental CDP (Chrome DevTools Protocol) implementation for browser automation. We also published a fxdx.dev blog post to explain what this means for clients and end users.
- The unit converter has now been enabled by default in the address bar, starting in Firefox 141!
- e.g. 100 cm to inches, 1m to cm, 30 kg to lbs, 38 celsius in f
-
- Units include: angle, force, length, mass, temperature, timezone
- For other examples, see our automated tests here
- We're rolling out a change to the release channel this week or next which will remove the descriptive text for stories, to reduce clutter and visual noise. This is part of an ongoing effort to refine the look and feel of New Tab
Friends of the Firefox team
Resolved bugs (excluding employees)
Volunteers that fixed more than one bug
- Gregory Pappas [:gregp]
- Jonas Jenwald [:Snuffleupagus]
New contributors (🌟 = first patch)
- Anthony Mclamb: Bug 1967827 - Add moz-input-color link to customElements.js
- Brian Ouyang: Bug 1841773 - The link displayed after extension migration appears gray instead of blue as in Figma
- 🌟Chris Vander Linden: Bug 1888847 - DevTools Storage inspector cookie table rendering issue/misalignment with tall characters
- 🌟 gaastorgano: Bug 1911190 - Write a site-specific wrapper for kick.com that interprets a video duration of 0x40000000 as +Infinity
Project Updates
DevTools
- Chris Vander Linden fixed the Storage inspector table when it contains tall characters (#1888847)
- Roke Julian Lockhart changed the extension of exported logs from .txt to .log (#1969599)
- Masatoshi Kimura [:emk] fixed an issue in Netmonitor where responses containing multibyte characters would fail to be decoded (#1968766)
- Julien Wajsberg [:julienw] made about:debugging more enjoyable by automatically selecting the runtime page after the connection is done (#1968049)
- Holger Benl [:hbenl] fixed a few issues in the Responsive Design Mode toolbar (#1964126, #1968675, #1968677, #1968898)
- Alexandre Poirot [:ochameau] made "late" breakpoint (i.e. in unload event listener) to work for iframes (#1892411)
- Nicolas Chevobbe [:nchevobbe] fixed an issue where closing RDM would override the "Disable cache" setting in Netmonitor, even though the toolbox was still open (#1672473)
- Nicolas Chevobbe [:nchevobbe] fixed a couple Netmonitor crashes, when a JSON response was null (#1968257), and using the (re)send request panel (#1970248)
- Hubert Boma Manilla (:bomsy) improved performance by throttle some events in the parent process events on the server side (#1959452) (we were already doing it for content process events)
- Hubert Boma Manilla (:bomsy) fixed an issue in the webconsole "pinned-to-bottom" feature where the output could exit this state even though the user didn't scrolled up (#1966005)
WebDriver BiDi
- Thanks to :anutrix who removed the usage of six in testing/marionette/ directory.
- Julian updated the "browsingContext.navigate" and "browsingContext.reload" commands to wait for the `browsingContext.navigationCommitted` event when using the "wait" condition "none".
- Julian also implemented a new event "browsingContext.historyUpdated" which is emitted when using history.pushState/replaceState or document.open.
- Sasha added support for the "proxy" argument of the "browser.createUserContext" command. This allows clients to setup either a "direct" or "manual" proxy when creating a user context (ie Firefox Container). Support for additional proxy types will be added later on.
Lint, Docs and Workflow
- Hanna enabled Prettier for our CSS files 🎉
- We've now upgraded to ESLint v9.6.0. More version bumps coming soon.
- Kagami added a file name matching option to ESLint for service workers to set the globals correctly when the filename is *.serviceworker.(m)js
- :gerard-majax enabled the rejected words linter on Rust code.
Migration Improvements
New Tab Page
- We are planning on performing our first train-hop from Nightly 141 to Beta 140 next week. This train-hop will update Beta 140's New Tab to use the code from Nightly 141. This will not ride the trains, so Release 140 will still use the Release 140 New Tab.
- RelMan / QA is aware and will be testing both modes.
- This is mainly a test to ensure that New Tab can be updated this way.
- mconley also added some taskcluster jobs (currently Tier 3) that run Nightly New Tab's XPI and automated tests against Beta (and eventually Release)
- We've also in the early stages of an experiment for showing trending searches on New Tab
- This is one variant we're in the early stages of developing:
- This is another variant that's in its early stages:
Picture-in-Picture
- Thanks to gaastorgano, a volunteer contributor who provided a patch to make it so that kick.com live-streaming videos don't show outrageous video durations when opened in Picture-in-Picture
Search and Navigation
- Address Bar
- The search mode indication is now limited in width to avoid issues with search engines with long names.
- The search button in the address bar now has support for selection via mouse up.
- Places
- We transitioned browser/components/places to use the new moz-src: protocol.
Storybook/Reusable Components/Acorn Design System
- New component: moz-breadcrumb-group that displays a horizontal navigation trail - storybook link.
- moz-select got an icon support (in-page button only, not the dropdown) - storybook link.
- Clear button on search input enabled for chrome documents
- Emilio is burning down search-textbox uses and replacing them with moz-input-search Bug 1968916
- moz-button size small is now 24px high
18 Jun 2025 7:35pm GMT
This Week In Rust: This Week in Rust 604
Category: This Week in Rust
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
- rust-analyzer changelog #290
- Linebender in May 2025
- bzip2 crate switches from C to 100% rust
- Hypershell: A Type-Level DSL for Shell-Scripting in Rust
- Slint 1.12 Released with WGPU Support, iOS Port, and Figma Variables Integration
- Glues v0.7.0 - TUI Note-Taking App with a New Theme Engine & Color Palettes
Observations/Thoughts
- retrobootstrapping rust for some reason
- The plight of the misunderstood memory ordering
- Don't you dare to sort your struct fields when using ?Sized
- [audio] Tembo with Adam Hendel
- [audio] Rust at Work - conversation with Eli Shalom and Igal Tabachnik of Eureka Labs
- [video] sans-io: meh
- [video] Guillaume Gomez - Rustdoc as a case study of developer tooling
- [video] 10th Bevy Meetup - Tristan - From zero to demo: a newcomer's experience learning Bevy
Rust Walkthroughs
- Putting seat calculations in Dutch election software to the (fuzz) test
- Datalog in Rust
- [video] Driving an LED matrix using async embedded Rust - moxi Ep2
Research
Miscellaneous
- Making GNOME's GdkPixbuf Image Loading Safer
- May 2025 Jobs Report
- Rust social status update 2025.06
- How Rolldown Works: Symbol Linking, CJS/ESM Resolution, and Export Analysis Explained
Crate of the Week
This week's crate is RobustMQ, a next-generation, high-performance, multi-protocol message queue.
Thanks to Yu Liu 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, Rust language RFCs, Cargo or Rustup.
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 X (formerly Twitter) 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 X (formerly Twitter) or Mastodon!
Updates from the Rust Project
461 pull requests were merged in the last week
Compiler
- cache
param_env
canonicalization - early linting: avoid redundant calls to
check_id
- move fast reject into inner
- use
MixedBitSet
for borrows-in-scope dataflow analysis - miri: add flag to suppress float non-determinism
- miri: we can use apfloat's
mul_add
now
Library
- stabilize
"file_lock"
feature - stabilize keylocker
- add
Vec::peek_mut
- added
Clone
implementation forChunkBy
- faster
fmt::Display
of 128-bit integers, without unsafe pointer - add
bit_width
for unsigned integer types - remove unneeded lifetime bound from signature of
BTreeSet::extract_if
Cargo
- add custom completer for
cargo remove <TAB>
- highlight the correct words
- refactor: replace InternedString with Cow in IndexPackage
Rustdoc
Rustfmt
Clippy
- Optimize 3rd heaviest func, (81b → 10m)
- add lint for broken doc links
- docs: add link to
span_lint
in diagnostics.rs - docs: make
unbuffered_bytes
docs more consistent - fix FP of
identity_op
when encounteringDefault::default()
- fix
collapsible_else_if
FP on conditionally compiled stmt - fix
needless_doctest_main
panic when doctest is invalid - fix
unit_arg
suggests wrongly forDefault::default
- fix suggestion-causes-error of
manual_swap
- fixes
manual_flatten
removes the useless if let - remove
ClippyCtfe
pass - remove unneeded lifetime
#### Rust-Analyzer
ItemTree
'sItemVisibilities
has no identity, so deduplicate- add support for excluding imports from symbol search
- cleanup incremental tests and verify query executions
- add the quickfix for increasing visibility of a private field to the private-field diagnostic
- in "Fill match arms", allow users to prefer
Self
to theenum
name when possible - insert required parentheses when typing
+
in dyn trait type - show what cargo metadata is doing in status
- copy lockfiles into target directory before invoking
cargo metadata
- do not force descend into derives for goto IDE features
- fix comparison of proc macros
- fix completion with some attribute macros
- fix proc macro server handling of strings with minuses
- hide dyn inlay hints for incomplete
impl
s - never make type mismatch diagnostic stable, even when there is a fix
- reload workspaces when cargo configs change
- support spans with proc macro servers from before the ast id changes
- generate annotations for macro defined items if their name is in the input
- idiomatic salsa use for
enum
variants query - improve completions in if / while expression conditions
- optimize
pub(crate)
andpub(self)
visibility resolution - perf: bring back
EMPTY
item tree deduplication - provide better incrementality when items are changed
- simplify and optimize
ItemTree
- turn
BlockId
into a#[salsa::tracked]
- use
ThinVec
inItemScope
in a couple places
Rust Compiler Performance Triage
Relatively quiet week, with a few improvements to benchmarks leveraging the new trait solver.
Triage done by @kobzol. Revision range: c31cccb7..45acf54e
Summary:
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions ❌ (primary) |
0.3% | [0.1%, 0.5%] | 14 |
Regressions ❌ (secondary) |
0.3% | [0.1%, 0.5%] | 52 |
Improvements ✅ (primary) |
-0.5% | [-4.8%, -0.1%] | 68 |
Improvements ✅ (secondary) |
-4.3% | [-56.5%, -0.1%] | 85 |
All ❌✅ (primary) | -0.4% | [-4.8%, 0.5%] | 82 |
3 Regressions, 7 Improvements, 4 Mixed; 4 of them in rollups 51 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
No Items entered Final Comment Period this week for Language Reference, Language Team 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 2025-06-18 - 2025-07-16 🦀
Virtual
- 2025-06-18 | Virtual (Vancouver, BC, CA) | Vancouver Rust
- 2025-06-19 | Hybrid (Redmond, WA, US) | Seattle Rust User Group
- 2025-06-19 | Virtual (Berlin, DE) | Rust Berlin
- 2025-06-19 | Virtual (Girona, ES) | Rust Girona
- 2025-06-22 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2025-06-24 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2025-06-24 | Virtual (London, UK) | Women in Rust
- 2025-06-25 | Virtual (Lima, PE)| Perú Rust User Group
- 2025-06-26 | Virtual (Girona, ES) | Rust Girona
- 2025-06-26 | Virtual (Nürnberg, DE) | Rust Nuremberg
- 2025-06-29 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2025-07-02 | Virtual (Indianapolis, IN, US) | Indy Rust
- 2025-07-03 | Virtual (Berlin, DE) | Rust Berlin
- 2025-07-03 | Virtual (Rotterdam, NL) | Bevy Game Development
- 2025-07-05 | Virtual (Kampala, UG) | Rust Circle Meetup
- 2025-07-06 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2025-07-08 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2025-07-13 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2025-07-15 | Virtual (London, UK) | Women in Rust
- 2025-07-15 | Virtual (Washington, DC, US) | Rust DC
- 2025-07-16 | Virtual (Vancouver, BC, CA) | Vancouver Rust
Asia
- 2025-06-28 | Bangalore/Bengaluru, IN | Rust Bangalore
- 2025-07-02 | Seoul, KR | Seoul Rust (Programming Language) Meetup
Europe
- 2025-06-18 | Stockholm, SE | Stockholm Rust
- 2025-06-19 | Aarhus, DK | Rust Aarhus
- 2025-06-19 | Edinburgh, UK | Rust and Friends
- 2025-06-20 | Edinburgh, UK | Rust and Friends
- 2025-06-23 | London, UK | Rust London User Group
- 2025-06-24 | Manchester, UK | Rust Manchester
- 2025-06-25 | London, UK | London Rust Project Group
- 2025-06-25 | Paris, FR | Systematic Paris Region
- 2025-06-26 | Barcelona, ES | BcnRust
- 2025-06-26 | Copenhagen, DK | Copenhagen Rust Community
- 2025-06-26 | Paris, FR | Rust Paris
- 2025-06-30 | Zagreb, HR | impl Zagreb for Rust
- 2025-07-01 | Gdansk, PL | Rust Gdansk
- 2025-07-02 | Basel, CH | Rust Basel
- 2025-07-02 | London, UK | Oxford Rust Meetup Group
- 2025-07-02 | Posnan, PL | Rust Poland
- 2025-07-05 | Stockholm, SE | Stockholm Rust
- 2025-07-08 | London, UK | London Rust Project Group
- 2025-07-09 | Girona, ES | Rust Girona
- 2025-07-09 | Reading, UK | Reading Rust Workshop
- 2025-07-15 | London, UK | London Rust Project Group
North America
- 2025-06-18 | Hybrid (Vancouver, BC, CA) | Vancouver Rust
- 2025-06-19 | Hybrid (Redmond, WA, US) | Seattle Rust User Group
- 2025-06-19 | México City, MX | Rust MX
- 2025-06-19 | Nashville, TN, US | Music City Rust Developers
- 2025-06-19 | Redmond, WA, US | Seattle Rust User Group
- 2025-06-20 | Boston, MA, US | Boston Rust Meetup
- 2025-06-25 | Austin, TX, US | Rust ATX
- 2025-06-26 | Los Angeles, CA, US | Rust Los Angeles
- 2025-06-26 | Los Angeles (Chino Hills), CA, US | Vara Network
- 2025-06-26 | Spokane, WA, US | Spokane Rust
- 2025-06-28 | Boston, MA, US | Boston Rust Meetup
- 2025-07-03 | Montréal, QC, CA | Rust Montréal
- 2025-07-03 | Saint Louis, MO, US | STL Rust
- 2025-07-06 | Boston, MA, US | Boston Rust Meetup
- 2025-07-09 | Phoenix, AZ, US | Desert Rust
- 2025-07-15 | San Francisco, CA, US | San Francisco Rust Study Group
Oceania
- 2025-06-24 | Barton, AC, AU | Canberra Rust User Group
- 2025-06-30 | Collingwood, VI, AU | Rust Melbourne
South America
- 2025-07-12 | São Paulo, BR | Rust São Paulo 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
But after a few weeks, it compiled and the results surprised us. The code was 10x faster than our carefully tuned Kotlin implementation - despite no attempt to make it faster. To put this in perspective, we had spent years incrementally improving the Kotlin version from 2,000 to 3,000 transactions per second (TPS). The Rust version, written by Java developers who were new to the language, clocked 30,000 TPS.
This was one of those moments that fundamentally shifts your thinking. Suddenly, the couple of weeks spent learning Rust no longer looked like a big deal, when compared with how long it'd have taken us to get the same results on the JVM. We stopped asking, "Should we be using Rust?" and started asking "Where else could Rust help us solve our problems?"
- Dr. Werner Vogels on his blog
Thanks to Brian Kung for the suggestion!
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, cdmistman, ericseppanen, extrawurst, U007D, joelmarcey, mariannegoldin, bennyvasquez, bdillo
Email list hosting is sponsored by The Rust Foundation
18 Jun 2025 4:00am GMT
The Servo Blog: This month in Servo: color inputs, SVG, embedder JS, and more!
Two big pieces of news for images in Servo this month:
- We now display animated GIFs in all their animated glory (@rayguo17, #36286)! This work required careful architecting to integrate with existing animation mechanisms in the engine without incurring unnecessary CPU usage.

- We support loading SVG images in <img src> (@mukilan, @mrobinson, #36721).

Outreachy
We're excited to host two Outreachy interns over the next few months! Jerens Lensun (@jerensl) will be working on improving Servo's CI setup and other Python-focused infrastructure, while Usman Baba Yahaya (@uthmaniv) will implement support for the Network Monitor in our devtools.
They will both be blogging about their internships, and you can follow their work on Jeren's blog and Usman's blog.
Web content
Servo's layout implementation has historically been all-or-nothing - any change in the page, no matter how isolated, requires laying out the entire page from scratch. Fixing this limitation is known as incremental layout, and it's a key performance optimization in all browser engines. This month we've landed a number of changes in this area that make some kinds of CSS changes much more efficient than a full layout (@mrobinson, @Loirooriol, #36896, #36978, #37004, #37047, #37069, #37048, #37088, #37099).
We have also made significant progress on the Trusted Types API, going from 47% of tests passing to 58% over the course of May (@TimvdLippe, #36710, #36668, #36811, #36824, #36941, #36960). Supporting this work on Trusted Types, our Content Security Policy implementation has been steadily improving, now passing 59% of automated tests (@TimvdLippe, @jdm, @simonwuelker, #36709, #36710, #36776, #36832, #36860, #36887, #36923, #36963, #36962, #36961, #36965, #37020).
We've enabled support for URLPattern (@simonwuelker, #36826, #37004, #37116), <input type=color> (@simonwuelker, #36992), plus several other web API features:
- TransformStream (@Taym95, @gterzian, #36739, #36905)
- setHTMLUnsafe() method on ShadowRoot (@TG199, #36240)
- scrollingElement property on Document (@JimmyDdotEXE, #35994)
- pipeThrough() method on ReadableStream (@Taym95, #36977)
- readText() method on navigator.clipboard (@Gae24, #36689)
- type property on Stylesheet (@simonwuelker, #37126)

Our layout and CSS support continues to improve. This month, we improved our page background sizing and style computation (@mrobinson, @Loirooriol, #36917, #37147), and added support for 'wavy' and 'double' in the 'text-decoration-line' property (@mrobinson, #37079).

HTMLVideoElement can now be used as an image source for 2D canvas APIs (@tharkum, #37135), ImageBitmap can be serialized and transferred via postMessage() (@tharkum, #37101), media elements redraw properly whenever their size changes (@tharkum, #37056), polygon image map areas are clickable (@arihant2math, #37064), <select> elements are redrawn when their contents change (@simonwuelker, #36958), and getPreferredCanvasFormat() on GPU returns platform-appropriate values (@arihant2math, #37073).
We've fixed bugs relating to invertible and non-invertible transforms (@Loirooriol, #36749, #37147), missing underlines on macOS (@mrobinson, #37029), and sizing issues for tables and flex containers (@stevennovaryo, @Loirooriol, #36703, #36993, #36980, #37024, #37011). We've also fixed a number of bugs where Servo's behaviour did not match relevant specifications:
input
events are now fired followingkeydown
events (@yezhizhen, #37078)- unscopable objects are now writable and readable, and don't have a prototype (@simonwuelker, #37119, #37122)
Request
headers reject more erroneous headers (@sebsebmc, #36943)- External stylesheets in documents with quirks mode are more lenient about the stylesheet's
Content-Type
(@ghostd, @mrobinson, #28321) - the
ImageData
constructor throws better errors for unsupported arguments (@Taym95, #31398) - Attribute nodes are serialized as the empty string (@simonwuelker, #36875)
- custom element
is
values are serialized as attributes (@simonwuelker, #36888) EventSource
ignores invalid field values and treats non-200 responses codes as failures (@KiChjang, #36853, #36854)- the
premultipliedAlpha
flag for WebGL canvases premultiplies correctly (@tharkum, #36895)
Our WebDriver server implementation received a lot of attention this month! Element clicks now receive the expected button value (@longvatrong111, #36871), wheel actions are supported (@PotatoCP, #36744, #36985), and we removed the possibility of races between some input actions and other WebDriver commands (@longvatrong111, @mrobinson, #36932). We've also added support for passing WebDriver references to DOM objects as arguments when executing scripts (@jdm, #36673), and fixed some bugs with JS value serialization (@yezhizhen, #36908) and cancelling inputs (@yezhizhen, #37010).
We've begun preparatory work to integrate Vello as the backend for 2D canvases (@sagudev, #36783, #36790, #36999). We've also landed some changes towards supporting '::placeholder' pseudo-elements and fixing rendering issues with text inputs (@stevennovaryo, #37065).
Embedding
The engine
Embedders can now evaluate JavaScript inside a webview and receive results asynchronously (@Narfinger, @mrobinson, #35720).
All embedders will receive default styling and interactivity for elements like inputs and media elements (@webbeef, #36803), reducing the amount of configuration required to embed the engine.
Any provided system light/dark theme will be propagated to all documents loaded inside of a webview (@mrobinson, #37132).
Servo's developer tools integration now highlights elements in the layout inspector (@simonwuelker, #35822), and displays <!DOCTYPE> nodes correctly (@simonwuelker, #36787).

We have removed the dom_shadowdom_enabled
preference, since the feature has been enabled by default since March 2025 (@simonwuelker, #37043).
Our automated benchmarking setup is expanding, and we can now measure how long it takes to start up Servo and load the servo.org homepage on HarmonyOS (@Narfinger, #36878), which will help us identify regressions in the future.
Finally, we can now write unit tests for Servo's embedding API (@mrobinson, #36791), which allows us to write better regression tests for shutdown-related issues (@mrobinson, #36808).
servoshell
The --user-agent
(-u
) flag now correctly sets the User-Agent header for network requests (@PartiallyUntyped, @mrobinson, #36859).
Service workers have been removed from the list of features enabled by --enable-experimental-web-platform-features
until they provide more value (@jdm, #36867).
Building servoshell with --with-asan
now causes all C++ dependencies to be built with Address Sanitizer as well, and mach bootstrap
on Windows can now use winget
as a fallback if choco
is unavailable (@jschwe, #32836).
The current system light/dark theme is now queried on startup (@Legend-Master, #37128). Additionally, the screen dimensions and geometry reported by the engine are now correct on OpenHarmony (@PartiallyUntyped, @jschwe, #36915).
Performance
Servo is now better at evicting image data from GPU caches (@webbeef, #36956). We also reduced the memory needed to store HSTS data, saving more than 60mb by doing so (@sebsebmc, #37000, #37015).
We now measure the memory usage of sessionStorage and localStorage data (@jdm, #37053), the Public Suffix List (@sebsebmc, #37049), and system fonts (@jdm, #36834).
In addition, we've reduced the size of the final Servo binary by 2 MB by stripping out DOM code that should never be used outside of automated tests (@jdm, #37034).
Stability
We fixed a number of crashes involving animated images (@simonwuelker, #37058), media elements with an unknown duration (@tharkum, servo-media#437), canvas elements during shutdown (@mrobinson, #37182), adding a Path2D to itself (@Taym95, #36847), calculating IntersectionObserver areas (@webbeef, #36955), the childNodes() method on Node (@jdm, #36889), resizing OffscreenCanvas (@simonwuelker, #36855), querying WebGL extensions (@mrobinson, #36911), and slicing a sliced Blob (@simonwuelker, #36866).
We've also fixed a deadlock involving streams with very large chunks (@wusyong, #36914), and fixed a source of intermittent crashes when closing tabs or removing iframes (@jdm, #37120). Finally, we rewrote the implementation of the text property on HTMLOptionElement to avoid crashes with deeply-nested elements (@kkoyung, #37167).
Having previously noticed an unsafe pattern triggered by using JS-owned values in Rust Drop implementations (#26488), we have begun incrementally removing existing Drop impls to remove that source of unsafety (@willypuzzle, #37136).
Upgrades
We upgraded our fork of WebRender to April 2025 (@mrobinson, #36770), and upgraded our Stylo dependency to May 2025 (@Loirooriol, #36835). These changes ensure that Servo is up to date with ongoing work in Firefox, which shares these dependencies.
Donations
Thanks again for your generous support! We are now receiving 4597 USD/month (−1.4% over April) in recurring donations. This helps cover the cost of our self-hosted CI runners and one of our latest Outreachy interns!
Servo is also on thanks.dev, and already 25 GitHub users (+1 over April) 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.
As always, use of these funds will be decided transparently in the Technical Steering Committee. For more details, head to our Sponsorship page.
18 Jun 2025 12:00am GMT
16 Jun 2025
Planet Mozilla
The Mozilla Blog: The Great British Bake Off’s Janusz on CakeTok and queer joy

Here at Mozilla, we are the first to admit the internet isn't perfect, but we know the internet is pretty darn magical. The internet opens up doors and opportunities, allows for human connection, and lets everyone find where they belong - their corners of the internet. We all have an internet story worth sharing. In My Corner Of The Internet, we talk with people about the online spaces they can't get enough of, the sites and forums that shaped them, and how they would design their own corner of the web.
We caught up with Janusz Domagala, the joyful breakout star of 2022's "The Great British Bake Off" and author of Baking With Pride. He talks about CakeTok, his secret ingredient hot honey, how digital friendships shaped his life, and why history tastes better when baked.
What is your favorite corner of the internet?
I have to say my favourite corner of the internet is American CakeTok. I love the online baking community generally, it's so welcoming, supportive and encouraging. But I do have to admit that American baking really aligns with my personal approach to baking- colourful, bold and daring flavours and visually dramatic. I think food should be an experience for all the senses and it's typically American baking videos on social media that gets my senses tingling…

What is an internet deep dive that you can't wait to jump back into?
As well as baking, I'm a big fan of history. Living in the UK I love diving into its rich history online- researching the fashion, culture and popular bakes of certain periods of time. I love recreating historical bakes I discover as not only do I get to imagine what life was like during chapters of time, I get to taste what it was like too.
What is the one tab you always regret closing?
I would be lost and create some very … interesting… bakes if it wasn't for my tab that has an international unit conversion! I love using recipes from around the world but because I'm a speedy baker (thanks to competitive baking, I guess) I don't have time to whip out my calculator mid whisk!
What can you not stop talking about on the internet right now?
Hot honey! As a creative and a genuine foodie, I love seeing the trends that come out in the food world and take over in the internet. Recently we've had caramelised biscuit, pistachio and now hot honey which combines two of my two favourite flavour profiles and is already getting me thinking about my next bake.
"Until [joining a local baking group online] my only chance to talk about baking was with my mother who taught me to bake, so to finally get the chance to talk to people my own age about one of my biggest passions was a big moment for me."
What was the first online community you engaged with?
Like a true millennial the first online community I engaged with was on MySpace, joining a local baking group. Until then my only chance to talk about baking was with my mother who taught me to bake, so to finally get the chance to talk to people my own age about one of my biggest passions was a big moment for me. Within the group, we actually started arranging monthly meet ups at a local park where we would get together in person, taking things we'd baked along, and chat all things baking. I'm still friends with some of the people from that group and that for me is one of the most powerful things about the internet- meeting people you never would normally have met in life and turning them into real life friendships.
If you could create your own corner of the internet, what would it look like?
My corner of the internet would probably look a lot like my wardrobe; bold, colourful and fun! Full of feelgood items and also have different options for different moods, have comfy options when we need that little extra warmness on the days we need but most importantly- get people talking and inspired.
What articles and/or videos are you waiting to read/watch right now?
It's currently Pride Month and each year I get so excited about the digital content that's released, full of stories from the LGBTQ+ community. I'm currently waiting for the OUT100 list to be released which highlights 100 influential people who are currently working towards change and fighting for our rights. It's a great read and a great chance to highlight the work of people that might not always have the spotlight shone on them.
If the internet were a giant Showstopper Challenge and you got to design it for the future, what ingredients would you throw in to make it more delicious for creative people like you - and what baking disaster would you absolutely leave out?
This is a great question… I would start with multiple layers of art flavoured with fashion, food, body positivity and queer joy. I would layer in some curiosity to help people be brave enough to try new things and top with some creativity, kindness and acceptance… and sprinkles! Always sprinkles. A baking disaster I would ban from my internet Showstopper would be fear- wonderful things can happen when we act without fear and if something doesn't go to plan it's not the end of the world. As I say, a bad batch of bread can make excellent breadcrumbs!
Janusz Domagala, or simply Janusz as he's most commonly known, became the instant standout star on 2022's "The Great British Bake Off" when he rightfully declared himself the "Star Caker." Since appearing on the show, Janusz has built a successful social media following, has been featured in multiple print and digital media outlets and was a contestant on the third season of the show "Crime Scene Kitchen." A keen LGBT+ activist, his debut recipe book, "Baking With Pride," was released in May 2024.

Get the browser that puts your privacy first - and always has
Download FirefoxThe post The Great British Bake Off's Janusz on CakeTok and queer joy appeared first on The Mozilla Blog.
16 Jun 2025 5:40pm GMT
The Rust Programming Language Blog: Rust compiler performance survey 2025
We're launching a Rust Compiler Performance Survey.
Long compile times of Rust code are frequently being cited as one of the biggest challenges limiting the productivity of Rust developers. Rust compiler contributors are of course aware of that, and they are continuously working to improve the situation, by finding new ways of speeding up the compiler, triaging performance regressions and measuring our long-term performance improvements. Recently, we also made progress on some large changes that have been in the making for a long time, which could significantly improve compiler performance by default.
When we talk about compilation performance, it is important to note that it is not always so simple as determining how long does it take rustc
to compile a crate. There are many diverse development workflows that might have competing trade-offs, and that can be bottlenecked by various factors, such as the integration of the compiler with the used build system.
In order to better understand these workflows, we have prepared a Rust Compiler Performance Survey. This survey is focused specifically on compilation performance, which allows us to get more detailed data than what we usually get from the annual State of Rust survey. The data from this survey will help us find areas where we should focus our efforts on improving the productivity of Rust developers.
You can fill out the survey here.
Filling the survey should take you approximately 10 minutes, and the survey is fully anonymous. We will accept submissions until Monday, July 7th, 2025. After the survey ends, we will evaluate the results and post key insights on this blog.
We invite you to fill the survey, as your responses will help us improve Rust compilation performance. Thank you!
16 Jun 2025 12:00am GMT
15 Jun 2025
Planet Mozilla
Don Marti: encouraging first result from an AI right to know
Pretty soon after I posted an agentic AI benchmark, already built, I got Mark Hinkle's newsletter, How to Actually Start Using AI Agents Today. Perfect timing-thank you, universe! Now I have no excuse not to test the most promising AI agents and see if they will help with some of the complex processes that you have to go through to do a right to know
(RtK) under CCPA or some other state privacy law.
So I made an account on Manus and tried one of my go-to RtKs, Verizon. I like RtKing them because they have a bunch of LOL-worthy marketing insights (inferences, which under the law must be disclosed) about my family, or at least they did last time. Verizon is a good first RtK for people getting started with this exciting(ish) hobby.
This company is not too hard to RTK, but they do have some forms to get through, so hard enough to be a realistic test for AI. Here's the transcript with my contact info redacted. tl;dr: it worked (mostly).
My first prompt was a little disappointing. I provided what I thought was the right form URL, and Manus got stuck. But I tried again. This time I supplied the privacy policy URL and told Manus to look in the California section, and it got through.
Only one error. I provided a phone number but it filled in n/a
until corrected. But as soon as I supplied the right number it did the right thing.
TODO: I'll post an update here when I eventually get the data (or not).
The problem with RtKs compared to other software tests is that one person can only RtK the same company every so often. So I'd be really interested in seeing what happens when other people do variations on this one. Don't feel bad about overloading Verizon with RtKs-if they can afford to pay off the former Twitter to show ads to bots then they can afford to do these.
-
Make a Manus account.
-
Prompt it with your contact info and the URL of the privacy policy to start with (don't go down the dead end that I did) https://www.verizon.com/about/privacy/full-privacy-policy
-
See if it can get to the success screen, and if the RtK data shows up.

I know a lot of people are still doubtful that AI
is making much progress in doing original work, but solving RtK mazes isn't really that. RtK mazes
are a class of problems that somebody already designed, like solving CAPTCHAs.
More: personal AI in the rugpull economy The biggest win from personal AI will, strangely enough, be in de-personalizing your personal information environment. By doing the privacy labour for you, the "agentic" AI will limit your "addressability" and reduce personalization risks.
Bonus links
The promise that wasn't kept by Salma Alam-Naylor. What's becoming clear is that the mass adoption of AI is shifting the focus away from human-centred software solutions that provide meaningful value, and is reducing the entire industry to just the tools at its disposal. Just generate the code, bro. Just ship one more app, bro.
(via Re: broken promises by Heather Buchel)
Meta Busted Spying on Android Users In Extremely Creepy New Way, Then Lies About It (I'm for removing the Meta apps: WhatsApp, Instagram, Threads, Facebook before the next story like this comes along and surprises
everybody. Related: Meta's Failing Ad Moderation: Health Scams Targeting EU Users | AI Forensics from AI Forensics)
Trump's FTC may impose merger condition that forbids advertising boycotts by Jon Brodkin. (like I said, time to sharpen your pencils, people)
Rosemary has been linked to better memory, lower anxiety and even protection from Alzheimer's by Dipa Kamdar. (If you're in the area you're welcome to take a cutting. Rosemary bushes do really well around here.)
America's Newest Gamblers Are Playing a Dangerous Game By Hana Kiros. Sports betting seems to be spurring a rise in gambling addiction-one that the U.S. isn't equipped to address.
(don't wait for The Algorithm to target you for deceptive ads, get protected. picking up cheap shoes in front of a steamroller)
15 Jun 2025 12:00am GMT
14 Jun 2025
Planet Mozilla
Karl Dubost: Quick HTML test case
For reporting a bug or an unexpected behavior, the simpler the test is, the better. You can create a very simple HTML file to demonstrate the issue or you can use an online code web app such as jsfiddle or codepen. (I have a preference for codepen but I don't know why.) But most of the time, I'm using data:
URL to share a simple piece of code for a test.
Let's take this code.
<div class="test" style="opacity:clamp(50%,0%,70%)"></div>
The style
attribute returns different values when we extract the value using getPropertyValue()
0.5
in Safari Technology Preview 18.4 (220) 20622.1.14.5calc(0.5)
in Firefox Nightly 141.0a1 14125.6.5clamp(50%, 0%, 70%)
in Google Chrome Canary 139.0.7233.0 7233.0
According to the WPT test, Firefox returns the right answer: calc(0.5)
To see the returned value, we coud do :
<!-- The code being tested. -->
<div class="test" style="opacity:clamp(50%,0%,70%)"></div>
<!-- Something that can hold the test result. -->
<div class="log"></div>
<!-- the script extracting the value and writing the test result. -->
<script>
document.querySelector(".log").textContent=document.querySelector(".test").style.getPropertyValue("opacity");
</script>
This is very simple. I can put all of this on one line.
<div class="test" style="opacity:clamp(50%,0%,70%)"></div><div class="log"></div><script>document.querySelector(".log").textContent=document.querySelector(".test").style.getPropertyValue("opacity");</script>
Then I just need to add the right data URL in front of it. This is HTML, so we add data:text/html,
. That's it. This will instruct the browser to parse the code in the URL bar to process it as HTML.
data:text/html,<div class="test" style="opacity:clamp(50%,0%,70%)"></div><div class="log"></div><script>document.querySelector(".log").textContent=document.querySelector(".test").style.getPropertyValue("opacity");</script>
Then you can copy/paste this code in the URL bar of your favorite browser or more exactly in multiple browsers.
Hope it helps! Yes, I opened a bug for the issue.
Note: For those, who are wondering why I didn't use id
instead of class
. The #
sign in the querySelector()
would require to escape #
, because it would have unintended consequences on the parsing of the URL.
Otsukare!
14 Jun 2025 7:38am GMT
Don Marti: Links for 14 Jun 2025
icymi:
I will speak of Thomas Aquinas instead. I will tell you my dim memories of what he said about the hierarchy of laws on this planet, which was flat at the time. The highest law, he said, was divine law, God's law. Beneath that was natural law, which I suppose would include thunderstorms, and our right to shield our children from poisonous ideas, and so on.
And the lowest law was human law.
Let me clarify this scheme by comparing its parts to playing cards. Enemies of the Bill of Rights do the same sort of thing all the time, so why shouldn't we? Divine law, then, is an ace. Natural law is a king. The Bill of Rights is a lousy queen.
The Thomist hierarchy of laws is so far from being ridiculous that I have never met anybody who did not believe in it right down to the marrow of his or her bones. Everybody knows that there are laws with more grandeur than those which are printed in our statute books. The big trouble is that there is so little agreement as to how those grander laws are worded. Theologians can give us hints of the wording, but it takes a dictator to set them down just right-to dot the i's and cross the t's. A man who had been a mere corporal in the army did that for Germany and then for all of Europe, you may remember, not long ago. There was nothing he did not know about divine and natural law. He had fistfuls of aces and kings to play.
Meanwhile, over on this side of the Atlantic, we were not playing with a full deck, as they say. Because of our Constitution, the highest card anybody had to play was a lousy queen, contemptible human law. That remains true today. I myself celebrate that incompleteness, since it has obviously been so good for us. - Kurt Vonnegut
and some recent links…
Hurricanes are getting so bad, we need a new category, expert warns by Tom Howarth. Hurricanes are a redistribution of heat from the ocean to the atmosphere. Essentially, you need more heat to be distributed before you can push through that lid and cause a hurricane. That means they might become less frequent, but when they go, they really go. At the same time, rising sea levels mean that even storms of the same strength can now push further inland, causing more widespread damage.
Wikipedia Pauses AI-Generated Summaries After Editor Backlash by Emanuel Maiberg. (From what I can see, obvious use of generative AI is, more and more, a political signal. Generative AI is seen as part of a program to de-value human creativity and shift the balance of power toward central points of control and away from distributed decision-making methods like peer production and markets. See Toolmen by Mandy Brown. Engaging with AI as a technology is to play the fool-it's to observe the reflective surface of the thing without taking note of the way it sends roots deep down into the ground, breaking up bedrock, poisoning the soil, reaching far and wide to capture, uproot, strangle, and steal everything within its reach.
and A plausible, scalable and slightly wrong black box: why large language models are a fascist technology that cannot be redeemed by Benjamin Gregory Carlisle. In what follows, I will argue that being plausible but slightly wrong and un-auditable-at scale-is the killer feature of LLMs, not a bug that will ever be meaningfully addressed, and this combination of properties makes it an essentially fascist technology. By "fascist" in this context, I mean that it is well suited to centralizing authority, eliminating checks on that authority and advancing an anti-science agenda.
)
Possibly related: Please tell us Reg: Why are AI PC sales slower than expected? by Paul Kunert, and Utah Study on Trans Youth Care Extremely Inconvenient for Politicians Who Ordered It by Madison Pauly. It is our expert opinion that policies to prevent access to and use of [gender-affirming hormone therapy] for treatment of [gender dysphoria] in pediatric patients cannot be justified based on the quantity or quality of medical science findings or concerns about potential regret in the future, and that high-quality guidelines are available to guide qualified providers in treating pediatric patients who meet diagnostic criteria.
(That's the problem with using human experts. Next time the politicians will use an LLM.)
X's Sales Pitch: Give Us Your Ad Business or We'll Sue - WSJ by Suzanne Vranica, Dana Mattioli, and Jessica Toonkel. Late last year, Verizon Communications got an unusual message from a media company that wanted its business: Spend your ad dollars with us or we'll see you in court….It worked. Verizon, which hadn't advertised on X since 2022, pledged to spend at least $10 million this year on the platform, a person familiar with the matter said.
(more coverage: Musk's threat to sue firms that don't buy ads on X seems to have paid off by Jon Brodkin. The WSJ article said that Verizon, which hadn't advertised on X since 2022, was told late last year that it would be added to the lawsuit if it didn't buy ads. Verizon subsequently pledged to spend at least $10 million on the platform this year, the article said.
)
Start your own Internet Resiliency Club - Bow Shock Systems Consulting (If we get some interested people turning out at the Alameda Linux Installfest who are looking for a project…)
Texas Legislature Beats Back Assault on Clean Energy by Gabrielle Gurley. It may surprise some people that Texas is the American poster child for clean energy. But a fortunate mix of climatic and topographic elements has made it the leading state in the nation for wind energy generation, while second for solar and battery storage. Billions and billions of dollars of investments unlocked those resources, and its business-friendly opportunities (no corporate or personal income tax!) for all comers, from entrepreneurs to fossil fuel giants to small landowners, have sparked one of the strangest regional energy revolutions in the world.
(another contender: Solar power in Pakistan) and Texas Right to Repair bill passes, heads to the governor's desk by Richard Lawler. (It's not about red states vs. blue states, it's about tech oligarchs vs. everybody)
Children need the freedom to play on driveways and streets again - here's how to make it happen by Debbie Watson, Lydia Collison, and Tom Allport. In many places, children's freedom to roam has been diminishing for generations, but the pandemic has hastened the decline of this free play. Since the pandemic, children's physical activity has become ever more structured. It now mostly happens in after-school or sports clubs, while informal, child-led play continues to decline.
A Letter to Europe by Paul Krugman. Above all, Europe needs to overcome its learned helplessness and act like the great power it is - especially given America's apparent determination to destroy the pillars of its own strength.
(fortunately, the US IT exports of today are not the dominant products of Windows XP days. They're full of growth hacking and enshittification, and ready to be replaced.)
14 Jun 2025 12:00am GMT
12 Jun 2025
Planet Mozilla
Don Marti: links for 12 Jun 2025
Botnet Part 2: The Web is Broken by Jan Wildeboer. So there is a (IMHO) shady market out there that gives app developers on iOS, Android, MacOS and Windows money for including a library into their apps that sells users network bandwidth.
The Guardian's new whistleblower tool buries leaks to journalists within its own readers' everyday traffic by Joshua Benton. (previously: AdLeaks)
Attorney General Bonta Urges Immediate Action by Meta to Prevent Investment Scam Advertisements on its Platforms | State of California - Department of Justice - Office of the Attorney General (Don't tell me California has a strong privacy law. If we had a strong privacy law there would be a bunch of people in CPPA raid jackets carrying servers and boxes of records out of the Meta offices right now. More: some ways that Facebook ads are optimized for deceptive advertising)
Why Denmark Is Dumping Microsoft Office and Windows for LibreOffice and Linux by Steven Vaughan-Nichols. (why, yes, the future of human civilization does depend on European bureaucrats finally pulling off the Year of the Linux Desktop…so we should have nothing to worry about)
WPP attacks Publicis-owned Epsilon SSP in rare public spat - Ad Age by Jack Neff, Ewan Larkin, and Brian Bonilla. (I'm Team WPP on this one. The test did involve an an unusual buying pattern, but saying that most brands don't buy that way is like saying most restaurant diners don't check the back of the fridge like a health inspector, or most word processor users don't make a document title with 1025 emoji in it like a software tester.)
Taylor Swift now owns all the music she has ever made: a copyright expert breaks it down by Wellett Potter. Swift has repeatedly emphasised the need for artists to retain control over their work and to receive fair compensation. In a 2020 interview she said she believes artists should always own their master records and licence them back to the label for a limited period.
12 Jun 2025 12:00am GMT
11 Jun 2025
Planet Mozilla
This Week In Rust: This Week in Rust 603
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
Newsletters
Project/Tooling Updates
- Are We Embedded Yet? #2
- Meilisearch 1.15 - new typo tolerance setting, comparison operators for string filters, and improved support for Chinese
- cctx: A Context Switcher for Claude Code
Observations/Thoughts
- Rewriting SymCrypt in Rust to modernize Microsoft's cryptographic library
- Why doesn't Rust care more about compiler performance?
- Hedge funds are replacing a programming language with Rust, but it's not C++
- The Concurrency Trap: How An Atomic Counter Stalled A Pipeline
- Rust For Foundational Software
- 10 years of betting on Rust
- Report on variadic generics discussions at RustWeek 2025.
- Zero-cost Functional Records in Rust
- A plan for SIMD
- When is a Rust function "unsafe"?
- Nine Rules for Scientific Libraries in Rust
- Rust on a Diet
- Rust vs Go: Which one to choose in 2025
- [audio] What's New in Rust 1.79 and 1.80
- [audio] Rust at Work with Ran Reichman Co-Founder and CEO of Flarion
- [video playlist] RustWeek 2025
Rust Walkthroughs
- Introduction to embedded development with Rust: Overview of the ecosystem
- Achieving <100 ms Latency for Remote Control with WebRTC
- Patterns for Modeling Overlapping Variant Data in Rust
- Is Rust faster than C?
- [video] Introducing facet: Reflection for Rust
- [video] Combining Swift and Rust with UniFFI: Have Your Cake & Eat it Too
Research
Miscellaneous
- Getting A Read On Rust With Trainer, Consultant, and Author Herbert Wolverson
- [video] Julian Hofer - Pixi: the missing companion to cargo
Crate of the Week
This week's crate is optics, a typesafe, fully featured lens library.
Thanks to Akos Vandra 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, Rust language RFCs, Cargo or Rustup.
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.
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 X (formerly Twitter) 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 X (formerly Twitter) or Mastodon!
Updates from the Rust Project
516 pull requests were merged in the last week
Compiler
- add (back)
unsupported_calling_conventions
lint to reject more invalid calling conventions - add a new
mismatched-lifetime-syntaxes
lint - fast path for stalled obligations on self ty
- simplify and optimize
VecCache
'sSlotIndex::from_index
- rework
collect_and_apply
to not rely on size hint for optimization - miri: TB: add flag to disable the more precise interior mutability tracking
- miri: native-lib: allow multiple libraries and/or dirs
Library
- stabilise
os_string_pathbuf_leak
- stabilize
const_eq_ignore_ascii_case
- stabilize
nonnull_provenance
- stabilize
sha512
,sm3
andsm4
for x86 - stabilize
tcp_quickack
- bootstrap: build std sans leaf frame pointers
- make
NonZero<char>
possible - optimize
Seek::stream_len
impl forFile
Clippy
doc_suspicious_footnotes
: lint text that looks like a footnotemissing_const_for_fn
: consider constness of instancezombie_processes
: do not complain about early early returns- add new lint:
ip_constant
- do not lint macro generated codes
- do not recurse indefinitely while checking for inner mutability
- fix
branches_sharing_code
suggests wrongly when dealing with macros - fix
create_dir
ignores paths in suggestions - fix
match_single_binding
misses curlies on type signatures - fix
std_instead_of_core
FP when part of theuse
cannot be replaced - fix
unnecessary_debug_formatting
FP insideDebug
impl - fix false positive for
unused_unit
- fix suggestion-causes-error of
print_literal
andwrite_literal
- introduce
coerce_container_to_any
- invert suggestion if pointer is tested for non-nullness
- lint reversed ordering in partial ord impl
- use interned strings when possible, for efficiency purposes
Rust-Analyzer
- better parser recovery for macro calls in type bound position
- add
dyn
keyword inlay hints - implement attribute completions for diagnostics module
- always include quickfixes for diagnostics, even when diagnostics are disabled
- do not error at impls for unsized types that do not include
where Self: Sized
items - record macro calls for fields in
ChildBySource
impls - record macro calls in signatures in
ChildBySource
impls - stabilize the "JSON is not Rust" diagnostic
- stabilize unlinked file diagnostic
- hir-ty: add incremental tests checking for
infer
invalidation - make
Semantics<'db, DB>
supportSemantics<'db, dyn HirDatabase>
, take two
Rust Compiler Performance Triage
Mostly positive week, with a lot of improvements in the type system, especially in new solver and one big win in caching code. Regressions come from new warnings, with outsized impact on one benchmark with a lot of generated code.
Triage done by @panstromek. Revision range: 2fc3deed..c31cccb7
Summary:
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions ❌ (primary) |
3.1% | [0.3%, 8.5%] | 22 |
Regressions ❌ (secondary) |
0.6% | [0.2%, 0.9%] | 3 |
Improvements ✅ (primary) |
-1.0% | [-3.4%, -0.2%] | 151 |
Improvements ✅ (secondary) |
-3.5% | [-66.5%, -0.2%] | 146 |
All ❌✅ (primary) | -0.4% | [-3.4%, 8.5%] | 173 |
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
- Tracking Issue for
mixed_integer_ops_unsigned_sub
- Allow storing
format_args!()
in variable - Tracking Issue for File lock API
- Sized Hierarchy: Part I
- Allow volatile access to non-Rust memory, including address 0
- const-eval: allow constants to refer to mutable/external memory, but reject such constants as patterns
- Report never type lints in dependencies
- builtin dyn impl no guide inference
- Change
core::iter::Fuse
's Default impl to do what its docs say it does - Stabilize derive(CoercePointee)
- impl
Default
forarray::IntoIter
- Added
Clone
implementation forChunkBy
No Items entered Final Comment Period this week for Cargo, Language Reference, Language Team, Rust RFCs 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 2025-06-11 - 2025-07-09 🦀
Virtual
- 2025-06-11 | Virtual (Tel Aviv, IL) | Code Mavens 🦀 - 🐍 - 🐪
- 2025-06-12 | Virtual (Charlottesville, VA, US) | Charlottesville Rust Meetup
- 2025-06-12 | Virtual (Girona, ES) | Rust Girona
- 2025-06-15 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2025-06-17 | Virtual (Washington, DC, US) | Rust DC
- 2025-06-18 | Hybrid (Vancouver, BC, CA) | Vancouver Rust
- 2025-06-19 | Hybrid (Redmond, WA, US) | Seattle Rust User Group
- 2025-06-19 | Virtual (Berlin, DE) | Rust Berlin
- 2025-06-19 | Virtual (Girona, ES) | Rust Girona
- 2025-06-22 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2025-06-24 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2025-06-24 | Virtual (London, UK) | Women in Rust
- 2025-06-26 | Virtual (Girona, ES) | Rust Girona
- 2025-06-26 | Virtual (Nürnberg, DE) | Rust Nuremberg
- 2025-06-29 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2025-07-02 | Virtual (Indianapolis, IN, US) | Indy Rust
- 2025-07-03 | Virtual (Berlin, DE) | Rust Berlin
- 2025-07-05 | Virtual (Kampala, UG) | Rust Circle Meetup
- 2025-07-06 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2025-07-08 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
Africa
- 2025-06-17 | Johannesburg, ZA | Johannesburg Rust Meetup
Asia
- 2025-06-14 | Kuala Lumpur, MY | Rust Malaysia x APUGDC x ACM SIGGRAPH KL
- 2025-06-28 | Bangalore/Bengaluru, IN | Rust Bangalore
- 2025-07-02 | Seoul, KR | Rust Programming Meetup Seoul
Europe
- 2025-06-11 | Reading, UK | Reading Rust Workshop
- 2025-06-12 | Berlin, DE | Rust Berlin
- 2025-06-17 | Cambridge, GB | Cambridge Rust Meetup
- 2025-06-17 | Leipzig, SN, DE | Rust - Modern Systems Programming in Leipzig
- 2025-06-18 | Stockholm, SE | Stockholm Rust
- 2025-06-19 | Aarhus, DK | Rust Aarhus
- 2025-06-19 | Edinburgh, UK | Rust and Friends
- 2025-06-20 | Edinburgh, UK | Rust and Friends
- 2025-06-24 | Manchester, UK | Rust Manchester
- 2025-06-25 | London, UK | London Rust Project Group
- 2025-06-26 | Barcelona, ES | BcnRust
- 2025-06-26 | Copenhagen, DK | Copenhagen Rust Community
- 2025-06-26 | Paris, FR | Rust Paris
- 2025-07-01 | Gdansk, PL | Rust Gdansk
- 2025-07-02 | Basel, CH | Rust Basel
- 2025-07-09 | Girona, ES | Rust Girona
- 2025-07-09 | Reading, GB | Reading Rust Workshop
North America
- 2025-06-11 | Phoenix, AZ, US | Desert Rust
- 2025-06-12 | Mountain View, CA, US | Hacker Dojo
- 2025-06-17 | San Francisco, CA, US | San Francisco Rust Study Group
- 2025-06-17 | San Francisco, CA, US | Vara Network
- 2025-06-18 | Hybrid (Vancouver, BC, CA) | Vancouver Rust
- 2025-06-19 | Hybrid (Redmond, WA, US) | Seattle Rust User Group
- 2025-06-19 | México City, MX | Rust MX
- 2025-06-19 | Nashville, TN, US | Music City Rust Developers
- 2025-06-19 | Redmond, WA, US | Seattle Rust User Group
- 2025-06-20 | Boston, MA, US | Boston Rust Meetup
- 2025-06-25 | Austin, TX, US | Rust ATX
- 2025-06-26 | Los Angeles, CA, US | Rust Los Angeles
- 2025-06-26 | Los Angeles (Chino Hills), CA, US | Vara Network
- 2025-06-26 | Spokane, WA, US | Spokane Rust
- 2025-06-28 | Boston, MA, US | Boston Rust Meetup
- 2025-07-03 | Saint Louis, MO, US | STL Rust
- 2025-07-06 | Boston, MA, US | Boston Rust Meetup
Oceania
- 2025-06-11 | Sydney, NS, AU | Rust Sydney
- 2025-06-16 | Christchurch, NZ | Christchurch Rust Meetup Group
- 2025-06-24 | Barton, AU | Canberra Rust User Group (CRUG)
South America
- 2025-06-12 | Buenos Aires, AR | Rust en Español
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
Gaze not into the abyss, lest you become recognized as an abyss domain expert, and they expect you keep gazing into the damn thing.
Thanks to robin for the suggestion!
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, cdmistman, ericseppanen, extrawurst, U007D, joelmarcey, mariannegoldin, bennyvasquez, bdillo
Email list hosting is sponsored by The Rust Foundation
11 Jun 2025 4:00am GMT
10 Jun 2025
Planet Mozilla
The Mozilla Blog: Firefox features that help you plan a trip (and take it)

Most travel plans start with a handful of tabs. A map here, a few guides there. Then a flurry of bookings, logins and maybe a PDF form you're supposed to sign with your finger. Next thing you know, you're in line at the car rental counter with 3% battery, no confirmation number, and no address for where you're staying.
Firefox can't hand you a charger. But it can keep up before your trip and while you're on it. Haven't downloaded Firefox mobile yet? Now's a good time. Once you enable sync on Firefox mobile, all your travel bookmarks and tabs will come with you - ready to access quickly when you need them. Strong privacy protections are built in by default.
Here are a few features that help you plan, book and get where you're going:
Sync
Start planning on your laptop, pick it back up on your phone. Tabs like your hotel reservation page, bookmarks, passwords and more come with you, so you're not stuck emailing yourself links or searching "best vegan pizza rome" for the third time. Sign in to your Mozilla account to enable sync and access your data across your devices. It stays private and encrypted - even from us. (Firefox sync works in most places, but it's not available in every region.)
AI chatbot in your sidebar
Firefox lets you keep an AI chatbot in the sidebar while you browse. Useful when you're planning an itinerary, overthinking a layover, or asking it to generate a packing list based on the weather, your mood, and your inability to travel light.
Right-click the sidebar > customize sidebar > check "AI chatbot." Pick from tools like Claude, ChatGPT, Gemini and others (availability may vary by region).

Password manager and generator
Firefox can save your passwords, fill them in when you need them and generate more secure ones than "plzletmein!"
PDF editor
Sometimes the thing that holds up your travel plans is a PDF: tour sign-up sheets, car rental instructions, a transit map. Firefox's built-in PDF editor lets you fill out, sign and annotate PDFs directly in the browser - no downloads, no printing required. Works on desktop and mobile.

Tab groups
Tab groups let you organize your tabs by topic - flights, food, logistics, backup food - so you're not digging through a sea of identical tab titles wondering where the train schedule went.
Vertical tabs
Once the tab count crosses into the regrettable zone, vertical tabs help you see what you're working with. Everything's listed neatly on the side, so you can find the one tab with actual answers and stop clicking through five versions of "best day trips near Milan."

Right-click the toolbar > turn on vertical tabs.
Built-in translation
Firefox can translate full pages instantly for supported languages. Useful when you're trying to fill out a form, make a reservation, or read a menu where the only word you recognize is cornetto.
VPN extension for Windows
Sometimes travel means needing to book something as if you're already there, or reading the news like you're still at home. With Mozilla VPN, you can locate yourself wherever in the world you want - even back home. And with the VPN extension for Windows, you can do this on a per site basis, so you can check what you need without changing your whole device's location. (Available as part of a paid subscription.)

Firefox keeps up with your tabs, logins, pages, even the one in another language. Just remember to pack your charger.

Get the browser that puts your privacy first - and always has
Download FirefoxThe post Firefox features that help you plan a trip (and take it) appeared first on The Mozilla Blog.
10 Jun 2025 9:15pm GMT
Dave Townsend: What would you say you do here?
I'm currently joining a couple of new projects and the inevitable first step is introductions over Zoom and the usual questions: who are you, where are you based, and what is your role on this project. I'm a Principal Engineer here at Mozilla, which might make you think that my role is going to be a lot of development. But this isn't the case and I thought others might be interested in what it actually means. Somehow along the way it ended up turning into a post about how I see the different career levels for engineers at Mozilla, but hey maybe that is useful for others too?
One quick disclaimer for Mozilla engineers reading this. I am not your manager. If you want to know the specifics about what your manager wants to see from you in order to progress in your career you're better off talking to them first. This is also a simplification of a complex topic. I've talked in general terms about the career levels here, but no two engineers or career paths are the same, exceptions exist.
Like a number of companies these days Mozilla has two tracks for career progression. Engineers here are levelled along the Individual Contributor (IC) track. This didn't used to be the case. Previously, other than a few exceptional cases, when engineers reached one of the more senior levels they were expected to move into people management. That happened to me and for four years I managed a team of about seven engineers and I very quickly learned that people management wasn't for me. So I was extremely grateful when my manager at the time announced that Mozilla were building a more comprehensive track for engineers who wanted to continue to grow without needing to become managers. And they were talking with folks that they felt might have been pushed into management when there was no other option and giving them the choice to switch back. Which I jumped at.
Now Mozilla has an IC track that has 9 levels numbered from IC1 to IC8 (yes you read that right). We have the career level guide which is the hallowed spreadsheet that managers can point to to help engineers understand what the expectations are for the different levels. I actually helped write one of the original versions of this many moons ago so I have a lot of familiarity with it. And I find that those levels split into three chunks.
Engineers (IC1-IC3)
The first three levels (Software Engineer 1, Software Engineer 2, and Senior Software Engineer) are primarily about the work you do yourself as an engineer. You start by learning the ropes with your manager telling you what bugs to work on with other engineers helping you figure out how to fix things and help you when you get stuck. You grow to be more and more independent and by IC3 you are more self directing. You can generally figure out what bugs are most important to work on and how to unblock yourself. Your work is mostly directed by your manager at these levels but as you reach senior you'll be helping your manager understand which bugs are hard or easy to fix to help inform their prioritisation decisions.
Engineers fix bugs and become more senior by getting better at fixing bugs.
Staff engineers (IC4-IC5)
The next two levels (Staff Engineer and Senior Staff Engineer) change things up. All of the levels are ranked in terms of the overall impact you have to Mozilla, but while in the first three levels your impact is fairly direct (the bugs you fix) at the staff level your impact becomes more indirect. You're now growing into technical leadership. Figuring out and prioritising the issues that need to be worked on. Building a roadmap for your feature. Likely assigning bugs to other engineers. You work directly with other teams where there are dependencies and other functions of the organisation to guide the project as a whole. More of your time is spent helping the engineers around you get their work done than your own (though you still do a lot yourself too). The guidance from your manager is less about telling you specifically what to work on and more of a conversation where the manager brings the business needs and you bring the engineering needs and together you reach agreement on how to prioritise projects.
Perhaps the most important difference between staff and the earlier levels is that how you work becomes much more important. For the first three levels you can fix bugs largely in isolation. Once you reach staff communication becomes key. You have to be able to explain yourself well so others understand you and have confidence in your decisions. You have to be able to work productively with others, helping them do their work but also importantly listening to them when they have expertise that you don't. A staff engineer is on a team to provide technical leadership and decision making. This doesn't mean they have to be the expert on the project. Sometimes there might be an IC3 who understands the technology better. The staff engineer has to be humble enough to trust their subject matter expert in this case, this is often a hard shift in thinking for an engineer to make.
A staff engineer should make everyone on their project more productive.
Principal and above (IC6+)
The final levels start with IC6 which is where I am. Principal Engineer. I recall when we worked on the original level guide we got a bit stuck here. In part there were only a few engineers at this level or above to use as examples (this was back when this separate track was for the exceptional cases). But the other problem was that all of those engineers were different. I recall we basically gave up at one point and just wrote something along the lines of "You are an unstoppable force of nature". The levels are thankfully better defined now but there is still a lot of difference between the principals.
Some specialise in technical depth. They work on extremely complex, risky, or mission critical projects with many moving parts and have a deep understanding of how it all fits together so they can guide the work on it. They may still write a lot of code.
Others may barely write any code at all and spend their entire time working at the higher level of projects that span large areas of the company. They understand how all the pieces of Firefox fit together and so when technical questions need answering they can either answer them directly or very quickly find the person who knows the answer. They help evaluate and steer new projects with an eye on the technical capabilities we have available and the business needs. They identify potential roadblocks quickly because they have that overarching view.
And there are many principals who sit somewhere in between those two extremes.
There are some commonalities though. While staff engineers tend to have their impact limited to a single project at a time, IC6 and above will be impacting multiple projects at once. Even those who are deep in the technical pieces of one project will still be working with other projects. Principals will also work directly with Directors and VPs to help decide what projects should and shouldn't happen. The levels above principal will be working directly with the C level execs. We will also often be working with people from other companies, perhaps companies we are partnering with, or standards bodies, or even governments in some cases. Principals and above have to have a good understanding on the goals of Mozilla as a whole, not just those for any one particular part of Mozilla.
Principal engineers should make the entire company more successful.
What about me?
So what kind of a principal engineer am I? Well here is my commit graph for Firefox.
As you can see I do very little coding. I have ended up towards the other end of that spectrum and I spend most of my time advising projects. I was looking at a new ultra-wide monitor that became available the other day and my half-serious joke was "Damn, I could fit so many Google Docs on that thing".
In the past I have been thrown into teams where a specific project has become blocked and they need help figuring out how to unblock it. Or a VP needs a more direct link with a critical project and wants me to act as liaison between them and the team, someone who they can trust to be their eyes and ears but also often their voice.
More recently I've done work where I've been the first engineer on a new project and I spent time working with product management and user experience to figure out the basics of what we are going to implement, what impact that will have on the rest of the product, which other teams we have dependencies on, and the technical feasibility of what we're planning. This then helps us decide which engineers we need to do the actual work and how long we need them for. Sometimes once other engineers join to start on the implementation I step back, letting the new tech lead handle most of the decision making. Though I'm often having private conversations with them to help them if they need it. Sometimes a project has enough complexity and cross-team dependencies that I stay more actively involved, letting the tech lead focus on the decisions that need to be made for the implementation while I handle some of the burden of making sure that everything surrounding the project is running smoothly. These are the sorts of roles I took for the recent Tab Groups and Profile Management projects.
One of my new projects is a similar ask again, helping a new project get up and running. It has a lot of moving pieces both within Firefox and across the rest of the company. Identifying the hard parts so we can tackle them sooner is going to be very important. I'll be doing very little implementation work here, possibly some prototyping. Another of my new projects has me diving into a team that wants a more senior engineer around to just generally help them with making decisions on tricky projects and figure out their priorities. This will be more mentorship than development work which is something I've been wanting to do more.
What I see at Mozilla is that the more senior the engineer the less likely you'll be able to guess what they actually do on a day to day basis from their job title alone. Having not really worked at other organisations of this size I can't really say whether the same is true elsewhere, but I suspect that it is.
10 Jun 2025 10:12am GMT
Cameron Kaiser: macOS Tahoe
It's WWDC again, and Apple has turned the volume knob to add 11, jumping from 15 to 26 with macOS Tahoe. Meanwhile, Tahoe keeps Intel Mac owners blue by eliminating support for all but four models - and Intel MacBook Airs and minis are SOL. In fact, assuming macOS 27 Earlimart Ceres Lathrop drops Intel Macs completely (which seems most likely), that would have been six years of legacy support since Apple silicon was first surfaced in 2020, right up to seven for critical updates with Apple's typical year-over-year support history. Power Macs got from 2006 during Tiger to 2011 when Lion came out and Leopard updates ceased. Rosetta may have been a factor in Steve Jobs dropping the PowerPC like a bad habit, but it seems like Rosetta 2 (or at least the lack of Apple Intelligence) is making Tim Cook kick Intel to the curb nearly as quickly.
And Liquid Glass? Translucency? Transparency? Isn't that ... Aqua? The invisible menu bar and control centre is an interesting touch but sounds like a step backwards in accessibility (or at least visual contrast). I also look forward to the enhanced Spotlight actually finding anything in a way Sequoia on this M1 Air doesn't. Which will probably not make it to macOS 28 either.
[UPDATE: Apple has made it official - 27 will drop all Intel Macs, though 26 will get support until fall 2028, so Power Macs really did get screwed. Simultaneously, in or around macOS 28 Stockton, Rosetta 2 will become limited to only a subset of apps and the virtualization framework. Hope you didn't buy one of the new cheesegrater Intel Mac Pros, because you just got the Tim Cook version of IIvxed.]
10 Jun 2025 12:58am GMT
06 Jun 2025
Planet Mozilla
Firefox Nightly: Smarter Searches – These Weeks in Firefox: Issue 182
Highlights
- The Search team has enabled the new URL bar search experience by default 🎉 and fixed action mode layout. See bugs: 1967857, 1967721
- As of Firefox 140, users are able to hide the Extensions button
- You can right-click on the toolbar item and choose "Remove from Toolbar"
- This was remarkably complex to get right - see these bugs for details: Bug 1948258, Bug 1948259, Bug 1948260, Bug 1948261, Bug 1948263, Bug 1966935, Bug 1964857
- You can right-click on the toolbar item and choose "Remove from Toolbar"
- Custom wallpapers / background colours for New Tab are being rolled out across all channels - see the Firefox 139 release notes here!
Friends of the Firefox team
Resolved bugs (excluding employees)
Volunteers that fixed more than one bug
- Magnus Melin [:mkmelin]
New contributors (🌟 = first patch)
- 🌟 Jilvin Jacob added various status checks to the WriteBitmap() function to handle potential write failures when saving bitmap images when setting images as the desktop background on Windows.
- 🌟 Matthias Riffard replaced hardcoded 'transparent' values in test_moz_button.html with CSS variables from our design system.
- 🌟 Robert Kirkman modified the nsGTKRemoteServer initialization to prevent segmentation faults when both DBus is disabled and no display server is running.
- 🌟 Rohit Borse corrected an error message displayed when attempting to take an oversized full-page screenshot with our DevTools
- 🌟 vinhle000 removed the now unused _showPreOnboardingModal function and its related test from BrowserGlue, cleaning up deprecated onboarding code.
Project Updates
Add-ons / Web Extensions
WebExtensions Framework
- As part of work to allow the WPT WebExtensions tests (initiative coordinated with other browser vendors through the WebExtensions Community Group), changes needed to load/unload extensions from the WPT marionette executor have landed in Firefox 140 - Bug 1950636
- A Nightly-only regression that prevented access to DOM storage APIs from extension iframes injected by content scripts into webpages has been fixed in Nightly 140 - Bug 1965552
WebExtension APIs
- As part of the work on the tabGroups API namespace, fixes for a few additional Chrome incompatibilities reported by extension developers have been landed in Firefox 140 and uplifted to 139 - Bug 1963825, Bug 1963830, Bug 1965007
- Support for SameSiteStatus "unspecified" has been introduced in the Firefox WebExtensions cookies API - Bug 1550032
Addon Manager & about:addons
- More work around the Local AI models UI in about:addons has been landed in Firefox 140 (Bug 1944695, Bug 1947209, Bug 1961440, Bug 1967224)
- Fixed XPIProvider async shutdown timeout hit due to call to nsIClearData service triggered too late during an already initiated application shutdown - Bug 1967273
- Follow-ups to the NewTab built-in add-on incident hit in Firefox 138:
- New telemetry probe added in Firefox 139 to track failures to write the addonStartup.json.lz4 file back to disk (Bug 1966154), meant to help us confirm the effectiveness of the fix landed in Firefox 139 (Bug 1964281) and get better signals about other write errors that could lead to addonStartup.json.lz4 data to become stale.
- Changes applied to the XPIProvider to make sure that, in case of lost or stale addonStartup.json.lz4 data, add-ons from the app-builtin-addons (auto-installed builtins like NewTab) and app-system-addons (system-signed add-on updates got from the Application Update Service, a.k.a. Balrog) are still being detected and started early on the application startup - Bug 1964408 / Bug 1966736 (both landed in Firefox 140)
- To support serving system-signed updates to the NewTab built-in add-on outside of the release train, system-signed updates applied to built-in add-ons are no longer uninstalled when an existing Firefox profile is being upgraded to a new Firefox version - Bug 1966736 (landed in Firefox 140)
DevTools
- Rohit Borse fixed the warning message text when taking a screenshot that's too large (#1953285)
- Keith Cirkel [:keithamus] added CloseWatcher "close" and "cancel" event listeners breakpoints (#1966702)
- Nicolas Chevobbe [:nchevobbe] added pointerrawupdate to Event Listener Breakpoints (#1957000)
- Holger Benl [:hbenl] fixed some rendering issue in the Debugger sources tree (#1967248)
- Emilio Cobos Álvarez (:emilio) fixed a regression where painting was blocked when the Debugger was paused (#1967931)
- Alexandre Poirot [:ochameau] fixed a crash that was happening when navigating to a privileged page from about:debugging when connected to Firefox for Android (#1963915)
- Nicolas Chevobbe [:nchevobbe] improved the inspector "search HTML" feature by allowing to use pseudo-element selectors (#1871881) and fixing autocomplete suggestions for pseudo elements (#1542277)
- Hubert Boma Manilla (:bomsy) fixed an issue in the Debugger where it wouldn't scroll to expected location on pause when there was an active search (#1962417)
WebDriver BiDi
- Henrik modified the code that syncs the running state of Marionette and the Remote Agent - exposed to websites via the navigator.webdriver Web IDL attribute - between the parent and web content processes, so that it now runs asynchronously and no longer risks blocking the parent process.
- Julian fixed a bug for our browsing context events which were unexpectedly emitted for webextension Browsing Contexts - at the moment we only emit events for regular content Browsing Contexts.
- Olli Pettay improved the Actions' implementation in both Marionette and WebDriver BiDi to prevent microtasks from being blocked while individual events are dispatched.
- Sasha added support for "acceptInsecureCerts" argument to "browser.createUserContext" command. This argument allows clients to disable or enable certificate related security settings for a specific user context (aka Firefox container) and override the settings specified for a session.
- Julian implemented a new browsing context event, browsingContext.navigationCommitted, which should be emitted as soon as a new document has been created for a navigation. Together with our other navigation events (navigationStarted, navigationFailed) this allows clients to know that a navigation is going to be completed.
- Henrik released mozdownload 1.30.0 with added support for Python 3.13.
Lint, Docs and Workflow
- Our ESLint configuration is now using the "flat" configuration.
- You may need to restart your editor after updating.
- (see above!) If you've worked with aboutwelcome / asrouter / newtab code, you may need to re-install the node modules for those components, e.g. ./mach npm ci -prefix browser/extensions/newtab
- Next steps are to upgrade to the latest v9 ESLint in stages to make the upgrades simpler. Bug for ESLint v9.6.0.
- Mark Kennedy enabled the lit rule no-invalid-html.
Migration Improvements
- We've disabled Payment Method import for Chromium-based Microsoft Edge profiles due to application-bound encryption changes. We're currently collaborating with the Credential Management team to find creative, sustainable ways to make migrating from other browsers easier.
New Tab Page
- Lots of visual fixes for the "Sections" UI that we've been working on. You can manually check out Sections by setting browser.newtabpage.activity-stream.discoverystream.sections.enabled to true
Picture-in-Picture
- kpatenio fixed an issue with the cursor not hiding with other controls on fullscreen PiP windows (bug)
- kpatenio also fixed the context menu not appearing after ctrl + click over the PiP toggle on macOS (bug)
Search and Navigation
- Drew, Daisuke and Yazan fixed bugs related to suggestions favicons, sponsored label, telemetry, and enabling the Firefox Suggest, as part of its geo expansion into regions such as UK. Bugs: 1966811, 1964392, 1966328, 1966328, 1948143, 1964390, 1964979
- Mak is working on semantic history search for a future experiment. Bugs:1967985, 1968020 1967228, 1965225
- Dao fixed accessibility issue for matching tab groups when searching via ULRbar 1963884 and he's been working on bugs related to offering tab groups in address bar 1966140, 1966337
- Mortiz is working on bugs related to on adding custom search engine dialog in about:preferences#search and is enabled by default (see 1964507 and 1967739)
- Standard8 has enabled the Rust-backed engine selector for late Beta and Release 1967490
- jteow and Standard8 are working on TypeScript definitions 1966899, 1964675, 1966237, 1963781
Storybook/Reusable Components/Acorn Design System
- Graph on arewedesigntokensyet and updated how we determine token usage
- Components in development:
- new component on the way, moz-breadcrumbs
- New single-select listbox type for moz-visual-picker
- Icon support for moz-select coming soon
06 Jun 2025 8:52pm GMT
Karl Dubost: Les Liaisons Dangereuses Or The Wrong Love For Proxy Detections
The temptation is high. The desire for shortcuts is permanent. But the story is often full of painful moments without any winners. "Les liaisons dangereuses" of detecting browsers and devices are common.
ce n'est pas à l'illusion d'un moment à régler le choix de notre vie. - Les liaisons dangereuses. Choderlos de Laclos. 1782
which can be translated as "it is not for the illusion of a moment to govern the choice of a lifetime."
window.installTrigger
Firefox (Gecko) had the property window.installTrigger
to signal that a web extension could be installed. This was a Firefox-only property. Soon enough, obviously, people started to use it as a signal that the browser accessing the website was Firefox.
if ("installTrigger" in window) {
// do something for Firefox
} else {
// do something for others
}
When the property was retired, because it was not standard and used for things which were completely different from its initial purpose, websites started to break. It had to be shimmed. Gecko had to imitate the property so that some websites would continue to work.
Another example -webkit-touch-callout
-webkit-touch-callout
was implemented in 2013 in WebKit to give the possibility for Web developers to opt out of the contextual menu given on iPhone during a long press. The long press on a link makes it possible to also get a preview of the page behind the link.
-webkit-touch-callout: none
permits web developers to cancel this behavior when, for example, developing a web app they need to be able to long-press user gestures such as a drag and drop.
But I discovered today that this was used as a proxy detection for iPhone in CSS. This is bad. Some CSS stylesheets contain a combination of @support
and -webkit-touch-callout: none
to have a specific behavior in their CSS.
@supports (-webkit-touch-callout: none) {
body {
/* DON'T DO THAT! */
}
}
This has many implications for the future. Here are some examples of how it can become very sour.
- One day, the CSS WG may decide to standardize
touch-callout
so that web developers can opt out of other browsers having contextual menus. Given the spread and the legacy of-webkit-touch-callout
, some browsers might have to alias the-webkit
version so it is working for websites not updated. Suddenly, the CSS targeting iPhone applies to all browsers. - Or the opposite story of this where because the term is so misused and it will break so much stuff that a new term needs to be coined, leaving plenty of CSS on the Web with a useless term which is not working exactly like the initial idea. It also means that it forces WebKit to maintain the code for the old property or to shim it like Firefox did with the risk to have confusion in between the place where it was used rightly and where it was wrong.
These are only a few examples of the complexity…
- fullscreen clickable with orb
- Looking for the same feature on Android
- To prevent text/image selection or this one
- To prevent the orb for drag'n drop and another one
- People complaining about framework disabling the menu
Do Not Misuse Terms
There are plenty of other examples of this type, such as the abuse of maxTouchPoints
(this one will be (not) "funny" if touch screens on desktop computers become more prevalent) or window.standalone
which created plenty of issues when web apps for desktop computers became a thing.
We all know the benefits of feature detection, we made a lot of progress as a community to go away as much as possible from User Agent detection. It's not perfect. There are always difficult trade-offs.
L'humanité n'est parfaite dans aucun genre, pas plus dans le mal que dans le bien. Le scélérat a ses vertus, comme l'honnête homme a ses faiblesses. - Les liaisons dangereuses. Choderlos de Laclos. 1782
Something along "Humanity is not perfect in any fashion; no more in the case of evil than in that of good. The criminal has his virtues, just as the honest man has his weaknesses."
Stay away from proxy detections, aka using a feature of the Web platform which seems a solution, at a point in time, to detect a specific browser or device. It clutters the Web platform. It makes it very hard to have a better Web without plenty of hacks here and there.
Use feature detections for what they are, detecting the feature to affect the behavior of this specific feature.
See Also
- Detecting touch: it's the 'why', not the 'how' by Patrick H. Lauke and Robert Nyman. 2013.
Otsukare!
06 Jun 2025 7:37am GMT