FranΓ§ois Best's Avatar

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/francoisbest 🏠 francoisbest.com

1,394
Followers
452
Following
1,433
Posts
18.10.2024
Joined
Posts Following

Latest posts by FranΓ§ois Best @francoisbest.com

Looks nice!

06.03.2026 21:30 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
TanStack Intent Generate, validate, and ship Agent Skills alongside your library β€” versioned knowledge that agents discover automatically from node_modules. Skills live in each library's repo and update when the pack...

I was ranting about skills on stream this morning, and @tanstack.com ships the solution a few hours later πŸ™Œ

Skills shouldn't be copy-pasted, they should live alongside the code they describe. Pinned to the exact version.

tanstack.com/intent

06.03.2026 20:33 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

🟣 Live now!

06.03.2026 09:02 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Twitch Twitch is the world

Tomorrow on stream I'll be unveiling a new @nuqs.dev API.

Your URL state is about to become much cleaner, type-safe, and easier to scale.

10am CET.

twitch.tv/francoisbest

05.03.2026 14:56 πŸ‘ 5 πŸ” 1 πŸ’¬ 0 πŸ“Œ 1

The big takeaway here is that people forget (or never learned) that the URL is the tier 1 state manager. @tanstack.com and @nuqs.dev are doing their best to re-educate the masses.

Rendering dynamic server components via searchparams feels like a cheat code, but it’s the way it was historically done

03.03.2026 01:53 πŸ‘ 9 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0

That looks super useful indeed. πŸ‘€

02.03.2026 19:49 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

πŸ“¦ nuqs@2.8.9 is out! πŸš€

It fixes a warning in @nodejs.org 25 related to localStorage access on the server (TIL Node.js is adding this API πŸ‘€).

You can now enable debug logs server-side with the env var DEBUG="nuqs" (or any string that contains it).

Try it out: pnpm add nuqs@latest

27.02.2026 18:27 πŸ‘ 7 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
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.

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.

Being a bit of a URL nerd, I love this idea

danlevy.net/llm-connecti...

27.02.2026 07:44 πŸ‘ 23 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0

URL shortener for personal links?

pat.ak/gh for GitHub profile
pat.ak/$ for sponsors
pat.ak/bsky for @patak.cat
pat.ak/npmx for your @npmx.dev profile
…

26.02.2026 19:46 πŸ‘ 13 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Now I’ve got to stay up after midnight for the last achievement πŸ˜…

25.02.2026 17:50 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Trust is a good point. Also tests act as intent documentation.

25.02.2026 14:49 πŸ‘ 3 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

However it leaves the question of: how can contributors know the quality of their contributions ahead of opening a PR?

Being able to run tests locally is invaluable for good contributions (whether written by humans or agents).

Not sure this moat idea works well for open-contribution models.

25.02.2026 13:47 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Preview
Tests Are The New Moat | Daniel Saewitz As AI becomes better at cloning people's open source work, what ends up becoming most valuable are software contracts, tests, and API surface area. This clashes the incentives of clearly defining your...

An interesting approach for commercial OSS projects:

- Keep the core OSS (free to learn from & vibe-fork)
- Keep the test suite closed source

Quality is the only differentiator when writing code is cheap, and so tests become more valuable than the source itself.

saewitz.com/tests-are-th...

25.02.2026 13:47 πŸ‘ 32 πŸ” 4 πŸ’¬ 1 πŸ“Œ 1
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 (???)

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 (???)

I love the achievements section on @ntatoud.bsky.social's personal website πŸ™Œ

noe.tatoud.com/achievements

25.02.2026 11:43 πŸ‘ 15 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I saw this pop in my notifications as they have a test for @nuqs.dev, very interesting πŸ‘€

24.02.2026 22:43 πŸ‘ 6 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

The only common options between the two is the Options type (shallow, history, limitUrlUpdates etc), which isn’t generic.

