Sign in

François Best

@francoisbest.com
1.6K followers 474 following 1.6K posts

Freelance web developer, open-sourcerer, speaker. Building `nuqs`, a type-safe search params state manager for React frameworks: 🔗 nuqs.dev 🦋 @nuqs.dev 🎥 youtube.com/@47ng-dev 🟣 twitch.tv/francoisbest 🏠 francoisbest.com

PostsRepliesMedia
François Best @francoisbest.com · 25/09/2026
Haven't been active much here, sorry, AI-in-OSS burnout is real. How do you care when nobody else does? When nobody engages? When all the human connection is gone? When all you read is AI slop? I want to go back to coding for fun. Because whatever this is, it's very much _not_ fun.
1611111
Reposted by François Best
React Advanced London @reactadvanced.gitnation.org · 19/09/2026
"Maintaining Open-Source at the Age of AI." That's the talk @francoisbest.com is bringing to React Advanced, on what it takes to keep open-source projects healthy as AI reshapes how code gets written. Can't wait to see you 🎟️ reactadvanced.com
032
Reposted by François Best
nuqs @nuqs.dev · 20/08/2026
📦 nuqs@2.10.0 is out! 🚀 The React SPA adapter is now SSR-compatible for @astro.build, Inertia.js, @fastify.dev etc. Feed it the `serverSearch` prop to avoid a flash of defaults on island hydration. Changelog: nuqs.dev/changelog#v2... Try it out: pnpm add nuqs@latest
// search.astro
---
import { SearchIsland } from '../islands/SearchIsland'
---

<SearchIsland client:load serverSearch={Astro.url.search} />

// SearchIsland.tsx
import { NuqsAdapter } from 'nuqs/adapters/react'

export function SearchIsland({ serverSearch }: { serverSearch: string }) {
  return (
    <NuqsAdapter serverSearch={serverSearch}>
      {/* useQueryState works here, on the server & the client */}
    </NuqsAdapter>
  )
}
081
Reposted by François Best
nuqs @nuqs.dev · 17/08/2026
📦 nuqs@2.9.6 is out! 🚀 It fixes an issue with pending URL updates not resetting on Back navigation in Next.js pages router & TanStack Router, when no useQueryState(s) hooks were mounted. Also minor correctness fixes for parsers. nuqs.dev/docs/changel...
nuqs.dev
Changelog | nuqs
Type-safe search params state management for React. Like useState, but stored in the URL query string.
081
Reposted by François Best
nuqs @nuqs.dev · 05/08/2026
📦 nuqs@2.9.5 is out! 🚀 It adds SSR support to the community Inertia adapter, and fixes 6 minor edge-case bugs. Full changelog: nuqs.dev/changelog#v2... Try it out: pnpm add nuqs@latest
nuqs.dev
Changelog | nuqs
Type-safe search params state management for React. Like useState, but stored in the URL query string.
061
Reposted by François Best
nuqs @nuqs.dev · 29/07/2026
📦 nuqs@2.9.3 is out! 🚀 It fixes a bug where state updates would blink/replay when pending state updates done in startTransition were rebased on top of other priority updates. Concurrent React is fun. Try it out: pnpm add nuqs@latest
Install nuqs@latest using your favourite package manager.
083
François Best @francoisbest.com · 24/07/2026
🗣️ I'll be speaking at @reactadvanced.gitnation.org London again this year! 🇬🇧 My "Maintaining open-source at the age of AI" talk is a fun one, with deep & important discussions about our OSS ecosystem. See you all on October 23rd/26th! Grab your ticket or register for the livestream via my badge:
gitnation.com
Check out my badge & claim your free React Advanced 2026 remote ticket!
Join 5k engineers worldwide at React Advanced 2026 and meet 40+ top speakers at October 23 - 26, 2026
080
Reposted by François Best
nuqs @nuqs.dev · 24/07/2026
📦 nuqs@2.9.2 is out! 🚀 It fixes a React concurrency issue where a discarded render could leave query state stuck out of sync with the URL. Try it out: pnpm add nuqs@latest
Install nuqs@latest using your favourite package manager
091
François Best @francoisbest.com · 21/07/2026
If Doom was made in the EU 🍪 The HTM-in-canvas API is really fun to play with. Play it here: doom-c15t.vercel.app
041
Reposted by François Best
nuqs @nuqs.dev · 19/07/2026
📦 nuqs@2.9.1 is out! 🚀 It includes many bug fixes, a few found by @shadcn.com's /improve skill 🫶, and also: - Better monorepo & MFE compatibility - Fixed startTransition support in @reactrouter.com v7+ (while loaders run) Also, we have a changelog page now: nuqs.dev/changelog
nuqs.dev
Changelog | nuqs
Type-safe search params state management for React. Like useState, but stored in the URL query string.
091
François Best @francoisbest.com · 09/07/2026
The replay of my @forkit.community talk is out: youtu.be/slbSwQo8Xqc?...
youtu.be
Maintaining open-source at the age of AI - François Best
YouTube video by Fork it! Community
1113
François Best @francoisbest.com · 08/07/2026
/goal go through all my repos and upgrade them to typescript@^7 Congrats to the team! 🎉
0160
Reposted by François Best
Neciu Dan @neciudan.dev · 06/07/2026
"The state of your application, instead of living in memory, lives in the URL." New Señors at Scale episode with @francoisbest.com, creator of nuqs: URL state internals, npm supply chain attacks, and AI agents in open source. 🎥 youtu.be/b3AYuuRdyf4 #React #nuqs
1155
François Best @francoisbest.com · 04/07/2026
✍️ New blog post: how I refactored the @nuqs.dev release pipeline for npm staged publishing. nuqs.dev/blog/staged-... Also some relevant supply-chain security advice for GitHub Actions & npm package consumers. (words written by hand, with some LLM assistance for supporting diagrams)
nuqs.dev
Staged publishing for supply-chain security | nuqs
How we hardened the nuqs release pipeline against supply-chain attacks.
2327
François Best @francoisbest.com · 02/07/2026
I'm live on Twitch for a couple of hours to talk about npm supply-chain security and GitHub Actions. But first, we gotta record some 8bit heavy metal 🤘😈 www.twitch.tv/francoisbest
twitch.tv
francoisbest - Twitch
Don't get pwned + it might get loud
052
François Best @francoisbest.com · 02/07/2026
When people say that "@nuqs.dev just works": this is why. app.principal-ade.com/47ng/nuqs
The nuqs codebase visualised as a tree map. The e2e test make up 60%, the docs 20%, and the core package only 10%.
2283
François Best @francoisbest.com · 30/06/2026
This is the first GA release that went through our new npm staged publishing pipeline 🙌 Blog post explaining how it works in progress ✍️
120
François Best @francoisbest.com · 27/06/2026
Weekend project: drafting a spec RFC for StandardCodec, a StandardSchema inspired-and-compatible way to bidirectionally convert between two arbitrary data types in TypeScript. Zod codecs, Effect Schema, nuqs parsers, and now Waku codecs are all implementations of this. We need a standard.
4120
François Best @francoisbest.com · 26/06/2026
Your company should sponsor Artem if it mocks its HTTP/API layer with mswjs.io. (and if it does not yet, it should) $ npx cashcn npm://msw 100/m
mswjs.io
Mock Service Worker
API mocking library for browser and Node.js
170
François Best @francoisbest.com · 26/06/2026
A huge thank you to all my sponsors 💖 Y'all are the reason I can dedicate more time to open-source, my dream being able to do this full-time and still pay the bills and sustain my family while working in the open. Join these wonderful folks, it's one command away: $ npx cashcn franky47 100/m 🫶
You reached your goal of 20 monthly sponsors!
4181
François Best @francoisbest.com · 21/06/2026
New silly weekend project: `cashcn`, the fastest way to sponsor OSS maintainers. $ npx cashcn franky47 100 Supports: - GitHub repos: 47ng/nuqs - OpenCollective: oc://antfu - NPM packages: npm://msw - recurring: 100/m Redirects to GitHub sponsors pre-filled (URL state FTW) Go sponsor maintainers!
github.com
GitHub - franky47/cashcn: Sponsor OSS maintainers via the CLI
Sponsor OSS maintainers via the CLI. Contribute to franky47/cashcn development by creating an account on GitHub.
33411
François Best @francoisbest.com · 05/06/2026
Talk prep is going well 🙈💀
MacBook on a table, Keynote slide reads: OPEN SOURCE IS DEAD.
7341
François Best @francoisbest.com · 04/06/2026
🌶️ I’m dropping Git tags from my GitHub Actions. I’m updating some of the GitHub Actions I made a while back, and I won’t be releasing them under a Git tag (that allows consuming it as @​1.2.3). Those are mutable, and SHA1 pinning is recommended and enforceable anyway.
4170
François Best @francoisbest.com · 03/06/2026
How it started / How it's going
Power rangers merging meme: Users + Maintainers + Commenters + Contributors + Sponsors = Healthy OSSCartoon: kids are piling hands: Users, Maintainers, Sponsors, Commenters, Contributors. Then Tinky Winky with a Claude logo on his chest. Then everyone becomes an AI-Tinky Winky.
0250
François Best @francoisbest.com · 29/05/2026
🟣 I'm live on Twitch, chill birthday stream 🥳 Playing with local AI models & working on OSS, come say hi! www.twitch.tv/francoisbest
twitch.tv
francoisbest - Twitch
Chill birthday stream 🥳 · OSS & local AI
011
François Best @francoisbest.com · 29/05/2026
After messing around way too much with tmux + mosh + Ghostty settings to make them play nice, it's good to see projects that wrap this nicely. herdr.dev
herdr.dev
Herdr — one terminal for the whole herd
Terminal-native agent runtime and multiplexer. Detach, reattach, SSH in, and keep every agent visible.
0330
François Best @francoisbest.com · 28/05/2026
Lots of cool folks there 👋 ticker.bskyshelf.space/report/franc... @thibaultleouay.dev @tkdodo.eu @kettanaito.com @tyler.fun @patak.cat @sebastienlorber.com @antfu.me
1161
François Best @francoisbest.com · 28/05/2026
Thank you so much upstash.com for sponsoring me! 💖 A lovely early birthday present 🥳
You have a new GitHub sponsor!
Upstash is sponsoring you for $100/month
0180
François Best @francoisbest.com · 28/05/2026
what
Googling "how many Ps are in François"
Answer:
There is 1 "p" in the name "François".
It is the 6th letter in the word (F-r-a-n-c-o-i-s).
<emphasis on c and o>
080
Reposted by François Best
npmx @npmx.dev · 27/05/2026
console.log("happy birthday, @nodejs.org!")
A screenshot of the npmx.dev homepage, where the standard logo is replaced with a logo in the nodejs style. A special noodle in honor of nodejs's birthday
312013
François Best @francoisbest.com · 26/05/2026
I did not have the Pope quoting Gandalf about AI on my bingo card today 😳
0152
François Best @francoisbest.com · 25/05/2026
The new reality of open-source at the age of AI: - 📈 Downloads going up (3M weekly for @nuqs.dev) - 📉 Human engagement (visit to the docs, stars, issues & discussions) going down. I’ll be talking about this in my talk next week at @forkit.community
nuqs weekly download stats, showing 3M last week from 2M 90 days ago.Traffic to the nuqs docs, showing a 39% reduction for the last 90 days
4508
François Best @francoisbest.com · 21/05/2026
Something awesome about Bluesky: 1. I see a post I'd like to load in my agent. 2. "wouldn't it be nice if I could give it the atproto link?" 3. Wait, markdown would be better, let's try renaming the domain to bsky.md on the off-chance… 4. It works 🤯
bsky.md
bsky.md — Bluesky as Markdown
Fetch any public Bluesky content as clean, portable Markdown. No auth, no API key.
1422746
François Best @francoisbest.com · 21/05/2026
Playing with staged publishing: - You can reject then re-stage the same package. Useful if a workflow botched a release: cancel, reject, and try again. - You can't stage the same package twice (409 Conflict), makes sense. - Is there a timeout on staged packages? We'll see… ⏱️
The staged packages web UI on npmjs.com, showing two test packages waiting for approval or denial (or timeout for one of them).
1111
François Best @francoisbest.com · 21/05/2026
Staged publishing TL;DR 1. You replace `npm publish` with `npm stage publish` 2. It puts the tarball in a staging area for review 3. You approve it via the CLI or web It will land in npm@^11.15.0. I've already turned off non-staged publishing in @nuqs.dev (in the Trusted Publishing settings).
3494
François Best @francoisbest.com · 20/05/2026
Microsoft game of the year 2026
The Halo Reach videogame cover, but it reads Halo Breach, and features Jun (Noble 3) with a red NPM armour, Carter (Noble 1) with a black GitHub armour, and a Shai-Hulud Dune sandworm in the background.
030
François Best @francoisbest.com · 18/05/2026
🟣 I'll be live today on Twitch to talk about the security of GitHub Actions (or lack thereof): - What you can change in your workflows today to avoid being pwned - What you can setup to make sure it stays "secure" over time Gonna be fun, come hang out at 10am CEST: www.twitch.tv/francoisbest
twitch.tv
francoisbest - Twitch
Freelance web developer, open-sourcerer, speaker. Building nuqs, a type-safe search params state manager for React (Next.js, Remix, React Router, React SPA etc)
0112
Reposted by François Best
patak @patak.cat · 16/05/2026
Heartbreaking. And a wake-up call. It is no longer about being difficult to find a way to sustain yourself through your work online. It is no longer sustainable to keep a website up now. Axel has done so much for the web and all of us. Buy one of his books if you can. We've learned so much from him.
2ality blog: temporarily offline

