Ryan Townsend
banner
twnsnd.com
Ryan Townsend
@twnsnd.com
Technology Leader & Distinguished Software Engineer • 20+ YOE in Tech, 10+ as CTO • Public Speaker • LessonsofaCTO.com & TWNSND.com
Of course there are a few options for templating/build systems to work around this (e.g. only output styles on the first instance, using a class name rather than going schemaless), effectively a very minimal rendering overhead trading off a small chance of conflicts.
December 9, 2025 at 9:09 PM
Duplication compresses well (brotli for single doc, dictionaries for cross doc) so the network overhead is minimal.

But currently browsers don't handle large volume of <style>s well (think every component having it's own... huge runtime style recalc overhead) so we need some form of dedupe.
December 9, 2025 at 9:09 PM
Sweet! ☺️

Yeah, if you use schemaless @scope, you have to inline inside the element in your HTML.

This means every element renders co-located with it's styles, if an element doesn't render, no style is shipped and given HTML is streamed, you effectively get browser-native critical CSS.
December 9, 2025 at 9:09 PM
If performance improves, schemaless @scope could be a great solution for localising component styles, limited change of clashes, all while giving us critical CSS out-of-the-box with zero build process.

Shared compression dictionaries will mean that penalty of inline CSS across pages is limited too.
December 9, 2025 at 8:30 PM
Plus data attributes don't offer any API for lifecycle methods (like custom elements do, and custom attributes should), so you end up writing your own mutation observer which is no fun 🤢
December 2, 2025 at 9:21 PM
Custom attributes will be great for keeping things more composable. I’d estimate 8/10 custom elements I write could (and should) be custom attributes.
December 2, 2025 at 9:26 AM
I love building custom elements but quickly end up with a deep DOM when keeping them small and nesting, also you often have to code with this nesting specifically in mind.
December 2, 2025 at 9:26 AM
*2026 page
November 25, 2025 at 12:20 PM
On the 2026 pay your ticket form is only listing the student and diversity options, not sure if that's intentional?
November 25, 2025 at 12:20 PM
For what it's worth, you can follow the WebKit standards position here: github.com/WebKit/stand... – it's currently awaiting a response.

And for completeness, here's the one for Firefox: github.com/mozilla/stan...
Web Install API · Issue #463 · WebKit/standards-positions
WebKittens @marcoscaceres Title of the proposal Web Install API URL to the spec https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/WebInstall/explainer.md URL to the spec's repository No r...
github.com
November 25, 2025 at 10:25 AM
You’ve given me the curse too now 😭
November 20, 2025 at 9:36 AM
`width` and `height` are supported on `<source>` for this purpose.

Use <img> for the mobile image, width and height can be anything as long as they as 1:1 ratio.

Add a <source> with your 16:9 image path and an appropriate media query, then set width and height to any values that are a 16:9 ratio.
November 20, 2025 at 9:04 AM
All correct, except the ‘hand assembled’ part: after each build, I have `zstd` train a dictionary on all my HTML content.

I use a Netlify Edge Function to dynamically rewrite the request path to the .dcz version.
November 17, 2025 at 4:30 PM
Huge thanks to @patmeenan.com, @programmingart.bsky.social & @yoav.ws for their support on this!

...not to mention Pat & Yoav's work on the spec itself! 🧠 🧠 🧠
1882979 - [meta] Compression Dictionary Transport
NEW (nobody) in Core - Networking: Cache. Last updated 2025-11-17.
bugzilla.mozilla.org
November 17, 2025 at 3:35 PM
I've bought a ticket, so I'll likely see you there @lukewarlow.dev 🙌

I figured I can just gift it to one of my mentees or as a diversity ticket if it turns out I can't make it.
November 13, 2025 at 11:35 AM
Was there a recording / were David’s slides uploaded anywhere?
November 12, 2025 at 6:02 PM