NETROOM
Hooks for server state: keyed cache, dedup, retries with backoff, focus revalidation, optimistic mutations, infinite lists, prefetching. The core idea is that server data does not belong in a hand-rolled global store - the cache handles freshness and races for you. Compared to SWR it goes deeper: precise invalidation, cancellation, cache persistence, serious devtools. It does not run in Server Components - these are client hooks, so for RSC use fetch plus prefetch with hydration. React 18-19, MIT.
A store in a couple of kilobytes: create() hands back a hook, a component picks the slice it needs with a selector and re-renders only on that. No provider, no actions, no reducers - just plain functions calling set. From pmndrs, zero dependencies, and it works outside React too. Middleware add persist, immer and Redux DevTools. Needs React 18+ because of useSyncExternalStore. It is not a replacement for server state - that's TanStack Query's job; zustand holds the client side. MIT.
Forms built on uncontrolled inputs: values live in refs rather than state, so typing does not re-render the tree. `register` or `Controller` for third-party components, `useFieldArray` for dynamic lists, dirty/touched tracking built in. Zero dependencies, React 16.8-19, MIT, releases every couple of weeks. Schema validation comes from a separate @hookform/resolvers package - zod, yup, valibot, arktype. Client-side, so put the form behind 'use client' in RSC.
Utility-first CSS: you style in markup with classes and keep design tokens in one place. Version 4 moved to the Rust-based Oxide engine plus Lightning CSS - builds are several times faster - and the config is now CSS-first: `@import "tailwindcss"` with a `@theme` block instead of tailwind.config.js. Content is detected automatically and a separate PostCSS plugin is optional. The cost: modern browsers only (Safari 16.4+, Chrome 111+) and markup thick with classes. MIT, very actively developed.
A test runner that reuses your Vite config - the same aliases, plugins and transforms, so there is nothing to configure twice. The API mirrors Jest (describe, it, expect), and migrating usually means changing imports and globals. Dependency-graph watch mode, v8 coverage, snapshots, module mocking and a Playwright-driven browser mode are all built in. For React, pair it with @testing-library/react plus jsdom or happy-dom. Version 4 needs Vite 6-8. MIT, released weekly.
Adobe's Spectrum design system as ready-made React components, built on React Aria and React Stately, so accessibility, keyboard behaviour and i18n are handled better than almost anywhere else. The trade-off: you get Adobe's look, and restyling it is painful. Want the same foundation with your own CSS? Use react-aria-components from the same repo. Releases land constantly, Apache-2.0, and the bundle is large - import only what you render.
A GraphQL client with a normalised cache: one mutation updates every component reading the same entities. Version 4 reworked the internals - rxjs is now a peer dependency, graphql 16 and 17 are supported, React 17 through 19. Take it when the schema is large and you genuinely need the cache. For a handful of queries it is overkill: urql is lighter, and graphql-request plus TanStack Query is easier to debug. MIT, frequent releases.
ByteDance's UI kit and antd's closest neighbour in scope: the same tables, forms and calendars, just different typography and its own token system. The upside is Arco Design Lab, where you build a theme visually and install it as a package. The downside: the ecosystem and English documentation are noticeably thinner than antd's, and issue threads are often in Chinese. Releases keep coming, but slowly - the 2.x line has run for years. MIT.
A set of unstyled, accessible primitives: combobox, menu, dialog, tabs, tooltip. Unlike Radix it ships as one package and composes from small pieces - the state hook is separate from the components, which makes unusual widgets much easier to assemble. The author releases almost weekly, yet the version is still 0.4.x: the API does shift, so pin it. One dependency, MIT. Composing a component takes a few more lines than with a pre-baked kit, but you get exactly the behaviour you asked for.
Headless components built on Zag.js state machines by the Chakra team: behaviour is described as states rather than a pile of useEffects, so it stays predictable and identical across React, Vue and Solid. Chakra 3 and Park UI are built on it. Be aware it pulls in roughly seventy small dependencies - one state machine per component. No styles at all; you paint everything yourself. Fast-moving, near-daily releases, MIT.
The framework-agnostic core of Auth.js: OAuth provider logic, callbacks, sessions and JWT handling. You rarely install it directly - Next.js wants next-auth 5, SvelteKit wants @auth/sveltekit, and both pull @auth/core in themselves. Installing it straight makes sense when you are writing your own adapter for Hono, Express or Remix. Still on 0.x, so minor releases break things, licensed ISC. Read the changelog before upgrading.
The adapter that persists Auth.js users, accounts, sessions and verification tokens into your database through Prisma. You only need it for database sessions - if you are on JWT sessions, skip it entirely. Your schema has to match the documented one exactly: four models with specific fields, or relations will blow up. It moves in lockstep with @auth/core, so upgrade both together. ISC, one dependency.
Heads-up: this package was renamed. Install @base-ui/react instead - that is where the stable 1.x lives, while the old name is stuck at 1.0.0-rc.0 and marked deprecated. The library itself is headless primitives from the people behind MUI, Radix and Floating UI: dialogs, menus, selects and popovers with zero styling, but careful accessibility and focus management. A solid base for your own Tailwind design system. MIT.
A formatter and linter in a single Rust binary: where ESLint with plugins plus Prettier take seconds, Biome finishes in tens of milliseconds. One package, one biome.json, and built-in migration commands from ESLint and Prettier configs. Version 2 added type-aware lint rules without running tsc. The limitation is the plugin gap - ESLint's ecosystem is vastly larger, so exotic rules have to go. Dual MIT or Apache-2.0.
A Notion-style block editor on top of ProseMirror and Tiptap: slash menu, draggable blocks, nested lists, tables, comments. Unlike bare Tiptap it already ships a full UI and styles, so you can stand up an editor page in an evening. Check the licensing: the core is MPL-2.0 while some advanced packages are sold commercially. It moves fast, and minor releases occasionally break custom blocks - pin the version.
Palantir's UI kit for dense, data-heavy interfaces: tables, trees, popovers, hotkeys and a dark theme out of the box. It targets desktop-style apps in the browser rather than marketing pages - components are compact and spacing is tight. Styles come from a separate CSS file and theming runs through Sass variables rather than CSS custom properties or Tailwind. Version 6 is current and still shipping, Apache-2.0.
A component kit with genuinely pleasant DX: style props instead of class names, tokens, dark mode and decent accessibility. Version 3 is effectively a different library: the behaviour moved onto Ark UI state machines, the styling engine was rewritten, ChakraProvider with a theme object became createSystem, and components turned compound. Migrating from v2 is days of work, not an hour. @emotion/react stays a peer dependency. Actively released, MIT.
Clerk for the App Router: clerkMiddleware guards routes, auth() reads the session straight inside server components and route handlers, and the sign-in components render on the server too. Version 7 ships updates nearly every week, so support is not a concern. In return you pay a subscription past the free tier, your users and organisations live in the vendor's database, and part of your routing logic is tied to their middleware. Want full control of the data? Look at Auth.js.
Heads-up: this package is deprecated - the successor is @clerk/react, now on 6.x. Clerk itself is a paid authentication service with drop-in components: SignIn, UserButton, an organisation switcher, MFA and session management wire up in an evening. Past the free monthly-active-user tier it starts costing money, and your users live in the vendor's database, so moving off later is not free. On Next.js install @clerk/nextjs instead.
Lints commit messages against a ruleset - usually Conventional Commits via @commitlint/config-conventional. It hooks into commit-msg alongside husky or lefthook and rejects anything off-format, and those same prefixes then drive CHANGELOG generation and semantic-release. It only pays off in a team; on a solo project it is friction for its own sake. Actively developed, version 21 is recent, MIT. Rules are configurable down to header length, casing and the list of allowed scopes and types.
Turns Contentful's Rich Text JSON into a React tree. The value is in the overrides: any node, mark or embedded entry can be rendered by your own component, so headings, links and embeds do not need patching with regexes later. Useful in exactly one situation - when you are on Contentful; for Markdown reach for react-markdown or MDX instead. It ships alongside the rest of the SDK, MIT, one dependency.
Drag and drop that skips the HTML5 Drag and Drop API entirely: its own sensor layer covers pointer, touch and keyboard, so dragging works on phones and screen readers can follow along. It is not list-only - grids, kanban boards, nested droppables and sorting via @dnd-kit/sortable all work. The core is renderer-agnostic, needs React 16.8+, and weighs around 10 KB. Core v6 has been quiet since late 2024 while the author builds the next generation @dnd-kit/react, but v6 is stable and widely shipped.
Runtime CSS-in-JS: you write styles in JavaScript through the css prop or styled, and classes are generated in the browser. Dynamic theming and prop-driven styles are its strength, and MUI is built on it. The weakness now decides the matter: a runtime does not fit Server Components, so every styled component needs use client, and the engine itself ships to the client. For a new project Tailwind, CSS Modules or a zero-runtime option like vanilla-extract makes more sense. Stable but slow-moving. React 16.8+, MIT.
The direct successor to Popper.js, from the same author and rewritten from scratch. It works out where to place a tooltip, popover or menu so it never falls off screen: flip, shift, size, arrow, virtual elements. The React build layers interactions on top of positioning - hooks for hover, click, dismiss, focus, roles and aria wiring. It imposes no markup or styles, which is why Radix and half the headless kits sit on it. Take it when an off-the-shelf Popover does not fit. React 17+, MIT.
Fluent UI v9 from Microsoft - the design language of Windows, Office and Teams delivered as React components. Take it if you are building a Teams add-in or a product that must look Microsoft-made; anywhere else it imposes someone else's visual identity on you. Styling runs on Griffel, an atomic CSS-in-JS engine with its own SSR setup requirements. The package is heavy, pulling around sixty internal dependencies. Accessibility is taken seriously. React 16.14 to 19, weekly releases, MIT.
A grid drawn on canvas rather than in the DOM, which is why it handles millions of rows without stuttering, plus cell editing, paste from Excel, frozen columns and custom renderers. The price: accessibility is largely absent, screen readers and in-page search cannot see the cells, and ordinary CSS will not style it. Client only, no SSR. Its declared peer range stops at React 18, so React 19 needs an install override. No releases since early 2024, though the project is not abandoned. MIT.
Completely unstyled components from the Tailwind team: Dialog, Menu, Combobox, Listbox, Popover, Tabs, Switch, Disclosure. Behaviour, focus management, keyboard handling and aria are built in while the look is entirely yours - ideal when the design is custom rather than a bought theme. The set is noticeably smaller than Radix: no tooltip, no slider, no conventional accordion - but the API is simpler and transitions come free through data attributes. Client only, so use client in Next.js. React 18 and 19, MIT.
A community fork of react-beautiful-dnd, picked up after Atlassian walked away from the original. The API matches one to one, so migrating means changing the import. Its strength is unchanged: best-in-class list drag animations and genuinely good keyboard and screen-reader support. So is its limit - lists only, no grids, no free-form dragging - and it weighs around 30 KB. If you need richer boards or serious touch support, look at dnd-kit. React 18 and 19, Apache-2.0.
The former NextUI, renamed and rebuilt. Version 3 sits on React Aria Components, so accessibility and keyboard behaviour come courtesy of Adobe, while styling runs on Tailwind 4 with themeable tokens. There are around fifty components, modern-looking out of the box, with dark mode built in. The requirements are strict: React 19 and Tailwind 4, nothing lower. Unlike shadcn/ui this is an ordinary npm dependency rather than code copied into your repo - easier to update, harder to bend to your will. MIT.