Sign in

Gustav Hansen

@stav.dev
131 followers 693 following 76 posts

Engineering @sanity, living in Berlin. More questions than answers.

PostsRepliesMedia
Reposted by Gustav Hansen
Jovi 🐨 @jovidecroock.com · 15h
Preact 11 is out 🎉 We’ve been hard at work at making our diffing use modern features like moveBefore , leveraging ESM for tree-shaking Preact Compat and ensuring you have a great experience with resumed hydration.
59520
Reposted by Gustav Hansen
Pooya Parsa @pi0.io · 28/09/2026
Just published github.com/unjs/oxbox 🐂 🛠️ A tiny, portable JS library for parsing and transforming JS/TS/JSX, powered by oxc. ⚡ Optimized wasm build in a single JS chunk 🪞 Same API as oxc-parser + oxc-transform 🤝 Works in browsers and Node.js 💾 Fits on a floppy disk
2314
Reposted by Gustav Hansen
Web Standards @web-standards.dev · 22/09/2026
Responsive iframes in Chrome 154. Sebastian Benz and Bramus introduce frame-sizing, a CSS property that sizes an <iframe> to its content, with a <meta> element opt-in and window.requestResize() for later updates. #html #css developer.chrome.com...
Chrome logo, an illustration of a scrollable embedded page, an HTML snippet with a responsive-embedded-sizing <meta> element, a frame-sizing CSS snippet, and title “Responsive iframes in Chrome 154”.
2328
Reposted by Gustav Hansen
James Snell @jasnell.me · 22/09/2026
For those who may be watching... you may have noticed all the new performance analysis work I've been doing lately. This is really all intended to make zero-dependency perf analysis possible / more useful in general. Consider this example for instance: github.com/jasnell/fast...
github.com
GitHub - jasnell/fastify-sliding-health: An example using latest perf_hooks features
An example using latest perf_hooks features. Contribute to jasnell/fastify-sliding-health development by creating an account on GitHub.
181
Reposted by Gustav Hansen
pngwn @pngwn.at · 22/09/2026
After about a year, on and off, I am veeeery happy to release TWINKLEPLOP, a syntax highlighter of tremendous power! The speed of prism with the customisation of Shiki. twinkleplop.pngwn.at
519233
Reposted by Gustav Hansen
Artem Zakharchenko @kettanaito.com · 21/09/2026
This is such a silly mistake and yet I see you making it all the time in your tests. ❌ Do NOT run cleanup after assertions ✅ Schedule the cleanup via hooks or use Disposable Objects A seemingly tiny change that'll have tremendous impact on your tests, especially memory-wise.
Code snippets illustrate proper and improper cleanup methods for WebSocket tests, emphasizing memory management in asynchronous operations.
2364
Reposted by Gustav Hansen
danielroe @danielroe.dev · 14/09/2026
🙋‍♂️ ever wanted to build something without needing to configure a db, auth, file storage or a cms? it turns out you already have all four if you have a bluesky account 👉 airspace is a typed client for it
getair.space
airspace
The database you already have.
1950789
Reposted by Gustav Hansen
Stefan Judis @stefanjudis.com · 14/09/2026
Quick reminder, if you're working on a SaaS product that requires a login, please check if you've defined the well-known URL to change passwords. Password managers will check `/.well-known/change-password` to offer a quick way to change passwords. www.w3.org/TR/ch...
Code: GET /.well-known/change-password HTTP/1.1 Host: example.com  HTTP/1.1 302 Found Location: https://example.com/account/security/password
617918
Gustav Hansen @stav.dev · 13/09/2026
I’ve never heard of twoslash but it looks amazing to create self-documenting code samples: twoslash.netlify.app
twoslash.netlify.app
Twoslash
Markup for generating rich type information in your documentations ahead of time.
1111
Reposted by Gustav Hansen
Web Standards @web-standards.dev · 11/09/2026
Make your logo brighter than white. Chris Bennett built a tool that turns a logo into a gain-map JPEG, so the colors you pick shine up to 7.5 times brighter than plain white on HDR screens and stay a normal JPEG everywhere else. #color #image www.soverybright.com/
Title “Make your logo brighter than white”, an upload area saying “Drop your logo here, or click to choose”, and two squares labelled “SDR white” and “HDR white +2.9 stops”.
1175
Reposted by Gustav Hansen
Jovi 🐨 @jovidecroock.com · 11/09/2026
Every MCP callTool in TypeScript takes a string and returns unknown, mcp-tada reads the server once and ensures every tool-call has the proper names, input- and output types.
2116
Reposted by Gustav Hansen
Ky @ky.fyi · 09/09/2026
I wrote a new case study about some of the work I did building and measuring improvements to design systems during my last job
ky.fyi
Building data-driven design systems
How I scaled Scribe’s design system to help serve over 6 million users.
36611
Reposted by Gustav Hansen
Justin Fagnani @justinfagnani.com · 09/09/2026
I wrote about what I've been up to with my new programming language! Zena targets WebAssembly GC, with a TypeScript-like syntax, sound type system, and lots of cool features like pattern matching, async cancellation, borrow checking, WASI integration, and more! justinfagnani.com/2026/09/09/z...
justinfagnani.com
Zena: A new Wasm-first programming language
410526
Gustav Hansen @stav.dev · 03/09/2026
vi.when 😍
010
Reposted by Gustav Hansen
Lars @webpro.nl · 27/07/2026
🆕 pnpm-exclude-newer Update package.json ranges to the latest versions permitted by your age policy (minimumReleaseAge, minimumReleaseAgeExclude) including transitive dependencies. $ pnpm dlx @webpro/pnpm-exclude-newer → github.com/webpro/pnpm-... Using this for a while now, little QoL bumper
092
Reposted by Gustav Hansen
Philippe Serhal @philippeserhal.com · 24/08/2026
Introducing: 🛜 npm.report Want to start setting up trusted or staged publishing for your org but aren't sure where to start? 🤹 Trouble keeping track of your migration status? 🕵️ Curious how the ecosystem's migration is going? 📈 Want the satisfaction of a chart going up and to the right?
npm.report
npm.report: supply-chain trust audits for npm orgs
Audit, visualize, share, and track your npm org's trust signals.
44513
Reposted by Gustav Hansen
Stefan Judis @stefanjudis.com · 19/08/2026
I dig this a lot! Edge now ships an experimental feature that warns you about and monitors network activity that isn't optimized, like uncompressed assets or large images. www.debugbear.co...
Code snippet: Document-Policy and Reporting-Endpoints headers configuring network efficiency guardrails
061
Reposted by Gustav Hansen
Dave Rupert @davatron5000.bsky.social · 19/08/2026
🚀 I made a smol ~2kb syntax highlighter that uses the CSS `::highlight()` API. davatron5000.github.io/microlighter/
davatron5000.github.io
MicroLighter - A zero-dep syntax highlighter
619438
Reposted by Gustav Hansen
Chrome for Developers @developer.chrome.com · 17/08/2026
What if we could remove the friction in the email → goo.gle/4fsFpjG The proposed Email Verification API would let your site validate the email address right in the browser! No email sent, no confirmation click needed.
Email verification API
1123
Reposted by Gustav Hansen
~paul @paulvall.dev · 13/08/2026
accessibility arc just started 🥷🏻 interactive CLI prompts often don't play well with screen readers. we're working on making clack better at this github.com/bombshell-de...
github.com
rfc: accessible mode · Issue #585 · bombshell-dev/clack
coming out of the discord convo about spinners and screen readers. tldr of the problem: spinners and live-redrawn prompts get re-announced on every repaint by voiceover/nvda/orca, which makes clack...
1225
Reposted by Gustav Hansen
Mateusz Burzyński @andarist.bsky.social · 11/08/2026
Changesets v3 is here! 🦋 After months of chipping away at issues alongside @bluwy.me, @haglund.dev, and many other contributors, we’re excited to finally share it. changesets.dev/blog/announc...
changesets.dev
Announcing Changesets v3 | Changesets
A tool to manage versioning and changelogs with a focus on monorepos
812228
Reposted by Gustav Hansen
Nathan Lambert @natolambert.bsky.social · 07/08/2026
This video on the HuggingFace-OpenAI incident, calmly presented by OpenAI researchers (Eric is great btw, hi Eric), is one of the best uses of your time all year in AI. I'll probably rewatch tomorrow to write about it more. www.youtube.com/watch?v=87Dy...
youtube.com
Black Hat USA 2026: The 'Breaking' News: The OpenAI–Hugging Face Incident
The 'Breaking' News: The OpenAI–Hugging Face Incident - A Technical Reconstruction and Its Implications for AI When AI Goes Rogue. The Incident That Changed Everything. An OpenAI evaluation agent…
27410
Gustav Hansen @stav.dev · 04/08/2026
🆒
000
Reposted by Gustav Hansen
luke karrys @lukekarrys.com · 29/07/2026
npm is now scanning packages for malware at publish time before they become available for consumption
github.blog
npm publish-time malware scanning and dual-use metadata - GitHub Changelog
As part of our ongoing supply-chain security work, npm is introducing automatic scanning of packages at publish time. This changelog covers what publishers can expect and a new metadata requirement…
17819
Gustav Hansen @stav.dev · 29/07/2026
“If you're feeling like your work is simultaneously more productive and less satisfying, you're not broken. The feedback loop is broken. And I think we need to start treating that as an engineering problem in its own right, not a personal failure.”
000
Reposted by Gustav Hansen
Pooya Parsa @pi0.io · 28/07/2026
⛰️ mountx :: mount JavaScript as a real filesystem! Write ~6 lines of JS, get a real directory any process can read & write: editors, CLIs, AI agents. Rootless on Linux (FUSE) and macOS (NFSv3 with no kernel extensions). ~Pure JS, zero deps. mountx.vercel.app
6314
Reposted by Gustav Hansen
TC39 @tc39.es · 23/07/2026
ECMAScript Excitement 🎉 This week, at its 115th meeting, TC39 advanced these proposals: 3️⃣ Await dictionary 2️⃣.7️⃣ Thenable curtailment 2️⃣ Error code property 2️⃣ Fused multiply-add 1️⃣ Intl.DateTimeFormat alignment with other standards 1️⃣ Linear matching 1️⃣ Map.take
56817
Reposted by Gustav Hansen
Ben Hong @bencodezen.io · 18/07/2026
Vue 3.6 is now entering RC phase! 🎉 Super excited for all these perf improvements and for Vapor to soon be available for everyone to use! github.com/vuejs/core/r...
github.com
Release v3.6.0-rc.1 · vuejs/core
Vue 3.6 is now entering the RC phase as we have completed the intended feature set for Vapor Mode. 3.6 also includes a major refactor of @vue/reactivity based on alien-signals, which significantly ...
0607
Reposted by Gustav Hansen
James @43081j.com · 21/07/2026
FYI we have an @e18e.dev MCP server! you can use it remotely, or you can install it locally as a stdio server. this lets your agent check your codebase for redundant dependencies, polyfills, etc.
mcp.e18e.dev
e18e MCP server
The official e18e MCP server, advising agents on modern and performant best practices.
1337
Reposted by Gustav Hansen
Alex Russell @infrequently.org · 16/07/2026
If you make websites for a living, stop what you're doing and read this research by @tammyeverts.com; it shows what many of us have been saying for a long time: even if there is such a thing as "fast enough", it's generally *much* faster than you are targeting: embrace.io/blog/research-co…
embrace.io
New research: The Core Web Vitals thresholds you trust might be wrong for your site
Core Web Vitals data from ten leading online retailers reveals that "good" for Google may not be good enough for your users or your business.
36526
Reposted by Gustav Hansen
Simon Willison @simonwillison.net · 16/07/2026
I couldn't resist extracting that Rust Mermaid rendering code out and compiling it to WebAssembly so you can try it out directly in a browser tools.simonwillison.net/grok-mermaid
Screenshot of a Mermaid diagram editor showing source code and rendered flowchart. The code reads: graph TD Start[Request received] --> Auth{Authenticated?} Auth -->|yes| Rate{Rate limit OK?} Auth -->|no| R401[401 Unauthorized] Rate -->|yes| H(Handle request) Rate -->|no| R429[429 Too Many Requests] H -.-> Log[Audit log] H ==> Resp[200 OK]. Below the code are controls labeled Max width: Fit output panel, Copy as text, and Copy link to this diagram. The rendered flowchart on a dark background flows top-down: Request received leads to Authenticated?, which branches yes to Rate limit OK? and no to 401 Unauthorized. Rate limit OK? branches yes to Handle request and no to 429 Too Many Requests. Handle request connects with a dotted arrow to Audit log and a thick arrow to 200 OK
2532
Reposted by Gustav Hansen
Kevin Deng @sxzz.dev · 16/07/2026
🎉 magic-string is now fully migrated to pure ESM and TypeScript, and its long-awaited v1.0 release is finally here! github.com/Rich-Harris/...
github.com
feat!: migrate build to pure ESM and TypeScript by sxzz · Pull Request #310 · Rich-Harris/magic-string
closes #309, closes #301
2315
Reposted by Gustav Hansen
James @43081j.com · 15/07/2026
new @npmx.dev timeline chart 👀 this shows the segmented view of how much the install size changed between versions, split by package (deps + self). big thanks to @graphieros.npmx.social pairing with me on this one! npmx.dev/package-time...
the install size of vite over time, across versions. showing the distribution of the install size between dependencies and vite itself.
04911
Reposted by Gustav Hansen
Stefan Judis @stefanjudis.com · 14/07/2026
Safari shipped `display: grid-lanes` and Chromium's working on it. But what does it mean for accessibility when grid items reorder themselves? Can an adjusted `flow-tolerance` help? Manuel cautiously proposes a very interesting solution. matuzo.at/blog/2...
Code snippet: .grid-lanes { display: grid-lanes; grid-template-columns: repeat(3, 1fr); flow-tolerance: 0; }
061
Reposted by Gustav Hansen
Jovi 🐨 @jovidecroock.com · 13/07/2026
Preact supports async hydration. Resumed hydration lets Suspense boundaries become interactive independently while code/data arrives. Why that helps the main thread, what Hydration 2.0 fixes, the remaining useId problem, and streaming: www.jovidecroock.com/blog/resumed...
jovidecroock.com
Async hydration in Preact
How Preact resumes hydration across Suspense boundaries, why useId made that hard, and how streaming changes the tradeoffs.
1278
Reposted by Gustav Hansen
Joey Arhar @josepharhar.bsky.social · 14/07/2026
Hi! I'm working on a new HTML feature: filterable select There are two proposed API shapes so far: 1. Nesting <input> in <select> 2. Sibling <input> for listbox <select> w/id ref Option 1 is more ergonomic, but would break selects in older browsers Thoughts? (Both currently in Canary w/flag)
2211623
Gustav Hansen @stav.dev · 09/07/2026
🧵
010
Reposted by Gustav Hansen
Rowan Merewood @rowan.fyi · 09/07/2026
Ever been annoyed by a "confirm your email" message with a flaky magic link or OTP with clunky copy+paste, if the email even arrives‽ Optimistically, 20-30% of those emails* are never seen. We can fix that! If you have *any* email collection on your site, I'd love to see you try it & give feedback.
developer.chrome.com
Test the Email Verification Protocol with an origin trial  |  Blog  |  Chrome for Developers
Test the Email Verification Protocol with the origin trial available from Chrome 150.
33015
Gustav Hansen @stav.dev · 08/07/2026
Since experimenting with module federation at @sanity.io , we've teamed up with the core maintainers, @gioboa.bsky.social and with the help of the @e18e.dev tooling managed to cut the Module Federation Vite plugin's dependency footprint from 72 → 18. 🎉
Screenshot of npmx showing a dependency graph going from 72 to 18.
1414
Reposted by Gustav Hansen
Colin McDonnell 💎 Zod @colinhacks.com · 08/07/2026
this is the culmination of a huge engineering lift to unblock symlink-powered package linkers in JavaScript. writeup below — approachable for people who do not think about package managers in their spare time 😛 nubjs.com/blog/unblock...
nubjs.com
Node’s phantom dependency problem and the path to a 5x faster package manager
One copy of every package per machine, symlinked into every project — and the mechanisms that make that layout work across the ecosystem.
1152
Reposted by Gustav Hansen
Alex Russell @infrequently.org · 07/07/2026
It's not enough for Apple to take ~$20BN in profit from the web every year while kneecapping competitors and starving Safari of funding. No, they really seem to think we should be thanking them for their magnanimity: infrequently.org/2026/07/abje...
0125
Reposted by Gustav Hansen
Paweł Grzybek @pawelgrzybek.com · 06/07/2026
✨ New post “What's new in ECMAScript 2026” pawelgrzybek.com/whats-new-in... #javascript #nodejs #ecmascript
pawelgrzybek.com
What's new in ECMAScript 2026 | pawelgrzybek.com
Every year after the final language specification approval, I publish about the latest additions to the language. Here is a full list.
0183
Reposted by Gustav Hansen
Andrey Sitnik @en.sitnik.es · 07/07/2026
A fascinating, deep piece by @moultano.bsky.social on why modern screens can show only part of the colors our eyes can see. And where in the real world to find colors screens can’t reproduce, like the green of U.S. traffic lights. moultano.wordpress.com/2026/06/19/w...
0333
Reposted by Gustav Hansen
Ilja @fubits.dev · 06/07/2026
Heads up Svelte / npmx / atproto friends in Berlin (or those coming to @localfirstconf.com) - there will be a crossover meetup hosted by @willow.sh @patak.cat @jensroemer.com @flo-bit.dev, me and others on 2026-07-15 Sign up here: guild.host/events/atpro...
guild.host
atproto x npmx x svelte meetup | Guild
Jul 15th 6:30PM: Join us in Berlin after Local-First Conf at our crossover satellite event with the AT Protocol, npmx, and Svelte communities! A huge thank you to Bitcrowd for hosting us Schedule: T...
45617
Gustav Hansen @stav.dev · 05/07/2026
TIL github.com/michaelficar...
github.com
GitHub - michaelficarra/proposal-linear-matching: exploring features for RegExp matching with performance guarantees
exploring features for RegExp matching with performance guarantees - michaelficarra/proposal-linear-matching
000
Reposted by Gustav Hansen
Laurie Voss @seldo.com · 04/07/2026
More than a year ago I predicted that AI would create a huge new wave of programmers. Has it? Yes. But an unwelcome phenomenon came along with it: junior programmers jobs collapsed. What's the fix? seldo.com/posts/ai-has-torched-the-…
6326
Reposted by Gustav Hansen
Barry Pollard @tunetheweb.com · 02/07/2026
The first part of Declarative Partial Updates (`<template for>` out-of-order HTML) is now available, unflagged, in Chrome 150!! developer.chrome.com/release-note... The second part (the new JS setting APIs, include the streaming ones) we're still working on the spec side, but maybe for Chrome 152?
developer.chrome.com
Chrome 150  |  Release notes  |  Chrome for Developers
CSS text-fit property, background-clip border-area, Focusgroup, and more.
77722
Reposted by Gustav Hansen
Thomas Steiner @tomayac.com · 03/07/2026
👀 Look, ma! The Cross-Origin Storage extension running on Firefox! If you dare, install it via `about:debugging` from github.com/web-ai-commu.... Else, just wait for it to be approved on the Firefox Add-on Store. More background on #CrossOriginStorage: github.com/WICG/cross-o....
Cross-Origin Storage extension running in Firefox. Its popup window is open and shows resources being used across origins. The active tab is that of the extension's tests. All tests pass.
1143
Reposted by Gustav Hansen
Bramus @bram.us · 01/07/2026
New in Chrome DevTools in Chrome 151 (which goes stable mid July): The specificity bubble can now show you a breakdown of how the specificity was calculated. Big thank you and congrats to @hjanuschka.bsky.social for contributing this to Chromium 👏
Screenshot of Chrome 151 showing the specificity calculation for the currently hovered over selector.
0586
Reposted by Gustav Hansen
Jake Archibald @jakearchibald.com · 29/06/2026
There's an ideal set of sizing constraints for custom <select>, but the CSS is a bit tricky. Here's how to make it work, and a tour of new CSS features along the way. jakearchibald.com/2026/goldilo...
jakearchibald.com
The Goldilocks customizable select height
The 'ideal' sizing is more complicated than you think…
1331055