finds.dev← search

// the find

remix-run/react-router

★ 56,439 · TypeScript · MIT · updated Jun 2026

Declarative routing for React

React Router is the de-facto client-side routing library for React, now evolved into a full-stack framework option that absorbs Remix. It runs in two modes: lightweight declarative routing (the classic use case) or a Vite-based framework mode with loaders, actions, SSR, and file-based routes. If you're building anything in React, you're either already using this or you've made a deliberate choice not to.

The dual-mode design is genuinely useful — you can adopt the framework features incrementally without rewriting your app. Type inference from loaders to useLoaderData is now automatic, which eliminates a whole class of cast-and-pray bugs. The decisions/ directory documents why major API choices were made, which is rare and valuable when you hit a wall. RSC support is in active development with dedicated APIs (RSCHydratedRouter, matchRSCServerRequest), not bolted on as an afterthought.

The Remix merger created real migration friction — upgrading from v6 to v7 requires reading a separate guide, and Remix users have their own guide, which signals the abstraction seams haven't fully healed. Framework mode adds Vite as a hard dependency and a bespoke build pipeline, so you're signing up for their toolchain, not just their router. The fog-of-war lazy route discovery is powerful but the mental model for when routes load vs. when data loads vs. when components render is genuinely complex and the docs don't always make it clear which mode you're in. Error boundaries still require manual wiring in declarative mode — no sensible default.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →