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
Uh I can’t message you either 😅 I opened my DMs, try giving it another go from your end.
@patak.cat can’t be messaged
130
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
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 · 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 · 09/06/2026
Pareil chez moi, et l’appli ne fonctionne plus. 🫠
An error has occurred 
We are doing our utmost to resolve the issue. Please try again later.
120
François Best @francoisbest.com · 07/06/2026
It gets better at the end:
OPEN SOURCE IS ABOUT PEOPLE
030
François Best @francoisbest.com · 07/06/2026
Thanks, it went well ☺️ knip.dev was also featured:
Four icons on a black background:
TypeScript (tsc), Vitest, Knip, oxlint/oxfmt
140
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 · 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 · 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
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 · 22/05/2026
Unless you wire that into the action that calls npm stage publish (push mode), there is no mechanism to be notified of changes of state of the staging area other than polling npm stage list (pull mode). Maintainers do receive an email on successful staging though.
Email screenshot from npm
Subject: Successfully Staged @47ng/staged-publishing-test@0.0.0-multi-approve-1
Body:
Hi franky47!

A new version of the package @47ng/staged-publishing-test (0.0.0-multi-approve-1) was staged for publishing at 2026-05-22T09:00:57.567Z from 2a01:e0a:fa7:fa40:1d80:4d8b:d270:430.
The shasum of this package is 244a6d0486e19932679878a904bb65ebaf7332ed.

This version has been staged and requires approval before it is published to the registry.

If you have questions or security concerns, you can contact us at https://www.npmjs.com/support.

Thanks,

The npm team.
100
François Best @francoisbest.com · 22/05/2026
Perfect, thank you so much! 🫶
The last three messages above this one, in markdown form.
140
François Best @francoisbest.com · 21/05/2026
Hum no it looks like provenance info is cleared when you reject a staged package, and creates a new record* when you stage it again. initial stage: github.com/franky47/npm... restaged after rejection: github.com/franky47/npm... *different logId & hash, but same contents otherwise.
https://search.sigstore.dev/?logIndex=1595487471https://search.sigstore.dev/?logIndex=1595506773
100
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
Almost spotless (almost)
AI-generation artifact on one of the numbers, looking like an extra decimal point.
110
François Best @francoisbest.com · 14/05/2026
Should be sorted, check your dashboard 🫡
Thanks for the heads up @franky47!

@JoshuaKGoldberg you should see your payouts come through over the next few days.
110
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 · 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 · 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
François Best @francoisbest.com · 22/04/2026
Oh that’s neat, if the os & cpu fields in the optional deps are exclusive, package managers will auto-install just the right one?
Code sample from the @typescript/native-preview package.json on npmx.dev

"optionalDependencies": {
        "@typescript/native-preview-win32-x64": "7.0.0-dev.20260421.2",
        "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260421.2",
        "@typescript/native-preview-linux-x64": "7.0.0-dev.20260421.2",
        "@typescript/native-preview-linux-arm": "7.0.0-dev.20260421.2",
        "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260421.2",
        "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260421.2",
        "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260421.2"
    }
230
François Best @francoisbest.com · 27/03/2026
That was such a lovely talk!
Ramona on stage, slide reads:
The cake is a lie, and so is your login’s accessibility Ramona on stage, slide shows a hand drawn Portal (the game) logoRamona on stage, slide reads « use color-feature in DevTools », portal gun hand drawing « TanStack DevTools ❤️ »
131
François Best @francoisbest.com · 27/03/2026
@tkdodo.eu presenting knip.dev by @webpro.nl at #ReactParis ✂️
Dominik on stage, slide reads « Dead code shouldn’t exist. How we removed 28k lines of code, one knit at a time »Knip
Comprehensive, fast, zero config, plugins, monorepo, auto fix
1344
François Best @francoisbest.com · 26/03/2026
Kawtar Choubari exposes the bad habits of our agents when generating React code: - useEffect state sync - key={index} - fetching in useEffect (“ @tanstack.com mentioned” counter: 2)
Kawtar on stage, title slide: “React anti-patterns in AI generated code”Kawtar on stage, slide showing the Elmo cocaine meme, preferring useEffect to Zustand + TanStack Query
030
François Best @francoisbest.com · 26/03/2026
Next, Gabriel Pichot is showing us how good tools help us reduce cognitive load (and it matters even more at the age of AI). Also TIL about Germane load
Gabriel on stage with Venn diagrams:
- Problems redux solves vs Problems you want to solve: no overlap
- Problems TanStack Query solves vs problems you want to solve: ~40% overlap
120
François Best @francoisbest.com · 26/03/2026
@una.im starts with showing how amazing modern CSS is. interestfor is super interesting to add hover cards on links, without any JS.
Una on stage, slide reads:
Key UX principles
1. reduce noise
2. Guide users
3. PersonalizeUna on stage showing how interestfor can make hover cards show a user profile when hovering/focusing traditional <a> linksUna on stage showing the styleable parts of <select>
141
François Best @francoisbest.com · 26/03/2026
Let’s go, @tej.as & @sarahdayan.com kicking off #ReactParis 2026 The lineup is amazing 🤩
Sarah and Tejas on stage with all the speakers on a slide
1112
François Best @francoisbest.com · 23/03/2026
Download stats counts have been down for 3 days last week and one day the week before.
Download stats for nuqs, showing zero-download days among regular numbers.
020
François Best @francoisbest.com · 23/03/2026
Spammers have discovered vibe-coded UI slop. 🫠
A sloppy web UI looking like an alert (red everywhere, but classic tell-tale of AI-generation)A sloppy UI for a fake alert (emoji, coloured shadows)
1260
François Best @francoisbest.com · 20/03/2026
Shrödinger's PR: both open & merged at the same time. 🐈
PR on GitHub, with the badge "Open" at the top, but a "Pull request successfully merged and closed" status at the bottom.
4291
François Best @francoisbest.com · 27/02/2026
Being a bit of a URL nerd, I love this idea danlevy.net/llm-connecti...
Anatomy of an LLM connection string

