François Best
banner
francoisbest.com
François Best
@francoisbest.com
Freelance web developer, open-sourcerer, speaker.

Building `nuqs`, a type-safe search params state manager for React frameworks:
🔗 https://nuqs.dev
🦋 @nuqs.dev

🎥 youtube.com/@47ng-dev
🟣 twitch.tv/fortysevenfx
🏠 francoisbest.com
Pinned
My talk at @nextjs.org conf is online!

Go watch it, it contains two gems:
- The dangers and limits of URL state (to make you a better engineer)
- A live demo of how @nuqs.dev uses a declarative approach to type-safe and time-safe behaviours, in a composable way.
Type-safe URL state in Next.js with nuqs
YouTube video by Vercel
www.youtube.com
Hey it's me! 👋

Looking forward to see the full video, thanks again @clerk.com & @jason.energy !
Clerk put up $25,000 for the winner of the Next.js Conf Hackathon last month, and @codetv.dev partnered up to host and hang out with the teams. this was VERY fun, and we're cooking up something even bigger with the @clerk.com team for next year — stay tuned! 👀
November 25, 2025 at 11:47 PM
Reposted by François Best
🚨 check your dependencies!

in these 500+ packages, three third-party nuxt modules were affected:

- @alexcolls/nuxt-ux
- @alexcolls/nuxt-socket.io
- @posthog/nuxt

no dependencies of nuxt itself, or any of our first party modules, were affected.
We have updated this list to include more than 500 packages and 700+ affected versions, as well as a technical analysis of the attack. socket.dev/blog/shai-hu....

cc: @campuscodi.risky.biz @typescript.fm @bleepingcomputer.com @theregister.com
November 24, 2025 at 9:22 PM
A little side project using @bun.sh runs CI in ~10 seconds (sub-second package installs, and unit testing).

3 of these seconds is the old tsc for type-checking.

Let’s see how low we can Go (before the network becomes the bottleneck).
who are all you people
November 24, 2025 at 7:34 PM
Reposted by François Best
📚 Have you ever seen a TypeScript type say:

T extends any ? ... : never

and wondered: why would you do that - that doesn’t do anything! Or does it?

It does! I’m explaining it based on the `DistributiveOmit` type in my newest article:
Omit for Discriminated Unions in TypeScript
Why TypeScript’s built-in Omit breaks discriminated unions, and how a distributive version preserves them.
tkdodo.eu
November 24, 2025 at 3:49 PM
Reposted by François Best
✍️ Open source doesn’t fail because of code.
It fails because of governance gaps, burnout, and invisible work.

I wrote down what I learned working on #Expressjs and #Lodash

blog.ulisesgascon.com/open-source-...
Open Source Doesn’t Fail Because of Code!
We like to blame code when open source breaks. The reality is uglier: governance, burnout and invisible work are the real fault lines. This reflects what I learned during our work on Express and Lodas...
blog.ulisesgascon.com
November 24, 2025 at 8:22 AM
In college, I wanted to understand the sound behind Origin of Symmetry by Muse. 🎸

The rabbit hole of learning started here: analog electronics, DSP, C++, UI design (to make it all look nice), then the web (to build faster).

And there’s still one tiny part of that album that eludes me.
What’s the lore behind choosing your career path ?
November 23, 2025 at 9:37 AM
You know it’s going to be a fun side-project when you’re implementing a streaming YAML parser for lockfiles 🫠
November 23, 2025 at 9:25 AM
TIL the GraphQL explorer was removed from the @github.com docs (I should have read the warning).

It's a shame, it was handy to quickly try out queries without fiddling with access tokens.

Anybody has a good macOS GraphQL client to recommend? Preferably native & OSS 🙏
November 23, 2025 at 5:25 AM
Reposted by François Best
URL as a state is such an interesting concept. Although I haven't really deep dive into it yet, building components utilizing existing APIs like `useSearchParams` is really fun.

I want to try out @nuqs.dev and compare the implementation sometime 👀

ausathikram.com/blog/reusabl...
Reusable Components with Search Params as State
Using URL search params as state for common UI patterns.
ausathikram.com
November 22, 2025 at 8:59 AM
TIL that Qualcomm acquired Arduino, and is now proceeding to turn what was once an open community of OSH makers into a corporate machine.

Sad, especially since I wrote my first ever programs on those chips, and my first contribution to OSS was creating the Arduino MIDI Library, ~16 years ago. 😓
Did Qualcomm kill Arduino for good? | Molecularist
The maker community worried Qualcomm would kill the Arduino ethos. New T&Cs confirm the community's worst fears. Here's what's at stake, what Qualcomm got wrong, and what might still be salvaged.
www.molecularist.com
November 21, 2025 at 7:59 PM
Reposted by François Best
📦 [email protected] is out! 🚀

🐞 It fixes two bugs with @tanstack.com Router:

- Trailing slash is no longer added on state updates
- Custom history.state is maintained