Dear visitor! Two things happened recently:

- The income from my book sales went from being enough for me to live off (2024) to zero (2026).
- The traffic to my blog and my books (which were free to read online) increased beyond what I can currently afford. Virtually all of it comes from AI crawlers, so there is no ad income.

Therefore, I’m taking my blog and my books offline so that I can decide what to do next – especially w.r.t. AI companies stealing my work. This may take a while (think months): I don’t have any energy to deal with this right now.

I apologize for this (hopefully temporary) inconvenience to my human readers! You can still buy my books at Payhip.

Axel Rauschmayer
431084
François Best @francoisbest.com · 14/05/2026
Takeaway from the TanStack vuln: people don't read reports. The number of replies "they should have checked before merging"... 😓 The PR that kicked it off **wasn't** merged. It didn't need to be, and the vuln vector (cache poisoning) was invisible to maintainers.
1180
François Best @francoisbest.com · 14/05/2026
Hackers behind Shai-Hulud are now offering crypto bounties to their mates for the trophy of highest vuln on OSS packages. I’m tired boss 😓
socket.dev
TeamPCP and BreachForums Launch $1,000 Contest for Supply Ch...
TeamPCP and BreachForums are promoting a Shai-Hulud supply chain attack contest with a $1,000 prize for the biggest package compromise.
2130
François Best @francoisbest.com · 13/05/2026
Maintainers with @github.com sponsors: have you received your April payout? Asking as a few of us haven't 🤔
320
François Best @francoisbest.com · 12/05/2026
npm needs to change their logo
the npm logo style, but it reads pwn.
418333
François Best @francoisbest.com · 12/05/2026
Writing this made me feel sad, angry, borderline sick, but better be safe than sorry. nuqs currently stands at 2.5M weekly downloads, it only takes one angle I haven't seen and defended against to pwn projects that I care about. I have ideas I want to try, stay tuned. We'll be back. 🫶
2240
François Best @francoisbest.com · 11/05/2026
Slightly increase a band Liquid Tension Proof
130
François Best @francoisbest.com · 09/05/2026
Weekend project: making a cricket set for my wife’s birthday 🏏 It’s good to take a break from tokens and to make things with your hands from time to time. 🪚
Block of Douglas fir in a vise with a tenon saw ripping the cheeks of the handle for the batMallet and chisel to detail the bat handleThe bat roughly shaped on the workbench, spokeshave, planes and mallet on the bench (with curls and shavings)Finished result: three stumps, two bails forming the wicket, planted on a grass field, bat resting against it, and a tennis ball on the floor.
4100
François Best @francoisbest.com · 06/05/2026
Talk prep: - Next week: lightning talk on fast & deterministic tools I use for agentic loop validation (tsgo oxc knip bun:test) - 5th of June: "Maintaining Open Source At The Age Of AI" at @forkit.community in Rouen 🇫🇷: how the job of maintainers is evolving and how/where AI can (and can’t) help.
281
Reposted by François Best
Neal Agarwal @neal.fun · 29/04/2026
Introducing Cursor Camp, a website to hang out with other cursors. Out now :) > neal.fun/cursor-camp/
331432456
François Best @francoisbest.com · 28/04/2026
Brooks is capturing exactly my feelings on AI at the moment. One minute very excited about what we can now do, head spinning with ideas, and the next speedrunning through the stages of grief for our industry, software craftsmanship and product quality.
How are people feeling about AI?

People are scared, annoyed, confused, befuddled, amazed, having a blast, disenfranchised, and completely franchised all at once.
0170
Reposted by François Best
Dominik 🔮 @tkdodo.eu · 22/04/2026
On the @sentry.io codebase: - tsc is 56s - tsgo is 9s Use it, NOW 🔥
51287
Reposted by François Best
Feross @feross.bsky.social · 23/04/2026
🚨 Bitwarden CLI compromised in active supply chain attack. @bitwarden/cli version 2026.4.0 contains malicious code in bw1.js, published after attackers compromised a GitHub Action in Bitwarden's CI/CD pipeline. Developing story...
3104