Web Dev Tools

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; rambda is 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

  • neverthrowResult<T, E> types; no thrown errors, exhaustive handling. The default for new projects.
  • Effect — full ecosystem (see below); has Either / Effect for the same problem.
  • oxide.ts — Rust-style Result and Option.

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.

On this page