Cursed browser: A web browser with no rendering engine—the VLM reads the HTML and hallucinates the page: https://github.com/scosman/cursed_browser. 😂
The results according to the screenshots in the `README` are surprisingly close to the original.
Developer Relations Engineer at Google, focused on Web AI, WebAssembly, and Project Fugu 🐡. Dad-of-3. Alum of Université de Lyon (Postdoc), Universitat Politècnica de Catalunya (PhD), Karlsruhe Institute of Technology (MA).
Cursed browser: A web browser with no rendering engine—the VLM reads the HTML and hallucinates the page: https://github.com/scosman/cursed_browser. 😂
The results according to the screenshots in the `README` are surprisingly close to the original.
Under the hood of MDN's new frontend: https://developer.mozilla.org/en-US/blog/mdn-front-end-deep-dive/. How MDN switched from React to Lit.
Introducing a new spam policy for "back button hijacking": https://developers.google.com/search/blog/2026/04/back-button-hijacking. If you mess with the back 🔙 button, it's not the growth hack you think it is. I've seen unnamed news sites do this when you navigate to an article page, want to go back to where you came from, but then the back history gets hijacked and you're suddenly on the news site's main landing page.
Super useful CSS proposal: `flex-wrap: balance`: https://github.com/bfgeek/flex-wrap-balance/blob/main/README.md#flex-wrapbalance-explainer. (The images in the Explainer make immediately clear why you almost certainly want this.) TAG review: https://github.com/w3ctag/design-reviews/issues/1227. ⚖️
Better browser caching with the `No-Vary-Search` HTTP header:
https://csswizardry.com/2026/05/better-browser-caching-with-no-vary-search/. Fantastic article by @csswizardry@webperf.social.
The Microsoft Edge team (and in extension the #PWA team at Google Chrome) is looking for feedback on developer preferences when it comes to Web Install:
- declaratively using the `` element (https://github.com/WICG/install-element)
- imperatively using the `navigator.install()` API (https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/WebInstall%2Fexplainer.md)
You can provide your feedback on the GitHub Issue: https://github.com/WICG/install-element/issues/23.
Introducing the Safari MCP server for web developers: https://webkit.org/blog/18136/introducing-the-safari-mcp-server-for-web-developers/. This is a very welcome addition!
Adobe native apps modify your `hosts` file to see from the Web if its software is installed: https://www.osnews.com/story/144737/adobe-secretly-modifies-your-hosts-file-for-the-stupidest-reason/.
LinkedIn scans for traces of installed browser extensions: https://browsergate.eu/how-it-works/.
Regular people outside of our tech bubble here on Mastodon have no idea any of this is happening, or even technically feasible.
Base64 Is Fast Now, Actually: https://samthor.au/2026/base64-is-fast/. The tl;DR is that you should really use `{from, to}Base64()` (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array/fromBase64, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array/toBase64) if you can, and only deliver a polyfill for older browser.
`apfel`, the free AI already on your Mac: macOS Tahoe ships with a 3B parameter LLM. `apfel` gives you CLI access with one `brew install`. No model downloads, no API keys, no configuration needed, just works: https://apfel.franzai.com/. This is just using the Foundation Models framework: https://developer.apple.com/documentation/foundationmodels.
👀 Look, ma! The Cross-Origin Storage extension running on Firefox! If you dare, install it via `about:debugging` from https://github.com/web-ai-community/cross-origin-storage-extension. Else, just wait for it to be approved on the Firefox Add-on Store. More background on #CrossOriginStorage: https://github.com/WICG/cross-origin-storage. (FYI: @firefoxwebdevs@mastodon.social and @krosylight@fosstodon.org)
The Virtual Keyboard API ⌨️ Is broken where it matters most: https://zouhir.org/blog/virtual-keyboard-api/. Fantastic blog post by Zouhir Chahoud that goes into where it hurts: no support by Safari and Firefox, buggy support by Chrome, but Zouhir created very actionable bug reports that you should star ⭐ if you care. (I wrote about the API some years ago: https://developer.chrome.com/docs/web-platform/virtual-keyboard.)
Interesting DOM localization proposal by Mozilla: https://github.com/mozilla/explainers/blob/main/dom-localization.md.
In your HTML:
``
In the `resource.mf` file:
`greeting = Welcome, {$userName}.`
In your: HTML:
``
Rendered DOM:
`Welcome, John`
🤗 Transformers.js v4 released: https://huggingface.co/blog/transformersjs-v4. See some of the amazing demos: https://huggingface.co/collections/webml-community/transformersjs-v4-demos. Congratulations to the entire team! 👏
Fantastic tutorial with inline interactive demos for the `safe-area-inset-*` environment variables: https://polypane.app/blog/using-safe-area-inset-to-build-mobile-safe-layouts/. Never ever have your site content covered by a notch or camera hole.
😍 A fantastic introduction by @httptoolkit@mastodon.social to Dictionary Compression with examples and detailed background information: https://httptoolkit.com/blog/dictionary-compression-performance-zstd-brotli/.
Inside Googlebot: demystifying crawling, fetching, and the bytes we process: https://developers.google.com/search/blog/2026/03/crawler-blog-post. A great post that clarifies how #Googlebot does its business for people in the #SEO community.
Sendspin: Music Experience Protocol: https://www.sendspin-audio.com/. Listen, control, and see your music in every room with Sendspin, an open standard for the complete music listening experience. There's a demo on the page, and the spec (https://www.sendspin-audio.com/spec) is surprisingly readable. I was especially interested in how the syncing works. (via @balloob@fosstodon.org) #HomeAssistant #MusicAssistant
Know how sometimes the warning emoji ⚠️ renders black and white, and sometimes as a proper colored emoji? In theory, you can control this with the variation selectors `U+FE0E` or `U+FE0F`, but in practice, it often doesn't work.
As of Chrome 131, you can now _actually_ control the behavior thanks to the new `font-variant-emoji` CSS property!
Here's a demo that shows the effect of `normal` (the current unpredictable default), `emoji`, and `text`: https://font-variant-emoji.glitch.me/
You’re about to feel the AI money squeeze:
https://www.theverge.com/ai-artificial-intelligence/917380/ai-monetization-anthropic-openai-token-economics-revenue (💰 paywall). Very good article by The Verge on the AI free ride being over.
Started an Awesome Cross-Origin Storage list: https://github.com/tomayac/awesome-cross-origin-storage/ 😎. Transformers.js, WebLLM, wllama, Flutter, Emscripten, Nuxt and Vite plugins, and a bunch of demos… #Awesome #CrossOriginStorage
If AI helps with rediscovering HTTP content negotiation (#conneg), I'm all here for it: https://cra.mr/optimizing-content-for-agents: "The implementation today is simple: content negotiation. When a request comes in with Accept: text/markdown, you can confidently assume you have an agent. That’s your hook, and now it’s just up to you how you optimize it."—blog post by David Cramer
Section 12 of HTTP: https://www.rfc-editor.org/rfc/rfc9110.html#name-content-negotiation.
The BlinkOn 21 conference is in the books. If you want to catch up on some of the amazing talks, check out the full playlist: https://youtube.com/playlist?list=PL9ioqAuyl6UIc-S8EuPjqkNvsMMmL1flZ&si=kNcz4wJi1MhWZX4N. I'm mostly involved in the work on Web AI https://youtu.be/q1iK35I9TPU?si=jiZdwoPXJAcha4tm myself.
#BlinkOn #BlinkOn21
Try the Built-in AI extension to get access to browser APIs like…
🧠`LanguageModel` (aka. Prompt API)
🗜️`Summarizer`
✍️`Writer`
📝`Rewriter`
💡`LanguageDetector`
🗯️`Translator`
If your browser supports an API natively, it will use it. Otherwise, the extension injects a polyfill into the page that either uses…
🤗 a local model using Transformers.js
☁️ or a cloud model using any of Gemini, Firebase AI Logic, or OpenAI
…as the AI backend.
🛍️ Install from the Chrome Web Store: https://chromewebstore.google.com/detail/built-in-ai/aekdeffgkjegkdbdnkllpaeakcapfjdb!
How to Use Transformers.js in a Chrome Extension:
https://huggingface.co/blog/transformersjs-chrome-extension. Good technical report by Nico Martin from Hugging Face 🤗.
On the Chrome team, we have an interesting new origin trial for you to try in your apps: the Proofreader API: https://developer.chrome.com/docs/ai/proofreader-api.
❌ tyop → ✅ typo
```js
const proofreader = await Proofreader.create({
expectedInputLanguages: ['en'],
});
const proofreadResult = await proofreader.proofread(
'PLease tryt his API and let us knwo how it foes!',
);
```
It's powered by Gemini Nano internally and part of Chrome's #BuiltInAI / #WebAI effort.
@TheRealNooshu@hachyderm.io Wow, that's a lot less additional time than I thought it would add. I was assuming it'd be a matter of several minutes. Anyway, yeah, my question was mostly inspired by patterns like in the stale-while-revalidate header value: https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Cache-Control#:~:text=to%20avoid%20revalidation.-,stale%2Dwhile%2Drevalidate,-The%20stale%2Dwhile Might be not worth it if your preprocessing doesn't noticeably impact your build. Thanks for the interesting article! 🙏
👀 There's an Intent to Ship for the Prompt API: https://groups.google.com/a/chromium.org/g/blink-dev/c/iR6R7-nQeHI/m/gN4iEGEdAQAJ. Learn what it does: https://developer.chrome.com/docs/ai/prompt-api. There's also a polyfill that falls back to local inference using Transformers.js 🤗 or to cloud inference using cloud APIs like Firebase AI Logic, the Gemini API, or the OpenAI API: https://www.npmjs.com/package/prompt-api-polyfill.
I know many of you have been waiting for this: Intent to Ship: `SharedWorker` on Android: https://groups.google.com/a/chromium.org/d/msgid/blink-dev/69c49b14.050a0220.2ec94.0888.GAE%40google.com. The `SharedWorker` interface represents a specific kind of worker that can be *accessed* from several browsing contexts, such as multiple windows or iframes: https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker. Chrome on Android has been the odd one out, but it's finally joining Safari and Firefox. 👏