Posts by Jonathan Neal
winamp green head music player
If the future of layout is not CSS, it better be this
After implementing web streams in multiple runtimes, supporting them for years, talking with other implementers, dealing with issues... I think it's well past time we talked about something better blog.cloudflare.com/a-better-web...
load-bearing @xkcd.com
Wrote about how my side project got flagged by 10 security providers (including Google) as a phishing site, and how I got it fixed.
Hope this helps if it ever happens to you.
trysound.io/how-my-side-...
npmx is good. There be noticeable dragons on first visit, but thats to be expected in a project this fresh with this many contributors, but I'm sure that'll straighten out in time. Looking beyond that, there's lots to like.
Browser window showing the browser-compat-data github repo homepage, which shows that the project now contains 20,000 commits.
The browser-compat-data project (used by MDN, caniuse, and tools) now has:
20,000 commits
1,123 contributors
465 releases
19,148 data entries
That's what comprehensive web compat data looks like.
And it takes well funded teams at @openwebdocs.org and @mozilla.org plus amazing contributors.
Hey! I'm looking for my next thing. Could be contract or full-time.
I build design systems, web apps, and design tools.
If you know someone who needs a frontend/fullstack dev, send them my way 🙏
trysound.io/hire-me
The following TypeScript: declare module "*" with { type: "url" } { const url: URL; export default url; }
PR to add support for import attributes in ambient module declarations.
github.com/microsoft/Ty...
Creating a universal app store for PWAs seems like an obvious win here vs. heuristics triggered installs. But think about smaller, more bespoke app stores! An app store for your intranet apps. An app store for your webring of online mutuals. An app store for kid-friendly apps. That's fun territory.
The source TypeScript: export namespace Signal { export let isComputed: (value: unknown) => value is Computed; export class Computed { #brand() {} static { isComputed = (value): value is Computed => #brand in Object(value); } } }
The resulting JavaScript: export var Signal = __ns("Signal"); { let isComputed; class Computed { #brand() {} static { isComputed = (value) => #brand in Object(value); } } __nsassign(Signal, { isComputed, Computed }); }
The helper JavaScript: const __ns = (value) => Object.defineProperty( {}, Symbol.toStringTag, { value, configurable: true } ) const __nsassign = (target, source) => Object.defineProperties( target, Object.fromEntries(Object.entries(source).map( ([key, value]) => [ key, { value, writable: true, configurable: true } ] )) )
What do you think of this transform for TypeScript namespace? It’s meant to more accurately reflect the runtime it becomes.
Thrilled to announce Webflow's $150,000 donation to support Astro's open source development! PLUS... Webflow chooses Astro to power their just-announced AI app gen tool, coming soon.
Please stop inheriting the box-model. The supposed use-case for that is extremely out-dated, inheritance doesn't really help, and it actively makes real box-sizing use-cases more difficult!
This #CSS best practice was never the best to begin with:
www.oddbird.net/2025/09/04/b...
More Astro core at @viteconf.org!
Learn how your contributions make Astro what it is with @sarah11918.rainsberger.ca
The thing about working on a big project like "the last CSS toolchain we'll ever need, built from ground up" is that there's a literal endless list of all the things that need doing.
I've found myself knee deep in ASM, to writing tech docs, to dreaming up new syntax.
github.com/csskit/csskit
I'm always thankful that Babel exists. To me it's the unsung hero of the JS ecosystem. It's so easy to prototype something quickly with it!
Go on… 🙃
A screenshot of successful arm64 and x64 builds for ubuntu, macos, and windows. Building everything takes 10 minutes, 25 seconds, but that’s all on ubuntu arm64, because most other systems take less than 5 minutes.
I’ll be home tonight to package a private demo to collect feedback. Would you be interested, and would these builds cover your systems?
What do you wish local development could do? These are my pain points. What are yours?
I really don’t want to bundle anymore, but I want bundling performance (smaller payloads, faster starts), and I want them in my dev environment…
And I want my dev environment to closer match production.
I dunno. Maybe it will suck. Or maybe it can push the needle on local dev.
It will use module graphs to build a Zstandard shared dictionary (CDCH), so the server can tell the client all the imports up front, using 103 Early Hints headers.
This means the browser knows what imports are coming before HTML even begins, because…
Side Project Alert —
I built an HTTP/3 server for NodeJs, compiled from C++ to run on Windows, Linux, & macOS (x64 & arm64), so weI can local dev over H3.
There’s a small twist: it will accept module graphs for each endpoint, because…
Slightly diminish a band:
grins for wins
(known for “Spout” and “I mean, who really wants to rule the world, if you think about it”)
This popped up in a search, so wanted to let you and folks know it has been a standard:
www.w3.org/TR/mediaquer...
Looks like it’s coming to Chrome (merged July 2025).
chromium-review.googlesource.com/c/chromium/s...
Lazy dev question: Firefox supports style queries behind a flag, but is there any indicator on when they’ll ship it?
Asking for a cross browser friend.
The detectioj isn’t too painful, tho i wouldn’t necessarily recommend modifying the prototype, as is done here.
gist.github.com/jonathantnea...
I have lived this. I feel your pain. I hope the platform can addresses this eventually.
github.com/w3c/uievents...
Turns out they were bugs, but amazing people are already on it. Go web!
github.com/web-platform...
Rewritten to use DSD to make the "structure" clearer.
codepen.io/paramagicdev...
:host() has some pretty annoying bugs, but this seems like the case where `:host()` doesn't get to hook into `exportparts` mappings 🤔
Also fascinating that chrome has divergent behavior from FF / Safari for me.