What I started working on with the unified API might flip the problem on its head, but it needs a little more work before I can ship a preview that works with both hooks.

24.02.2026 17:47 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I had a similar experience with @nuqs.dev (albeit at a smaller scale), creating abstractions on top of useQueryState(s) can be rough in terms of DX.

24.02.2026 14:11 πŸ‘ 3 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

It's very fast! ⚑

The only snag I hit so far was trying to connect the VSCode extension through a devcontainer, but it might be a skill issue on my part.

The package.json sorting is 🀀, this is such a good idea.

24.02.2026 09:44 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I gave both oxfmt & oxlint a try on a new project, looking forward to replacing Prettier in all other projects now (agents go brrrr)

24.02.2026 08:39 πŸ‘ 21 πŸ” 2 πŸ’¬ 4 πŸ“Œ 0

Unfortunately unless they take over the registry API, @npmx.dev (or anyone in the community) can't do much about this.

20.02.2026 12:23 πŸ‘ 3 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
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.

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.

Urgh the @npmjs.bsky.social download stats are down again.. πŸ˜“

20.02.2026 12:21 πŸ‘ 8 πŸ” 0 πŸ’¬ 3 πŸ“Œ 0
Post image

Type-Safe URL State Management with @francoisbest.com! The URL is a powerful hidden state manager. Learn to use nuqs for type-safe URL state with teleportation and time travel capabilities.

Watch the talk: https://gitnation.com/contents/type-safe-url-state-management-in-react-with-nuqs

18.02.2026 14:02 πŸ‘ 11 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0

Both, and the quest for a local model that is good enough to serve as a replacement if/when the AI giants’ bubble bursts. But that’s more a prepper’s mindset than actually using it for serious work.

16.02.2026 13:22 πŸ‘ 6 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0

I’ve been using Kimi 2.5 via the OpenCode free preview, it’s not the smartest thing at solving problems, but it does a good job for planning & drafting docs that other models can then pick up on.

Briefly tried Qwen 3 coder via ollama locally, but it’s slow and often fails at tool calls.

16.02.2026 12:38 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Normalising taking breaks from time to time is the healthy behaviour I wasn’t expecting from a project that just exploded in popularity.

Maybe this is the takeaway: in an ever-accelerating world, it’s absolutely ok to pause. It’s necessary.

13.02.2026 22:34 πŸ‘ 70 πŸ” 7 πŸ’¬ 3 πŸ“Œ 1
The updated "other state management libraries", showing nuqs at 5%, between Redux & Zustand.

The updated "other state management libraries", showing nuqs at 5%, between Redux & Zustand.

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?

13.02.2026 07:05 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Comparison of fast-xml-parser and htmlparser, showing differences on package size, install size, deps, downloads, last published date, types, module format, license, vulnerabilities.

Comparison of fast-xml-parser and htmlparser, showing differences on package size, install size, deps, downloads, last published date, types, module format, license, vulnerabilities.

I just tried the package comparison in @npmx.dev to decide between two packages.

Where has this been all my life?! 😍

13.02.2026 07:01 πŸ‘ 130 πŸ” 15 πŸ’¬ 6 πŸ“Œ 0

Can someone tell them about icon & text margins though 🫠

12.02.2026 11:48 πŸ‘ 24 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0

Thanks to the 9 people that mentioned @nuqs.dev in the "Other state management libraries" section 🫢

12.02.2026 11:45 πŸ‘ 4 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
A GraphiQL client showing results for the following query:
query {
  surveys {
    state_of_react {
      react2025 {
        state_management {
          state_management_others {
            responses {
              rawData {
                answers {
                  raw
                }
              }
            }
          }
        }
      }
    }
  }
}

A GraphiQL client showing results for the following query: query { surveys { state_of_react { react2025 { state_management { state_management_others { responses { rawData { answers { raw } } } } } } } } }

Ah, I found how to get them via the GraphQL API πŸ™Œ

12.02.2026 11:27 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0