llm://app-name:password@api.openai.com/gpt-5.2?temp=0.7&max_tokens=1500

The scheme is llm://. The host is the provider’s API base URL. The path is the model name. And query parameters handle all the runtime options that usually clutter your code.
1221
François Best @francoisbest.com · 25/02/2026
I love the achievements section on @ntatoud.bsky.social's personal website 🙌 noe.tatoud.com/achievements
Achievements: 4/13 unlocked
Unlocked: Welcome (first visit), I'm back (came back), Explorer (visited every section), Reader (read a blog post to the end).
Locked: Night owl (visit between midnight & 5am), audiophile (???)
1140
François Best @francoisbest.com · 24/02/2026
I saw this pop in my notifications as they have a test for @nuqs.dev, very interesting 👀
New project using nuqs: cloudflare/vinext, 13 stars
060
François Best @francoisbest.com · 20/02/2026
Urgh the @npmjs.bsky.social download stats are down again.. 😓
API response for https://api.npmjs.org/downloads/range/2026-02-16:2026-02-20/vue, showing ~1.4M downloads on the 16th & 17th of February, but zero on the 18th and 19th.
380
François Best @francoisbest.com · 13/02/2026
Thank you!!! @nuqs.dev is on the board now 🙌 Quick nitpicks (sorry to be annoying): - The URL is nuqs.dev (not nuqs.47ng.com, that's the old domain) - Redux & Zustand are already part of the main graph for state management libs, why are there small numbers for them here too?
The updated "other state management libraries", showing nuqs at 5%, between Redux & Zustand.
110
François Best @francoisbest.com · 13/02/2026
I just tried the package comparison in @npmx.dev to decide between two packages. Where has this been all my life?! 😍
Comparison of fast-xml-parser and htmlparser, showing differences on package size, install size, deps, downloads, last published date, types, module format, license, vulnerabilities.
612915
François Best @francoisbest.com · 12/02/2026
Ah, I found how to get them via the GraphQL API 🙌
A GraphiQL client showing results for the following query:
query {
  surveys {
    state_of_react {
      react2025 {
        state_management {
          state_management_others {
            responses {
              rawData {
                answers {
                  raw
                }
              }
            }
          }
        }
      }
    }
  }
}
110
François Best @francoisbest.com · 12/02/2026
I tried that, but it shows zero results:
Answers matching "Other answers": 0/0
210
François Best @francoisbest.com · 12/02/2026
Thank you for your work! 🙌 Is there a way to see the replies for "Other answers"? The "other state management libraries" section has way more answers in that category, it would be nice to see what those 76% are made of.
Other state management libraries
- TanStack Query: 21% (38 comments)
- Valtio: 7% (12 comments)
- Nano Stores: 7% (12 comments)
- Redux: 6% (10 comments)
- Other answers: 76% (138 comments)
110
François Best @francoisbest.com · 11/02/2026
Keeping track of my @github.com Copilot usage. It also shows the progress in the current month so I know whether to prompt away or to go touch grass. 🤖🌿 Source: github.com/franky47/gh-...
TUI/CLI showing GitHub Copilot Pro - Premium Requests Usage 
February 2026 • franky47
Overall: 110.33/300 (36.8%)
[usage bar]
[month progress bar]
Resets March 1, 2026
Per-model usage breakdown including GPT-5.2-codex, Claude Sonnet 4.5, Claude Opus 4.5 & 4.6, Code Review model, Claude Haiku 4.5.
000
François Best @francoisbest.com · 04/02/2026
Thank you to whoever liked @nuqs.dev on @npmx.dev 🫶
npmx page for the nuqs package. showing 1 heart.
2311
François Best @francoisbest.com · 19/01/2026
The Mothership is reconnected 🤘 A little work to do to shorten the desk, and I can move it to the other wall for a nice background for live streams (maybe we can do some music too while the agents are working).
A desk with musical instruments:
From left to right: Behringer mixing desk, Specular Reverb, a rack of Korg Volca (Beats, FM, Drum, Keys, Sample & Bass), an Arturia Keystep Pro, a key-less Arturia Minibrute. A pair of Focal Shape monitors on either side. Under the desk: Kawai digital piano and a Marshall tube amp.
0200
François Best @francoisbest.com · 17/01/2026
Hum it'd be nice if it could detect the end of stream automatically, but I'll give it a try on Tuesday.
Go Live
Shows a form where you connect your twitch handle, and select how long to go live for (1 hour selected).
100
François Best @francoisbest.com · 17/01/2026
Oh that's handy!
Message from Bluesky: Beta feature: show when you're live
Streaming on Twitch? Set your live status on Bluesky to add a badge to your avatar. Tapping it takes people straight to your stream.
150
François Best @francoisbest.com · 16/01/2026
No wonder I feel rough after conferences 😷🤧
Aranet Carbon dioxide chart for the 16th Jan 2026. Low values are in the 700ppm before the conference, cruises around 1200 all day, peaking at 2021ppm at lunch time.
050
François Best @francoisbest.com · 16/01/2026
Next we have @sinedied.bsky.social with genaiscript, an AI-native JS-based scripting environment. Think Google zx meets LLMs. The demos in how to make smart scripts to help you with OSS maintenance resonated a lot with some of the problems I’ve encountered.
Yoann in front of a slide showing an open GitHub issue titled “Not working”, with a description of “So I followed the setup instructions, but I can’t get it to work, can you help?”
010