Back to Insights
DECEMBER 22, 2025•5 MIN READ•REACT

My Favourite Packages to Use with React

Over the last few years my React stack has shifted quite a bit, but a handful of packages and tools keep showing up in new projects. This post is a snapshot of what I am reaching for at the end of 2025.
This is not meant to be an exhaustive comparison of every option in the ecosystem. It is simply the set of tools that currently feel like the "default" in my head when I sit down to build something with React.

State and Data: TanStack Query and Zustand

When it comes to server data, TanStack Query has become my go to. It handles fetching, caching, background refetching, and mutation workflows in a way that keeps my components clean and my network logic in one place.
For local UI state, I prefer Zustand over heavier state managers. It gives me a tiny, ergonomic store with minimal boilerplate, and it plays nicely with React Server Components and modern patterns without forcing me into a global Redux style architecture.
A few useful links:

Tooling: ni, taze, and Module Inspector

On the tooling side, I use a few helpers around npm and dependencies:
  • ni helps me manage package managers and npm style commands without thinking too hard about whether a project uses npm, pnpm, or yarn.
  • taze is great for checking and updating dependencies in a more controlled way than blindly running npm update.
  • Module Inspector is not a package I install in projects, but a tool I use to inspect bundles and understand what is actually shipping to the browser.
These tools are small quality of life improvements, but across many projects they add up to a smoother workflow.

Content and Editing: TinaCMS

For content heavy sites, TinaCMS is my current favourite way to give editors a good experience without giving up the benefits of a Git based, file driven content model.
I am biased here because I help maintain TinaCMS, but that also means I understand how it behaves under the hood and what trade offs you are making by using it. For React and Next.js projects where content is a first class citizen, TinaCMS often feels like the right balance between power and simplicity.

Data Layer: Drizzle ORM

When I need a typed data layer in TypeScript heavy React projects, Drizzle ORM is my current pick. It gives me:
  • A nice, typed schema definition experience
  • Strongly typed queries without a lot of magic
  • A migration story that fits well into modern DevOps flows
It is not the only option out there, but it strikes a good balance between low level SQL control and higher level ergonomics.

UI: shadcn/ui

For component styling and design systems, shadcn/ui is hard to beat.
I like that it gives me copy pasteable, unstyled components that I own, built on top of Radix primitives and Tailwind. It feels like a toolkit rather than a black box component library, which is important when you care about long term maintainability and consistency.

Forms: React Hook Form

When dealing with forms, React Hook Form is still my go to.
It works well with complex forms, integrates nicely with UI libraries like shadcn/ui, and keeps performance in check by minimising unnecessary renders. The API is familiar at this point, which means I spend less time wrestling with form state and more time focusing on actual validation and UX.
Useful links:

Auth: Better Auth

For authentication, I have been experimenting with Better Auth and am liking the direction it is heading.
I have used it both in standalone APIs and in Next.js applications, but most of my experience so far has been in Next.js projects.
It aims to keep the auth story simple without hiding everything behind a wall of configuration. I like tools that give you good defaults but still let you see what is going on, and Better Auth feels like a step in that direction for React and TypeScript apps.
Useful links:

Developer Experience: biomejs

To keep code style and quality consistent, I have been moving projects over to biomejs.
It combines formatting and linting in a single, fast tool, which reduces the amount of configuration I need to manage. Having one opinionated tool instead of juggling multiple configs for ESLint, Prettier, and friends has been a nice quality of life improvement.
Useful links:

Where these fit together

These packages do not all show up in every single project, but if you look at a typical React app I have touched in 2025 you will probably see a combination of:
  • TanStack Query and/or Zustand for data and state
  • TinaCMS if there is any serious content editing story
  • Drizzle ORM on the server side
  • shadcn/ui, React Hook Form, and Better Auth in the UI layer
  • biomejs keeping everything formatted and linted
  • ni, taze, and Module Inspector hovering around the edges to keep the tooling experience smooth
This list will definitely change over time, but right now these are the tools that make building React apps feel fun and productive.

COMMENTS