Florian Sanders
banner
florian-sanders.fr
Florian Sanders
@florian-sanders.fr
Front-end Web Dev @ Clever Cloud #a11y #web-components #nixos 🏳️‍🌈
Reposted by Florian Sanders
ECMAScript excitement 😉

Congrats to @bridgear.bsky.social @jordan.har.band on advancing Object.keysLength to Stage 2 at TC39 today 🎉

let count = Object.keysLength(o)

It counts the string-keyed own properties on an object. This avoids the cost of the intermediate array in Object.keys(o).length
November 19, 2025 at 5:47 AM
Reposted by Florian Sanders
ECMAScript excitement 😉

Congrats to my coworker @ashley-c.bsky.social at TechAtBloomberg on advancing Await Dictionary to Stage 2.7 at TC39 today 🎉

Promise.all returns positional results as an array. Promise.allKeyed allows named results inside an object 👍

github.com/tc39/proposa...
November 18, 2025 at 6:33 AM
Reposted by Florian Sanders
New on the blog: I learned that Node.js includes a native method for marking other methods as deprecated. 🎉

www.stefanjudis.com/today-i-lear...
November 17, 2025 at 6:09 PM
Reposted by Florian Sanders
🔥 Live from TPAC:
Native routing coming to the web platform!

First step was URLPattern.
Next is matching routes in CSS¹
Then naming them and using these high-level names in HTML, CSS, JS.

Exciting stuff.

¹ See CSS WG issue 12594 (not linking to avoid too much noise)
November 14, 2025 at 2:39 AM
Reposted by Florian Sanders
Firefox 147 should land the Navigation API 🙌🏻 🙌🏻 🙌🏻 bugzilla.mozilla.org/show_bug.cgi...
1997962 - Ship Navigation API
RESOLVED (afarre) in Core - DOM: Navigation. Last updated 2025-11-13.
bugzilla.mozilla.org
November 13, 2025 at 7:31 PM
Reposted by Florian Sanders
Type stripping is now stable.
Enjoy 🌞
November 12, 2025 at 5:07 AM
Reposted by Florian Sanders
Yesterday at TPAC I publicized my draft proposal for adding a declarative templating API to the DOM.

github.com/justinfagnan...

The repo has:

📖 Explainers for the templating API and DOM scheduler API
🏗️ Full prototype implementations
⚗️ a JSX transform
⚛️ a mini React-like framework
github.com
November 10, 2025 at 11:04 PM
Reposted by Florian Sanders
Did you know that you can localize quotes right in CSS?

Now you do! 🫵

www.stefanjudis.com/today-i-lear...
November 10, 2025 at 6:09 PM
Reposted by Florian Sanders
Gecko: Intent to prototype and ship: Navigation API
Gecko: Intent to prototype and ship: Navigation API
Gecko: Intent to prototype and ship: Navigation API
groups.google.com
November 7, 2025 at 7:17 AM
Reposted by Florian Sanders
setHTML(), Trusted Types and the Sanitizer API. Ollie Williams shows how these APIs protect against XSS by sanitizing HTML safely and enforcing trusted types. Supported in Firefox Nightly and Chrome Canary, with wider adoption coming. #security #html

olliewilliams.xyz/blog/sanitiz...
November 3, 2025 at 1:03 PM
Reposted by Florian Sanders
The @firefoxdevtools.bsky.social JSON viewer got better in @firefoxnightly.bsky.social : the console offers access to the original json data via `$json`.
This allows to easily manipulate the underlying data to get what you want
November 7, 2025 at 11:40 AM
Reposted by Florian Sanders
Command invokers soon to be baseline newly available!

Also field-sizing is finally here.

Some other nice changes too!
Curious about web technology coming to Safari? How about field-sizing, position-visibility, random(), scrollbar-color, hidden=until-found, auto-expanding
, command & commandfor, Largest Contentful Paint, CHIPS, scrollend event, Navigation API & more!

developer.apple.com/documentatio...
Safari 26.2 Beta Release Notes | Apple Developer Documentation
Released November 4, 2025 — 26.2 beta (20623.1.12)
developer.apple.com
November 5, 2025 at 8:49 PM
Reposted by Florian Sanders
Storybook 10 is here!

