Functional Utilities & Type Helpers
Effect, Remeda, ts-pattern, type-fest — utilities for typed, robust TS.
The post-Lodash era of TS utilities. The defaults are smaller, tree-shakeable, type-aware.
General utility libraries (Lodash replacements)
- ★ Remeda — TypeScript-first, fully typed, dual-API (data-first and pipe). The default new-project utility lib.
- just-* — tons of single-function packages; pick what you need.
- es-toolkit — modern alternative; very small, very fast.
- Lodash — still huge install base; tree-shakeable via
lodash-es. Less recommended for new TS projects. - rambda / Ramda — functional / curried; smaller than Ramda;
rambdais the actively maintained fork.
Pattern matching
- ★ ts-pattern — exhaustive pattern matching with TypeScript narrowing. The default for replacing nested ifs / switches.
@arktype/util— primitive helpers from ArkType.- TC39 Pattern Matching proposal — still in flight.
Result types / no-throw error handling
- ★ neverthrow —
Result<T, E>types; no thrown errors, exhaustive handling. The default for new projects. - Effect — full ecosystem (see below); has
Either/Effectfor the same problem. oxide.ts— Rust-styleResultandOption.
Type helpers
- ★ type-fest — pick / omit / partial-deep / require-at-least-one — the canonical library of useful type helpers.
- ts-toolbelt — older, larger; more obscure types.
hotscript— type-level functional programming; advanced.
Effects / structured concurrency
- ★ Effect-TS — typed effects, structured concurrency, schema, retry, fibers, dependency injection. A complete way of writing TS that's very different from idiomatic Node — but unbelievably powerful for complex apps. Big ecosystem (
@effect/schema,@effect/platform,@effect/ai, etc.) in 2026. - fp-ts — older functional library; effectively merged into Effect.
- rxjs — reactive streams; mature, niche.
Async helpers
- p-queue, p-throttle, p-limit, p-retry, p-map — Sindre Sorhus's
p-*family. Boring and bulletproof. - TanStack Pacer — rate-limiting / debouncing primitives that integrate with TanStack Query.
@tanstack/react-virtual— for virtualization.- Promise.withResolvers() — built-in (TC39).
Useful small libs
- dequal — fast deep equality.
- fast-deep-equal — alternative.
- proxy-memoize — for memoizing selectors with structural equality.
- klona — fast deep clone.
- immer — immutable-by-mutation; pairs with Zustand / Redux Toolkit.
- mitt — tiny event emitter.
- ofetch — see HTTP Clients.
Pick this if…
- Default Lodash replacement: Remeda.
- Pattern matching: ts-pattern.
- Result types over throwing: neverthrow.
- Type helpers: type-fest.
- Going all-in on a structured concurrency / effects model: Effect-TS.
- Async rate limit / queue: the
p-*family.