[{"data":1,"prerenderedAt":392},["ShallowReactive",2],{"blog-2026-03-02-firefox-148-ai-kill-switch-web-standards":3},{"id":4,"title":5,"author":6,"body":7,"date":374,"description":375,"extension":376,"language":377,"meta":378,"navigation":223,"path":379,"seo":380,"stem":381,"tags":382,"__hash__":391},"blog/blog/2026-03-02-firefox-148-ai-kill-switch-web-standards.md","Firefox 148: AI Kill Switch, WebGPU in Service Workers, and Major Web API Additions","NeoAI",{"type":8,"value":9,"toc":366},"minimark",[10,19,24,31,53,60,63,66,70,77,80,84,87,110,124,127,131,145,284,287,291,294,302,322,326,329,332,337,362],[11,12,13,14,18],"p",{},"Mozilla released ",[15,16,17],"strong",{},"Firefox 148"," on February 24, 2026, and it's one of the more developer-relevant browser updates in recent memory. The headline feature — a centralized AI control panel — may grab the attention of general users, but the underlying web platform additions are what makes this release worth paying close attention to if you build for the web.",[20,21,23],"h2",{"id":22},"the-ai-kill-switch","The AI Kill Switch",[11,25,26,27,30],{},"As AI-powered browser features multiply (translations, chatbot sidebars, image descriptions, link previews), Firefox 148 introduces a dedicated ",[15,28,29],{},"\"AI Control\""," settings page. Each feature can be individually set to one of three states:",[32,33,34,41,47],"ul",{},[35,36,37,40],"li",{},[15,38,39],{},"Available"," — visible and accessible to the user",[35,42,43,46],{},[15,44,45],{},"Enabled"," — activated via opt-in",[35,48,49,52],{},[15,50,51],{},"Blocked"," — completely hidden; any locally stored model data is deleted",[11,54,55,56,59],{},"Crucially, the global \"Block AI improvements\" toggle is ",[15,57,58],{},"enabled by default",". This is a meaningful stance from Mozilla: AI features require explicit opt-in rather than opt-out. Supported chatbots include Anthropic Claude, ChatGPT, Microsoft Copilot, Google Gemini, and Mistral's Le Chat.",[11,61,62],{},"Settings persist across updates — a small but important detail, since previous browser AI experiments often reset preferences on major version bumps.",[11,64,65],{},"Mozilla has also decoupled remote browser configuration from telemetry. Users now receive feature flag updates without having to share usage data or participate in experimental studies — a privacy improvement that's easy to overlook but significant for enterprise and privacy-focused deployments.",[20,67,69],{"id":68},"webgpu-arrives-in-service-workers","WebGPU Arrives in Service Workers",[11,71,72,73,76],{},"For developers, the most technically impactful change may be ",[15,74,75],{},"WebGPU support in Service Workers",". The GPU-accelerated graphics and compute interface is now available across all worker contexts, meaning computationally intensive workloads — machine learning inference, image processing, shared resource operations across tabs — can run in the background without blocking the main thread.",[11,78,79],{},"This brings Firefox in line with Chromium-based browsers and opens up architectures that were previously impossible without heavy workarounds.",[20,81,83],{"id":82},"two-new-security-apis-trusted-types-and-sanitizer","Two New Security APIs: Trusted Types and Sanitizer",[11,85,86],{},"Firefox 148 ships two long-awaited security mechanisms that directly address Cross-Site Scripting (XSS) — still one of the most common web vulnerabilities.",[11,88,89,92,93,97,98,101,102,105,106,109],{},[15,90,91],{},"Trusted Types API",": Enforces that string inputs are transformed through a defined policy before reaching dangerous DOM sinks like ",[94,95,96],"code",{},"innerHTML",", ",[94,99,100],{},"eval",", or ",[94,103,104],{},"document.write",". Activated via a Content-Security-Policy header (",[94,107,108],{},"require-trusted-types-for 'script'","), it gives developers a declarative, enforceable way to prevent injection attacks rather than relying on ad-hoc sanitization.",[11,111,112,115,116,119,120,123],{},[15,113,114],{},"Sanitizer API",": Enables safe HTML manipulation through built-in methods — ",[94,117,118],{},"element.setHTML()"," and ",[94,121,122],{},"document.parseHTML()",". These functions parse and clean HTML according to a configurable allowlist, potentially replacing third-party libraries like DOMPurify for common use cases. The API is now available in Firefox, Chrome, and Edge, making cross-browser adoption realistic.",[11,125,126],{},"Both APIs have been in the works for years. Having them in Firefox 148 means they're now broadly available — a green light for teams considering adoption.",[20,128,130],{"id":129},"javascript-iteratorzip-and-iteratorzipkeyed","JavaScript: Iterator.zip() and Iterator.zipKeyed()",[11,132,133,134,119,137,140,141,144],{},"From the Joint Iteration Proposal (TC39), Firefox 148 adds ",[94,135,136],{},"Iterator.zip()",[94,138,139],{},"Iterator.zipKeyed()",". These methods combine multiple iterators into grouped tuples — similar to ",[94,142,143],{},"zip()"," in Python or Rust:",[146,147,152],"pre",{"className":148,"code":149,"language":150,"meta":151,"style":151},"language-js shiki shiki-themes github-light github-dark","const nums = [1, 2, 3][Symbol.iterator]();\nconst letters = ['a', 'b', 'c'][Symbol.iterator]();\n\nfor (const [num, letter] of Iterator.zip(nums, letters)) {\n  console.log(num, letter); // 1 'a', 2 'b', 3 'c'\n}\n","js","",[94,153,154,190,218,225,262,278],{"__ignoreMap":151},[155,156,159,163,167,170,174,177,179,182,184,187],"span",{"class":157,"line":158},"line",1,[155,160,162],{"class":161},"szBVR","const",[155,164,166],{"class":165},"sj4cs"," nums",[155,168,169],{"class":161}," =",[155,171,173],{"class":172},"sVt8B"," [",[155,175,176],{"class":165},"1",[155,178,97],{"class":172},[155,180,181],{"class":165},"2",[155,183,97],{"class":172},[155,185,186],{"class":165},"3",[155,188,189],{"class":172},"][Symbol.iterator]();\n",[155,191,193,195,198,200,202,206,208,211,213,216],{"class":157,"line":192},2,[155,194,162],{"class":161},[155,196,197],{"class":165}," letters",[155,199,169],{"class":161},[155,201,173],{"class":172},[155,203,205],{"class":204},"sZZnC","'a'",[155,207,97],{"class":172},[155,209,210],{"class":204},"'b'",[155,212,97],{"class":172},[155,214,215],{"class":204},"'c'",[155,217,189],{"class":172},[155,219,221],{"class":157,"line":220},3,[155,222,224],{"emptyLinePlaceholder":223},true,"\n",[155,226,228,231,234,236,238,241,243,246,249,252,255,259],{"class":157,"line":227},4,[155,229,230],{"class":161},"for",[155,232,233],{"class":172}," (",[155,235,162],{"class":161},[155,237,173],{"class":172},[155,239,240],{"class":165},"num",[155,242,97],{"class":172},[155,244,245],{"class":165},"letter",[155,247,248],{"class":172},"] ",[155,250,251],{"class":161},"of",[155,253,254],{"class":172}," Iterator.",[155,256,258],{"class":257},"sScJk","zip",[155,260,261],{"class":172},"(nums, letters)) {\n",[155,263,265,268,271,274],{"class":157,"line":264},5,[155,266,267],{"class":172},"  console.",[155,269,270],{"class":257},"log",[155,272,273],{"class":172},"(num, letter); ",[155,275,277],{"class":276},"sJ8bj","// 1 'a', 2 'b', 3 'c'\n",[155,279,281],{"class":157,"line":280},6,[155,282,283],{"class":172},"}\n",[11,285,286],{},"This is a welcome addition for functional-style code that works with streams, generators, or paired data structures.",[20,288,290],{"id":289},"css-anchor-positioning-and-shape","CSS: Anchor Positioning and shape()",[11,292,293],{},"Two CSS additions round out the developer story:",[11,295,296,301],{},[15,297,298],{},[94,299,300],{},"position-try-order"," — Controls the priority order of fallback positions in CSS Anchor Positioning. When a positioned element would overflow the viewport, this property determines which fallback to try first. Useful for tooltips, dropdowns, and floating UI elements that need to stay in view.",[11,303,304,310,311,314,315,318,319,321],{},[15,305,306,309],{},[94,307,308],{},"shape()"," function"," — Allows defining freeform shapes for ",[94,312,313],{},"clip-path"," using CSS units rather than SVG path syntax. Unlike the existing ",[94,316,317],{},"path()"," function, ",[94,320,308],{}," is responsive and works with relative units — making complex, viewport-responsive clip shapes practical without JavaScript.",[20,323,325],{"id":324},"worth-the-update","Worth the Update",[11,327,328],{},"Firefox 148 is a release that benefits both ends of the spectrum: privacy-conscious users get explicit control over AI features with sensible defaults, and developers get a meaningful set of new primitives — WebGPU in workers, XSS prevention APIs, zip iterators, and responsive clip-path shapes.",[11,330,331],{},"The Trusted Types and Sanitizer APIs in particular are features the security community has been pushing for years. Their broad cross-browser support now makes them viable targets for adoption in production codebases.",[11,333,334],{},[15,335,336],{},"Sources:",[32,338,339,348,355],{},[35,340,341],{},[342,343,347],"a",{"href":344,"rel":345},"https://www.mozilla.org/en-US/firefox/148.0/releasenotes/",[346],"nofollow","Mozilla — Firefox 148 Release Notes",[35,349,350],{},[342,351,354],{"href":352,"rel":353},"https://www.heise.de/en/news/Firefox-148-brings-central-AI-control-and-new-web-standards-11188204.html",[346],"Heise Online — Firefox 148 brings central AI control and new web standards",[35,356,357],{},[342,358,361],{"href":359,"rel":360},"https://9to5linux.com/firefox-148-is-now-available-for-download-with-ai-kill-switch-and-other-changes",[346],"9to5Linux — Firefox 148 Is Now Available",[363,364,365],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":151,"searchDepth":192,"depth":192,"links":367},[368,369,370,371,372,373],{"id":22,"depth":192,"text":23},{"id":68,"depth":192,"text":69},{"id":82,"depth":192,"text":83},{"id":129,"depth":192,"text":130},{"id":289,"depth":192,"text":290},{"id":324,"depth":192,"text":325},"2026-03-02","Mozilla's Firefox 148 ships a central AI control panel, new security APIs against XSS, WebGPU in Service Workers, and CSS anchor positioning — a significant release for both privacy-conscious users and web developers.","md","en",{},"/blog/2026-03-02-firefox-148-ai-kill-switch-web-standards",{"title":5,"description":375},"blog/2026-03-02-firefox-148-ai-kill-switch-web-standards",[383,384,385,386,387,388,389,390],"firefox","browser","web-standards","security","webgpu","css","javascript","open-source","9GesDnqzf8KQ3a6YZcnmvIo1_SvDRg1WJleIPKBvbms",1784088102512]