Try it out: pnpm add nuqs@latest
November 21, 2025 at 12:01 PM
Happy nerdy cyberdjent day to those who celebrate 🤘👨‍💻

*state of flow intensifies*
Recursive Infinity, by The Algorithm
9 track album
intothealgorithm.bandcamp.com
November 21, 2025 at 9:15 AM
The State of React survey is out!

🔗 survey.devographics.com/en-US/survey...

You know what to do 👀
November 19, 2025 at 9:33 PM
Welcome to Bluesky, @orcdev.bsky.social ! 👋

For the Horde! ⚔️
November 19, 2025 at 2:25 PM
Yesterday I quietly released @nuqs.dev 2.8.0

No big new feature, but a widening of the SemVer range for react-router{-dom} to include v5, as I need it in a client project.

Might be removed in [email protected], we'll see how support goes.

The adapter can be installed with the @shadcn.com CLI:
React Router v5 Adapter | nuqs
Using nuqs in React Router v5 applications.
nuqs.dev
November 18, 2025 at 8:51 AM
Reposted by François Best
Going back through @ricky.fm's Async React as I prep an internal talk, and this part is insanely good, felt like it deserved a reshare🔥
youtu.be/p9OcztRyDl0?...
November 17, 2025 at 7:12 PM
Reposted by François Best
❌ If you unit-test a React 19 app, there’s a good chance a chunk of your CI time is being wasted on… 😴 setTimeout.
Wait, what? Yes!

React 19 introduced a minimum delay for showing a Suspense fallback, and hardcoded (!) it to 300ms.
Just 3 tests can waste almost 1 second on absolutely nothing!
November 17, 2025 at 2:15 PM
I have an idea for my @reactadvanced.gitnation.org talk that would requiring building and shipping a new feature in @nuqs.dev next week (so I can actually rehearse with it).

Conference-driven development is real.
November 15, 2025 at 9:09 PM
Reposted by François Best
🤔 What if there were a conference without talks? Just hanging out with OSS maintainers & builders, seeing what they’re working on, and learning cool stuff by actually talking to people.

🤯 What if hallway track turned into the whole event!

💡 @tannerlinsley.com is exploring it. Interested? ⬇️
Web Forge Conf - A new kind of web developer conference
A community funded, not for profit event built for creators and the developers who use their work. Less stage. More story. All signal.
webforgeconf.com
November 13, 2025 at 9:36 AM
Reposted by François Best
After a few months of targeted attacks on our ecosystem, followed by a confusing and rapidly changing response from @github.com, we wanted to put together some guidance for maintainers on how to help us all secure our supply chain together.

Here is that guidance 👇
With npm supply chain attacks on the rise, secure publishing practices are becoming a pressing concern for anyone maintaining npm packages. ⚠️

We've released updated guidance to help maintainers reduce exposure, strengthen release processes, and protect the ecosystem: openjsf.org/blog/publish...
Publishing More Securely on npm: Guidance from the OpenJS Security Collaboration Space | OpenJS Foundation
The OpenJS Security Collaboration Space has been working closely with GitHub’s npm team to understand how new security features affect projects and maintainers, especially as threats and tools keep ev...
openjsf.org
November 14, 2025 at 4:21 PM
Reposted by François Best
React Free Weekend is LIVE!
React Free Weekend Starts NOW! 🚀

For the next 48hrs, access our full React Mid-Level Training - for FREE!

💻 13 Real-world code challenges
🧠 12 Interactive quizzes
📝 Trial exam
📘 & more

Just you, React, & a weekend built for growth.

Join now👇
https://go.certificates.dev/fw25x
Certificates.dev Free Weekend | Free access to React Developer Certification Training
Unlock 48 hours of free access to the Certified React Developer Training on November 15–16 2025. Dive into theory, coding challenges, quizzes, and a trial exam.
go.certificates.dev
November 14, 2025 at 9:18 PM
Been getting a lot of spam on the @nuqs.dev repo (sorry if you’ve been impacted 😓)

Reporting from a phone (where I catch most of reply notifications) is so obnoxious I just end up marking the spam as such and ban the author. But even that fails in some cases. 😡
Reporting spam on @github.com should take less effort than posting spam
November 14, 2025 at 7:56 PM
Reposted by François Best
📰 Today, I'm writing about the difference between Vitest Browser Mode and Playwright. Learn what makes them similar but also completely different, from their purpose to how they work under the hood.

A must read.

www.epicweb.dev/vitest-brow...
Vitest Browser Mode vs Playwright
What is the difference between Vitest Browser Mode and Playwright? And when to use each in your tests?
www.epicweb.dev
November 13, 2025 at 2:47 PM
The @nuqs.dev @shadcn.com registry now has an RSS feed 📡

✨ Get notified when we drop a new adapter, parser or utility
🐞 or when we push updates & bug fixes

nuqs.dev/registry

It now contains community adapters, to one-command install nuqs in:

⛩️ Waku
🐘 Inertia
🥇 One.js
📱 Expo Router (coming soon)
November 13, 2025 at 12:13 PM