✂️ ESM-only (the only breaking change!)
🧩 Module automocking for easier testing
🏭 Typesafe CSF factories Preview for React
💫 UI editing and sharing optimizations
🏷️ Tag filtering exclusion for sidebar management
🔀 Svelte async component support
Storybook 10
ESM-only, 29% lighter, module automocking, and more
storybook.js.org
November 4, 2025 at 7:02 PM
Reposted by Florian Sanders
The closest I have to a Halloween post, from 5 years ago and last updated in mid-2023:
adrianroselli.com/2020/11/more...
More Accessible Skeletons
I had this post queued up for Halloween because, come on, skeletons, and then life did its thing and now it is a … Thanksgiving post? Many skeleton patterns do a poor job presenting themselves to scre...
adrianroselli.com
October 31, 2025 at 7:20 PM
Reposted by Florian Sanders
the design tokens community group spec is now "stable" 👀

www.designtokens.org/tr/2025.10/
Design Tokens specification reaches first stable version | Design Tokens Community Group
www.w3.org
October 29, 2025 at 3:59 PM
Reposted by Florian Sanders
JavaScript top-level await is no longer considered 'baseline' due to a pretty big Safari bug caniuse.com/mdn-javascri...

The module graph fails in cases where two modules import a third at the same time. Demo: random-stuff.jakearchibald.com/bug-repros/t...

It's best to avoid the feature for now 😔
JavaScript operator: await: Use at module top level | Can I use... Support tables for HTML5, CSS3, etc
caniuse.com
October 26, 2025 at 8:17 PM
Reposted by Florian Sanders
Online on a weekend? You can grab access to my web components course for $25 today and tomorrow. Big ol’ discount. Use the code OCT25-26.

(And as usual, if you need further accommodation, just use the email form and we’ll work it out.)

scottjehl.com/learn/webcom...
Web Components Demystified online course | Scott Jehl, Web Designer/Developer
A comprehensive, premium course about building dynamic, fast, resilient apps with standard web components.
scottjehl.com
October 25, 2025 at 2:59 PM
Reposted by Florian Sanders
If you're trying to play around with the sanitizer API and thinking why are none of my elements being accepted, the default sanitizer config (e.g. if you don't pass options to `setHTML()`) is really restrictive. Try `setHTML("foo", {sanitizer: {}})` and then it's just removing XSS.
October 24, 2025 at 9:25 AM
Reposted by Florian Sanders
Vitest 4 is out!

- Browser Mode is Stable
- Visual Regression Testing
- Improved Debugging
- Pool Stabilization
- New APIs
- Bug Fixes

Stay updated with our blog post:

vitest.dev/blog/vitest-4
Announcing Vitest 4.0
Vitest 4.0 Release Announcement
vitest.dev
October 22, 2025 at 3:43 PM
Reposted by Florian Sanders
tree-sitter is the only parser that properly treats JSX as separate from ECMAScript.

Babel, SWC, esbuild, etc should follow suit.

JSX should be a plugin. not builtin.
(this has benefits for everyone else as well)
October 22, 2025 at 8:22 PM
Reposted by Florian Sanders
Sanitizer API is now enabled by default in Firefox Nightly.

bugzilla.mozilla.org/show_bug.cgi...

developer.mozilla.org/en-US/docs/W...

Still behind a flag in Chrome Canary...
HTML Sanitizer API - Web APIs | MDN
The HTML Sanitizer API allows developers to take strings of HTML and filter out unwanted elements, attributes, and other HTML entities when they are inserted into the DOM or a shadow DOM.
developer.mozilla.org
October 21, 2025 at 5:25 PM
Reposted by Florian Sanders
Check your forms, you might not need the “controlled” pattern after all
New blog article is out! This time about “controlled” forms. You don’t really need them for very many use cases these days, but there are way too many of them out there.

#react #frontend

michaelwarren.dev/blog/control...
You probably don‘t need controlled forms
Controlled forms, form element values, and validation should be a last resort, not a first choice and I‘ll explain why.
michaelwarren.dev
October 20, 2025 at 5:31 PM
Reposted by Florian Sanders
Did we all celebrate that `::details-content` works in all major browsers now? 🎉

developer.mozilla.org/en-US/docs/W...
October 20, 2025 at 5:32 PM
Reposted by Florian Sanders
⚓ Oxlint now supports plugins written in JavaScript ⚓

Developers can customize and extend Oxlint using JavaScript, but at a speed approaching Rust, due to 'raw transfer' between Rust and JS, and other breakthroughs

Many ESLint plugins can run without any modification.

Read the full post👇
October 20, 2025 at 11:19 AM