Working on the mobile Firefox team gives you the opportunity to touch on many different parts of the browser space. You often need to test the interaction between web content and the application integration's to another component, say for example, a site registering for a WebPush subscription and Firefox using Firebase Cloud Messaging to deliver the encrypted message to the end-user. Hunting around for an example to validate everything fine and dandy takes time.
Sometimes a simple test site for your use case is helpful for initial validation or comparison against other browsers.
Below is a list of tests that I've used in the past (in no particular order):
Push notifications requires a server to send a notification to the client (not the same as a WebNotification), so you can use this WebPush test site for validating just that.
There are Too Many™ different prompt and input element types. The MDN docs have the best collection of all of them.
Forms and Autocomplete
There are various form types and various heuristics to trigger completion options, so they deserve their own section. The more (test sites) the merrier!
Sign-up and login forms behave differently, so they are handy to test separately. For example, autofilling a generated password is useful on a registration form but not on a login one.
Make your own
If you need to make your own, try to write out the code yourself so you can understand the reduced test case. If it's not straight-forward, try using the Testcase Reducer by Thomas Wisniewski.
Comments
With an account on the Fediverse or Mastodon, you can respond to this post. Since Mastodon is decentralized, you can use your existing account hosted by another Mastodon server or compatible platform if you don't have an account on this one. Known non-private replies are displayed below.
Learn how this was implemented from the original source here.
<noscript><p>Loading comments relies on JavaScript. Try enabling JavaScript and reloading, or visit <a href="https://mindly.social/@jonalmeida/115937256635328128">the original post</a> on Mastodon.</p></noscript>
<noscript>You need JavaScript to view the comments.</noscript> &>"'
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.
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.
Always wanted to contribute to open-source projects but did not know where to start? Every week we highlight some tasks from the Rust community for you to pick and get started!
Some of these tasks may also have mentors available, visit the task page for more information.
If you are a Rust project owner and are looking for contributors, please submit tasks here or through a PR to TWiR or by reaching out on Bluesky or Mastodon!
Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.
If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a PR to TWiR or by reaching out on Bluesky or Mastodon!
This week saw a very nice win from doing overall less work in the compiler (https://github.com/rust-lang/rust/pull/151382). There were a few regressions, but only in artificial stress tests, we are keeping an eye on them.
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.
AI is here, and has started to define how we search, create, communicate - and how the web itself works. Some of you love AI, but want it to work better for yourselves and society. Some of you hate it, and don't want any of it.
We get it.
We also know, as Mozilla, that the future is being decided now. The big tech players are racing to lock down and control AI, and make sure it works on their terms, not ours.
Updates on what's new and coming with our core products, Firefox and Thunderbird.
A look at how Mozilla is investing in open source AI and privacy preserving tech.A snapshot of our financials, and how we allocate resources to balance mission and money
Stories from people across Mozilla and our community who are building tools, products, and movements that push AI in a better direction
And, a commitment to giving you a choice in everything we do - including the option to say no to AI altogether.
All of this is guided by Mozilla's double bottom line: advancing the public interest and building sustainable businesses. This model lets us invest patiently, say no to extractive approaches, and support ecosystems that would otherwise struggle to exist.
A vision for what comes next
The future of AI - and the future of the web - is ours to define. We want to make that future to be one where humanity thrives, and technology helps out.
If you believe the future of AI should be human-centered, transparent, and open, we invite you to explore the report, share with your community and build that future with us.
Huge thanks to :arai for working on this feature! It's currently not enabled by default but will be soon. It can be enabled through window.toggleDarkMode().
[arai-a] Add a menu to copy the Marker Table as text (#5732)
[arai-a] Do not apply sticky tooltip on double click (#5754)
[Markus Stange] Allow seeing different assembly code for the same function (#5349)
[fatadel] Align double-click behavior of stack chart with flame graph (#5782)
[Markus Stange] Add a Focus Self transform (#5774)
[Markus Stange] Fix "scroll to hotspot" functionality in the source view + assembly view (#5759)
[Nazım Can Altınova] Enable the Turkish locale in production (#5786)
Who will build the next version of the web? Mozilla wants to make it more likely that it's you. We are committing time and resources to bring experienced builders into Mozilla for a short, programmed period, to work with our New Products leaders to build tools and products for the next version of the web.
A different program from a different kind of company
Our mission at Mozilla is to ensure the internet is a global public resource, open and accessible to all. We know that there are a lot of gifted, experienced and thoughtful technologists, designers, and builders who care as deeply about the internet as we do - but seek a different environment to explore what's possible than what they might find across the rest of the tech industry.
Pioneers is intentionally structured to make it possible for those who don't typically get the opportunity to create new products to participate. The program is paid, flexible (i.e. you can do it part-time if needed), and bounded. We're not asking you to gamble your livelihood in order to explore how we can improve the internet.
This matters to me
My own career advanced the most dramatically in moments when change was piling on top of change and most people couldn't grasp the compounding effects of these shifts. That's why I stepped up to start an independent blogging company back in 2002 (Gizmodo) and again in 2004 (Engadget).
It's also why, a lifetime later, I joined Mozilla to lead New Products, where I've had the good fortune of supporting the development of meaningful new Mozilla tools like Solo, Tabstack, 0DIN, and an enterprise version of Firefox.
Changing the game
We've designed Pioneers to make space for technologists - professionals comfortable working across code, product, and systems - to collaborate with Mozilla on foundational ideas for AI and the web in a way that reflects these shared values.
We're looking for people to work with; this is not a contest for ideas, and you don't apply with a pitch deck. Our vision:
Pioneers are paid. Participants receive compensation for their time and work.
It's flexible, designed so participants can be in the program and continue to work on existing commitments. You don't have to put your life on hold.
It's hands-on. Builders work closely with Mozilla leaders to prototype and pressure-test concepts.
It's bounded. The program is time-limited and focused, with clear expectations on both sides.
It's real. Some ideas will move forward inside Mozilla. Some will not - and they'll still be valuable. If it makes sense, there will be an opportunity for you to join Mozilla full-time to bring your concept to market.
Applications are open Monday, Jan. 26 and close Monday, Feb. 16, 2026.
Pioneers isn't an accelerator, and it isn't a traditional residency. It's a way to explore foundational ideas for AI and the web in a high-trust environment, with the possibility of continuing that work at Mozilla.
If this sounds like the kind of work you want to do, we want to hear from you. Hopefully, by reading to the end of this post, you're either thinking of applying yourself - or know someone who should. I encourage you to check out (and share) Mozilla Pioneers, thanks!
Shout-out to new contributor Lorenz A, who fixed almost 70 bugs over the past few weeks! Most of this work was modernizing some of our DevTools code to use ES6 classes (example)
Split View has been enabled by default in Nightly! You can right click on a tab to add it to a split view, and from there select the other tab you'd like to view in the split. Or, multi-select 2 tabs with Ctrl/Cmd, and choose "Open in Split View" from the tab context menu
@rejects for indicating if an async (or promise returning) function may reject. This is not standard in JSDoc, and TypeScript doesn't have an equivalent. Hence for now, this is an alternative way that we can use to at least document the expectations.
Quick update this week - OS Integration intern Nishu is traveling a long road to add support for storing profiles in the secure MacOS App Group container (bug 1932976), over the break she fixed
Daisuke fixed multiple address bar bugs, including broken "switch to [tab group]" behaviour, persisted search terms, and a missing unified search button in private new tabs (2002936, 1968218, 1961568)
Jeremy Swinarton aligned the tab note editor to spec in Tab note content textarea spec, refining textarea sizing, focus/blur save behavior, and keyboard shortcuts for consistent editing and better a11y across platforms.
Stephen Thompson added a one-click entry point in hover previews via Add note button to tab hover preview, surfacing Tab Notes in the preview tooltip (behind notes and hover-preview prefs) with full keyboard focusability and theme-aware iconography.
Stephen Thompson hooked History API updates in Update canonical URL for tab note on pushState to recompute the canonical URL on pushState/replaceState/popstate, preventing stale or misplaced notes during SPA navigations.
Last year brought a wealth of new features and fixes to Firefox on Linux. Besides numerous improvements and bug fixes, I want to highlight some major achievements: HDR video playback support, reworked rendering for fractionally scaled displays, and asynchronous rendering implementation. All this progress was enabled by advances in the Wayland compositor ecosystem, with new features implemented by Mutter and KWin.
HDR
The most significant news on the Wayland scene is HDR support, tracked by Bug 1642854. It's disabled by default but can be enabled in recent Wayland compositors using the gfx.wayland.hdr preference at about:config (or by gfx.wayland.hdr.force-enabled if you don't have an HDR display).
HDR mode uses a completely different rendering path, similar to the rendering used on Windows and macOS. It's called native rendering or composited rendering, and it places specific application layers directly into the Wayland compositor as subsurfaces.
The first implementation was done by Robert Mader (presented at FOSDEM), and I unified the implementation for HDR and non-HDR rendering paths as new WaylandSurface object.
The Firefox application window is actually composited from multiple subsurfaces layered together. This design allows HDR content like video frames to be sent directly to the screen while the rest of the application (controls and HTML page) remains in SDR mode. It also enables power-efficient rendering when video frames are decoded on the graphics card and sent directly to the screen (zero-copy playback). In fullscreen mode, this rendering is similar to mpv or mplayer playback and uses minimal power resources.
I also received valuable feedback from AMD engineers who suggested various improvements to HDR playback. We removed unnecessary texture creation over decoded video frames (they're now displayed directly as wl_buffers without any GL operations) and implemented wl_buffer recycling as mpv does.
For HDR itself (since composited rendering is available for any video playback), Firefox on Wayland uses the color-management-v1 protocol to display HDR content on screen, along with BT.2020 video color space and PQ color transfer function. It uses 10-bit color vectors, so you need VP9 version 2 to decode it in hardware. Firefox also implements software decoding and direct upload to dmabuf frames as a fallback.
The basic HDR rendering implementation is complete, and we're now in the testing and bug-fixing phase. Layered rendering is quite tricky as it involves rapid wl_surface mapping/unmapping and quick wl_buffer switches, which are difficult to handle properly. HDR rendering of scaled surfaces is still missing-we need fractional-scale-v2 for this (see below), which allows positioning scaled subsurfaces directly in device pixels. We also need to test composited/layered rendering for regular web page rendering to ensure it doesn't drain your battery. You're very welcome to test it and report any bugs you find.
Fractional scale
The next major work was done for fractional scale rendering, which shipped in Firefox 147.0. We updated the rendering pipeline and widget sizing to support fractionally scaled displays (scales like 125%, etc.). This required reworking the widget size code to strictly upscale window/surface sizes and coordinates and never downscale them, as downscaling introduces rounding errors.
Another step was identifying the correct rounding algorithm for Wayland subsurfaces and implementing it. Wayland doesn't define rounding for it, only for toplevel windows, so we're in a gray area here. I was directed to Stable rounding by Michel Daenzer. It's used by Mutter and Sway so Firefox implements it for those two compositors while using a different implementation for KWin. This may be updated to use the fractional-scale-v2 protocol when it becomes available.
Fractional scaling is enabled by default, and you should see crisp and clear output regardless of your desktop environment or screen scale.
Asynchronous rendering
Historically, Firefox disabled and re-enabled the rendering pipeline for scale changes, window create/destroy events, and hide/show sequences. This stems from Wayland's architecture, where a Wayland surface is deleted when a window becomes invisible or is submitted to the compositor with mismatched size/scale (e.g., 111 pixels wide at 200% scale).
Such rendering disruptions cause issues with multi-threaded rendering-they need to be synchronized among threads, and we must ensure surfaces with the wrong scale aren't sent to the screen, as this leads to application crashes due to protocol errors.
Firefox 149.0 (recent nightly) has a reworked Wayland painting pipeline (Bug 1739232) for both EGL and software rendering. Scale management was moved from wl_buffer fixed scale to wp_viewport, which doesn't cause protocol errors when size/scale doesn't match (producing only blurred output instead of crashes).
We also use a clever technique: the rendering wl_surface / wl_buffer / EGLWindow is created right after window creation and before it's shown, allowing us to paint to it offscreen. When a window becomes visible, we only attach the wl_surface as a subsurface (making it visible) and remove the attachment when it's hidden. This allows us to keep painting and updating the backbuffer regardless of the actual window status, and the synchronized calls can be removed.
This brings speed improvements when windows are opened and closed, and Linux rendering is now synchronized with the Windows and macOS implementations.
… and more
Other improvements include a screen lock update for audio playback, which allows the screen to dim but prevents sleep when audio is playing. We also added asynchronous Wayland object management to ensure we cleanly remove Wayland objects without pending callbacks, along with various stability fixes.
And there are even more challenges waiting for us Firefox Linux hackers:
Wayland session restore (session-restore-v1) to restore Firefox windows to the correct workspace and position.
Implement drag and drop for the Firefox main window, and possibly add a custom Wayland drag and drop handler to avoid Gtk3 limitations and race conditions.
Utilize the fractional-scale-v2 protocol when it becomes available.
Investigate using xdg-positioner directly instead of Gtk3 widget positioning to better handle popups.
Vulkan video support via the ffmpeg decoder to enable hardware decoding on NVIDIA hardware.
And of course, we should plan properly before we even start. Ready, Scrum, Go!
From designers to writers, multi-media producers and more - if you perform creative work on a computer there's a good chance you can find a browser extension to improve your process. Here's a mix of practical Firefox extensions for a wide spectrum of creative cases…
Extensions for visual artists, animators & designers
Awesome Screenshot & Screen Recorder
There are a lot of screenshot and recording tools out there, but few offer the sweet combination of intuitive control and a deep feature set like Awesome Screenshot & Screen Recorder.
An ideal tool if you do a lot of screen recording for things like tutorials, the extension also integrates with your computer's microphone should you need a voice component.
The easily accessible pop-up menu puts you in control of everything, including the screenshot feature (full page, selected area, or just the visible part). You can also annotate screenshots with text and graphics, blur unwanted images, highlight sections, and more.
Save and share everything with just a couple quick mouse clicks.
Image Max URL
Find a great image online, but it's too small or the resolution is poor quality? No problem. Image Max URL can help you find a batter version or even the original.
Scouring more than 10,000 websites in its database (including most social media sites, news outlets, WordPress sites and various image hosting services), Image Max URL will search for any image's original version and short of that, look for high res alternatives.
Font Finder
Every designer has seen a beautiful font in the wild and thought - I need that font for my next project! But how to track it down? Try Font Finder.
Investigating your latest favorite font doesn't require a major research project anymore. Font Finder gives you quick point-and-click access to:
Typography analysis. Font Finder reveals all relevant typographical characteristics like color, spacing, alignment, and of course font name.
Copy information. Any portion of the font analysis can be copied to a clipboard for convenient pasting anywhere.
Inline editing. All font characteristics (e.g. color, size, type) on an active element can be changed directly on the page.
Search by Image
If you're a designer who scours the web looking for images to use in your work, but gets bogged down researching aspects like intellectual property ownership or subject matter context, you might consider an image search extension like Search by Image.
If you're unfamiliar with the concept of image search, it works like text-based search, except your search starts with an image instead of a word or phrase. The Search by Image extension leverages the power of 30+ image search engines like Tineye, Google, Bing, Yandex, Getty Images, Pinterest, and others. This tool can be an incredible time saver when you can't leave any guesswork to images you want to repurpose.
Search by Image makes it simple to find the origins of almost any image you encounter on the web.
Extended Color Management
Built in partnership between Mozilla and Industrial Light & Magic, this niche extension performs an invaluable function for animation teams working remotely. Extended Color Management calibrates colors on Firefox so animators working from different home computer systems (which might display colors differently based on their operating systems) can trust the whole team is looking at the same exact shades of color through Firefox.
Like other browsers, Firefox by default utilizes color management (i.e. the optimization of color and brightness) from the distinct operating systems of the computers it runs on. The problem here for professional animators working remotely is they're likely collaborating from different operating system - and seeing slight but critically different variations in color rendering. Extended Color Management simply disables the default color management tools so animators with different operating systems are guaranteed to see the same versions of all colors, as rendered by Firefox.
Measure-it
What a handy tool for designers and developers - Measure-it lets you draw a ruler across any web page to get precise dimensions in pixels.
Access the ruler from a toolbar icon or keyboard shortcut. Other customization features include setting overlay colors, background opacity, and pop-up characteristics.
More than just a spell checker, LanguageTool also…
Recognizes common misuses of similar sounding words (e.g. there/their, your/you're)
Works on social media sites and email
Offers alternate phrasing and style suggestions for brevity and clarity
Please note LanguageTool's full feature set is free during a 14-day trial period, then payment is required.
Dark Background and Light Text
If you spend all day (and maybe many nights) staring at a screen to scribe away, Dark Background and Light Text may ease strain on your eyes.
By default the extension flips the colors of every web page you visit, so your common light colored backgrounds become text colors and vice versa. But all color combinations are customizable, freeing you to adjust everything to taste. You can also set exceptions for certain websites that have a native look you prefer.
Dictionary Anywhere
It's annoying when you have to navigate away from a page just to check a word definition elsewhere. Dictionary Anywhere fixes that by giving you instant access to word definitions without leaving the page you're on.
Just double-click any word to get a pop-up definition right there on the page. Available in English, French, German, and Spanish. You can even save and download word definitions for later offline reference.
Dictionary Anywhere - no more navigating away from a page just to get a word check.
LeechBlock NG
Concentration is key for productive writing. Block time-wasting websites with LeechBlock NG.
This self-discipline aid lets you select websites that Firefox will restrict during time parameters you define - hours of the day, days of the week, or general time limits for specific sites. Even cooler, LeechBlock NG lets you block just portions of websites (for instance, you can allow yourself to see YouTube video pages but block YouTube's homepage, which sucks you down a new rabbit hole every time!).
Gyazo
If your writing involves a fair amount of research and cataloging content, consider Gyazo for a better way to organize all the stuff you clip and save on the web.
Clip entire web pages or just certain elements, save images, take screenshots, mark them up with notes, and much more. Everything you clip is automatically saved to your Gyazo account, making it accessible across devices and collaborative teams.
With its minimalist pop-up interface, Gyazo makes it easy to clip elements, sections, or entire web pages.
We hope one of these extensions improves your creative output on Firefox! Explore more great media extensions on addons.mozilla.org.
Servo 0.0.4 and our December nightly builds now support multiple windows (@mrobinson, @mukilan, #40927, #41235, #41144)! This builds on features that landed in Servo's embedding API last month. We've also landed support for several web platform features, both old and new:
'contrast-color()' in CSS color values (@webbeef, #41542)
For better compatibility with older web content, we now support vendor-prefixed CSS properties like '-moz-transform' (@mrobinson, #41350), as well as window.clientInformation (@Taym95, #41111).
When using servoshell on Windows, you can now see --help and log output, as long as servoshell was started in a console (@jschwe, #40961).
Servo diagnostics options are now accessible in servoshell via the SERVO_DIAGNOSTICS environment variable (@atbrakhi, #41013), in addition to the usual -Z / --debug= arguments.
Servo's devtools now partially support the Network > Security tab (@jiang1997, #40567), allowing you to inspect some of the TLS details of your requests. We've also made it compatible with Firefox 145 (@eerii, #41087), and use fewer IPC resources (@mrobinson, #41161).
We now use the system root certificates by default (@Narfinger, @mrobinson, #40935, #41179), on most platforms. If you don't want to trust the system root certificates, you can instead continue to use Mozilla's root certificates with --pref network_use_webpki_roots. As always, you can also add your own root certificates via Opts::certificate_path (--certificate-path=).
Servo, the main handle for controlling Servo, is now cloneable for sharing within the same thread (@mukilan, @mrobinson, #41010). To shut down Servo, simply drop the last Servo handle or let it go out of scope. Servo::start_shutting_down and Servo::deinit have been removed (@mukilan, @mrobinson, #41012).
We can now evict entries from our HTTP cache (@Narfinger, @gterzian, @Taym95, #40613), rather than having it grow forever (or get cleared by an embedder). about:memory now tracks SVG-related memory usage (@d-kraus, #41481), and we've fixed memory leaks in <video> and <audio> (@tharkum, #41131).
We've fixed a crash that occurs when <link rel="shortcut icon"> has an empty 'href' attribute, which affected chiptune.com (@webbeef, #41056), and we've also fixed crashes in:
Thanks again for your generous support! We are now receiving 7110 USD/month (+10.5% over November) in recurring donations. This helps us cover the cost of our speedyCIandbenchmarkingservers, one of our latest Outreachy interns, and funding maintainer work that helps more people contribute to Servo.
Servo is also on thanks.dev, and already 30 GitHub users (+2 over November) that depend on Servo are sponsoring us there. If you use Servo libraries like url, html5ever, selectors, or cssparser, signing up for thanks.dev could be a good way for you (or your employer) to give back to the community.
We now have sponsorship tiers that allow you or your organisation to donate to the Servo project with public acknowlegement of your support. A big thanks from Servo to our newest Bronze Sponsors: Anthropy, Niclas Overby, and RxDB! If you're interested in this kind of sponsorship, please contact us at join@servo.org.
Servo developers Martin Robinson (@mrobinson) and Delan Azabani (@delan) will also be attending FOSDEM 2026, so it would be a great time to come along and chat about Servo!
YouTube wants you to experience YouTube in prescribed ways. But with the right browser extension, you're free to alter YouTube to taste. Change the way the site looks, behaves, and delivers your favorite videos.
Return YouTube Dislike
Do you like the Dislike? YouTube removed the display that reveals the number of thumbs-down Dislikes a video has, but with Return YouTube Dislike you can bring back the brutal truth.
"Does exactly what the name suggests. Can't see myself without this extension. Seriously, bad move on YouTube for removing such a vital tool."
Though its primary function is to automatically play all YouTube videos in their highest possible resolution, YouTube High Definition has a few other fine features to offer.
In addition to automatic HD, YouTube High Definition can…
Customize video player size
HD support for clips embedded on external sites
Specify your ideal resolution (4k - 144p)
Set a preferred volume level
Also automatically plays the highest quality audio
YouTube NonStop
So simple. So awesome. YouTube NonStop remedies the headache of interrupting your music with that awful "Video paused. Continue watching?" message.
Works on YouTube and YouTube Music. Now you're free to navigate away from the YouTube tab for as long as you like and never worry about music interruption again.
YouTube Screenshot Button
If you take a lot of screenshots on YouTube, then the aptly titled YouTube Screenshot Button is worth your time.
You'll find a "Screenshot" button conveniently located on the control panel of videos, or at the top of the screen on Shorts (or you can use custom keystrokes), so it's always easy to snap a quick shot. Set preferences to automatically download screenshots as JPEG or PNG files.
Instant serenity for YouTube! Unhook strips away unwanted distractions like the promotional sidebar, end-screen suggestions, trending tab, and much more.
More than two dozen customization options make this an essential extension for anyone seeking escape from YouTube rabbit holes. You can even hide notifications and live chat boxes.
"This is the best extension to control YouTube usage, and not let YouTube control you."
If you subscribe to a lot of YouTube channels PocketTube is a fantastic way to organize all your subscriptions by themed collections.
Group your channel collections by subject, like "Sports," "Cooking," "Cat videos," etc. Other key features include…
Add custom icons to easily identify channel collections
Customize your feed so you just see videos you haven't watched yet and prioritize videos from certain channels
Integrates seamlessly with YouTube homepage
Sync collections across Firefox/Android/iOS using Google Drive and Chrome Profiler
PocketTube keeps your channel collections neatly tucked away to the side.
AdBlocker for YouTube
It's not just you who's noticed a lot more ads lately. Regain control with AdBlocker for YouTube.
The extension very simply and effectively removes both video and display ads from YouTube. Period. Enjoy a faster, more focused YouTube.
SponsorBlock
It's a terrible experience when you're enjoying a video or music on YouTube and you're suddenly interrupted by a blaring ad. SponsorBlock solves this problem in a highly effective and original way.
Leveraging the power of crowd sourced information to locate where - precisely - interruptive sponsored segments appear in videos, SponsorBlock learns where to automatically skip sponsored segments with its ever growing database of videos. You can also participate in the project by reporting sponsored segments whenever you encounter them (it's easy to report right there on the video page with the extension).
SponsorBlock can also learn to skip non-music portions of music videos and intros/outros, as well. If you'd like a deeper dive of SponsorBlock we profiled its developer and open source project on Mozilla Distilled.
We hope one of these extensions enhances the way you enjoy YouTube. Feel free to explore more great media extensions on addons.mozilla.org.
Please note some of the information provided in this report may be subject to change as we are sometimes sharing information about projects that are still in early stages and are not final yet.
Happy New Year!
What's new or coming up in Firefox desktop
Preferences updates for 148
A new set of strings intended for inclusion in the preferences page of 148 landed recently in Pontoon on January 16. These strings, focused around controls of AI features, landed ahead of the UX and functionality implementation so are not currently testable. These should be testable within the coming week in Nightly and Beta.
Split view coming in 149
A new feature, called "split view", is coming to Firefox 149. This feature and its related strings have already started landing at the end of 2025. You can test the feature now in Nightly, just right click a tab and select "Add Split View". (If the option isn't showing in your Nightly, then open about:config and ensure "browser.tabs.splitView.enabled" is set to true.
What's new or coming up in mobile
Android onboarding testing updates
It is now possible to test the onboarding experience in Firefox for Android without using a simulator or wiping your existing data. We are currently waiting for engineers to update the default configuration to align with the onboarding experience in Firefox 148 and newer. We hope this update will land in time for the release of 148, and we will communicate the change via Pontoon as soon as that's available.
In the meantime, please review the updated testing documentation to see how to trigger the onboarding flow. Note that some UI elements will display string identifiers instead of translations until the configuration is updated.
Firefox for iOS localization screenshots
We heard your feedback about the screenshot process for Firefox for iOS. Thanks to everyone who answered the survey at the end of last year.
Screenshots are now available as a gallery for each locale. There is no longer a need to download and decompress a local zip file. You can browse the current screenshots for your locale, and use the links at the top to review the full history or compare changes between runs (generated roughly every two weeks).
A reminder that links to testing environments and instructions are always available from the project header in Pontoon.
What's new or coming up in web projects
Firefox.com
We're planning some changes to how content is managed on firefox.com, and these updates will have an impact on our existing localization workflows. Once the details are finalized, we'll share more information and notify you directly in Pontoon.
What's new or coming up in Pontoon
Pontoon infrastructure update
Behind the scenes, Pontoon has recently completed a major migration from Heroku to Google Cloud Platform. While this change should be largely invisible to localizers in day-to-day use, it brings noticeable improvements in performance, reliability, and scalability, helping ensure a smoother experience as contributor activity continues to grow. Huge thanks go to our Cloud Engineering partners for supporting this effort over the past months and helping make this important milestone possible.
Friends of the Lion
Image by Elio Qoshi
Since relaunching the contributor spotlight blog series, we've published two more stories highlighting the people behind our localization work.
We featured Robb, a professional translator from Romania, whose love for words and her desire to help her mom keep up with modern technology has grown into a day-to-day commitment to making products and technology accessible in language that everyday people can understand.
We also spotlighted Andika from Indonesia, a long-time open source contributor who joined the localization community to ensure Firefox and other products feel natural and accessible for Indonesian-speaking users. His steady, long-term commitment to quality speaks volumes about the impact of thoughtful localization.
We'll be continuing this series and are always looking for contributors to feature. You can help us find the next localizer to spotlight by nominating one of your fellow community members. We'd love to hear from you!
Know someone in your l10n community who's been doing a great job and should appear here? Contact us and we'll make sure they get a shout-out!
Mozilla has always believed that technology should empower people.
That belief shaped the early web, when browsers were still new and the idea of an open internet felt fragile. Today, the technology is more powerful, more complex, and more opaque, but the responsibility is the same. The question isn't whether technology can do more. It's whether it helps people feel capable, informed, and in control.
As we build new products at Mozilla today, that question is where we start.
I joined Mozilla to lead New Products almost one year ago this week because this is one of the few places still willing to take that responsibility seriously. Not just in what we ship, but in how we decide what's worth building in the first place - especially at a moment when AI, platforms, and business models are all shifting at once.
Our mission - and mine - is to find the next set of opportunities for Mozilla and help shape the internet that all of us want to see.
Writing up to users
One of Mozilla's longest-held principles is respect for the people who use our products. We assume users are thoughtful. We accept skepticism as a given (it forces product development rigor - more on that later). And we design accordingly.
That respect shows up not just in how we communicate, but in the kinds of systems we choose to build and the role we expect people to play in shaping them.
You can see this in the way we're approaching New Products work across Mozilla today: Our current portfolio includes tools like Solo, which makes it easy for anyone to own their presence on the web; Tabstack, which helps developers enable agentic experiences; 0DIN, which pools the collective expertise of over 1400 researchers from around the globe to help identify and surface AI vulnerabilities; and an enterprise version of Firefox that treats the browser as critical infrastructure for modern work, not a data collection surface.
None of this is about making technology simpler than it is. It's about making it legible. When people understand the systems they're using, they can decide whether those systems are actually serving them.
Experimentation that respects people's time
Mozilla experiments. A lot. But we try to do it without treating talent and attention as an unlimited resource. Building products that users love isn't easy and requires us to embrace the uncertainty and ambiguity that comes with zero-to-one exploration.
Every experiment should answer a real question. It should be bounded. And it should be clear to the people interacting with it what's being tested and why. That discipline matters, especially now. When everything can be prototyped quickly, restraint becomes part of the craft.
Fewer bets, made deliberately. A willingness to stop when something isn't working. And an understanding that experimentation doesn't have to feel chaotic to be effective.
Creating space for more kinds of builders
Mozilla has always believed that who builds is just as important as what gets built. But let's be honest: The current tech landscape often excludes a lot of brilliant people, simply because the system is focused on only rewarding certain kinds of outcomes.
We want to unlock those meaningful ideas by making experimentation more practical for people with real-world perspectives. We're focused on lowering the barriers to building - because we believe that making tech more inclusive isn't just a nice-to-have, it's how you build better products.
A practical expression of this approach
One expression of this philosophy is a new initiative we'll be sharing more about soon: Mozilla Pioneers.
Pioneers isn't an accelerator, and it isn't a traditional residency. It's a structured, time-limited way for experienced builders to work with Mozilla on early ideas without requiring them to put the rest of their lives on hold.
The structure is intentional. Pioneers is paid. It's flexible. It's hands-on. And it's bounded. Participants work closely with Mozilla engineers, designers, and product leaders to explore ideas that could become real Mozilla products - or could simply clarify what shouldn't be built.
Some of that work will move forward. Some won't. Both outcomes are valuable. Pioneers exists because we believe that good ideas don't only come from founders or full-time employees, and that meaningful contribution deserves real support.
Applications open Jan. 26. For anyone interested (and I hope that's a lot of you) please follow us, share and apply. In the meantime, know that what's ahead is just one more example of how we're trying to build with intention.
Looking ahead
Mozilla doesn't pretend to have all the answers. But we're clear about our commitments.
As we build new products, programs, and systems, we're choosing clarity over speed, boundaries over ambiguity, and trust that compounds over time instead of short-term gains.
The future of the internet won't be shaped only by what technology can do - but by what its builders choose to prioritize. Mozilla intends to keep choosing people.
The Rust team is happy to announce a new version of Rust, 1.93.0. Rust is a programming language empowering everyone to build reliable and efficient software.
If you have a previous version of Rust installed via rustup, you can get 1.93.0 with:
If you'd like to help us out by testing future releases, you might consider updating locally to use the beta channel (rustup default beta) or the nightly channel (rustup default nightly). Please report any bugs you might come across!
What's in 1.93.0 stable
Update bundled musl to 1.2.5
The various *-linux-musl targets now all ship with musl 1.2.5. This primarily affects static musl builds for x86_64, aarch64, and powerpc64le which bundled musl 1.2.3. This update comes with several fixes and improvements, and a breaking change that affects the Rust ecosystem.
For the Rust ecosystem, the primary motivation for this update is to receive major improvements to musl's DNS resolver which shipped in 1.2.4 and received bug fixes in 1.2.5. When using musl targets for static linking, this should make portable Linux binaries that do networking more reliable, particularly in the face of large DNS records and recursive nameservers.
Allow the global allocator to use thread-local storage
Rust 1.93 adjusts the internals of the standard library to permit global allocators written in Rust to use std's thread_local! and std::thread::current without re-entrancy concerns by using the system allocator instead.
Previously, if individual parts of a section of inline assembly needed to be cfg'd, the full asm! block would need to be repeated with and without that section. In 1.93, cfg can now be applied to individual statements within the asm! block.
asm!(// or global_asm! or naked_asm!
"nop",#[cfg(target_feature ="sse2")]"nop",// ...
#[cfg(target_feature ="sse2")] a =const123,// only used on sse2
);
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.
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.
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.
No Calls for participation were submitted this week.
If you are a Rust project owner and are looking for contributors, please submit tasks here or through a PR to TWiR or by reaching out on Bluesky or Mastodon!
Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.
If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a PR to TWiR or by reaching out on Bluesky or Mastodon!
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.
I might suspect that if you are lumping all statically-typed languages into a single bucket without making particular distinction among them, then you might not have fully internalized the implications of union (aka Rust enum aka sum) typed data structures combined with exhaustive pattern matching.
I like to call it getting "union-pilled" and it's really hard to accept otherwise statically-typed languages once you become familiar.
Time flies! Six months have passed since our last crates.io development update, so it's time for another one. Here's a summary of the most notable changes and improvements made to crates.io over the past six months.
Security Tab
Crate pages now have a new "Security" tab that displays security advisories from the RustSec database. This allows you to quickly see if a crate has known vulnerabilities before adding it as a dependency.
The tab shows known vulnerabilities for the crate along with the affected version ranges.
This feature is still a work in progress, and we plan to add more functionality in the future. We would like to thank the OpenSSF (Open Source Security Foundation) for funding this work and Dirkjan Ochtman for implementing it.
Trusted Publishing Enhancements
In our July 2025 update, we announced Trusted Publishing support for GitHub Actions. Since then, we have made several enhancements to this feature.
GitLab CI/CD Support
Trusted Publishing now supports GitLab CI/CD in addition to GitHub Actions. This allows GitLab users to publish crates without managing API tokens, using the same OIDC-based authentication flow.
Note that this currently only works with GitLab.com. Self-hosted GitLab instances are not supported yet. The crates.io implementation has been refactored to support multiple CI providers, so adding support for other platforms like Codeberg/Forgejo in the future should be straightforward. Contributions are welcome!
Trusted Publishing Only Mode
Crate owners can now enforce Trusted Publishing for their crates. When enabled in the crate settings, traditional API token-based publishing is disabled, and only Trusted Publishing can be used to publish new versions. This reduces the risk of unauthorized publishes from leaked API tokens.
Blocked Triggers
The pull_request_target and workflow_run GitHub Actions triggers are now blocked from Trusted Publishing. These triggers have been responsible for multiple security incidents in the GitHub Actions ecosystem and are not worth the risk.
Source Lines of Code
Crate pages now display source lines of code (SLOC) metrics, giving you insight into the size of a crate before adding it as a dependency. This metric is calculated in a background job after publishing using the tokei crate. It is also shown on OpenGraph images:
Thanks to XAMPPRocky for maintaining the tokei crate!
Publication Time in Index
A new pubtime field has been added to crate index entries, recording when each version was published. This enables several use cases:
Cargo can implement cooldown periods for new versions in the future
Cargo can replay dependency resolution as if it were a past date, though yanked versions remain yanked
Services like Renovate can determine release dates without additional API requests
Thanks to Rene Leonhardt for the suggestion and Ed Page for driving this forward on the Cargo side.
Svelte Frontend Migration
At the end of 2025, the crates.io team evaluated several options for modernizing our frontend and decided to experiment with porting the website to Svelte. The goal is to create a one-to-one port of the existing functionality before adding new features.
This migration is still considered experimental and is a work in progress. Using a more mainstream framework should make it easier for new contributors to work on the frontend. The new Svelte frontend uses TypeScript and generates type-safe API client code from our OpenAPI description, so types flow from the Rust backend to the TypeScript frontend automatically.
Thanks to eth3lbert for the helpful reviews and guidance on Svelte best practices. We'll share more details in a future update.
Miscellaneous
These were some of the more visible changes to crates.io over the past six months, but a lot has happened "under the hood" as well.
Cargo user agent filtering: We noticed that download graphs were showing a constant background level of downloads even for unpopular crates due to bots, scrapers, and mirrors. Download counts are now filtered to only include requests from Cargo, providing more accurate statistics.
HTML emails: Emails from crates.io now support HTML formatting.
Encrypted GitHub tokens: OAuth access tokens from GitHub are now encrypted at rest in the database. While we have no evidence of any abuse, we decided to improve our security posture. The tokens were never included in the daily database dump, and the old unencrypted column has been removed.
Source link: Crate pages now display a "Browse source" link in the sidebar that points to the corresponding docs.rs page. Thanks to Carol Nichols for implementing this feature.
Fastly CDN: The sparse index at index.crates.io is now served primarily via Fastly to conserve our AWS credits for other use cases. In the past month, static.crates.io served approximately 1.6 PB across 11 billion requests, while index.crates.io served approximately 740 TB across 19 billion requests. A big thank you to Fastly for providing free CDN services through their Fast Forward program!
OpenGraph image improvements: We fixed emoji and CJK character rendering in OpenGraph images, which was caused by missing fonts on our server.
Background worker performance: Database indexes were optimized to improve background job processing performance.
CloudFront invalidation improvements: Invalidation requests are now batched to avoid hitting AWS rate limits when publishing large workspaces.
Feedback
We hope you enjoyed this update on the development of crates.io. If you have any feedback or questions, please let us know on Zulip or GitHub. We are always happy to hear from you and are looking forward to your feedback!