Skip to content

helpers4 vs es-toolkit — Detailed Comparison

es-toolkit is a modern, high-performance lodash replacement (~300 functions) maintained by Toss (Viva Republica) — 2-3x faster than lodash, up to 97% smaller per function, with a drop-in es-toolkit/compat layer for migrating existing lodash code. It’s the most actively developed general-purpose utility library in this comparison (last published 2026-07-18, 1,660+ published versions).

This page details the differences to help you decide whether you need helpers4, es-toolkit, or both.

helpers4es-toolkit
GoalDomain-specific helpers not found in general toolkitsModern, fast, tree-shakable replacement for lodash
ScopeNarrow, curated categoriesBroad — array, object, string, math, function, predicates, Map, Set, and Promise utilities
Package strategyIndependent @helpers4/* packages per categorySingle es-toolkit package (tree-shaken per-function at bundle time, not per-package)
DependenciesZero runtime dependenciesZero dependencies
LicenseLGPL-3.0MIT
BackingSolo-maintainedToss (Viva Republica) — corporate-backed, hundreds of contributors

Key difference: es-toolkit’s pitch is being a faster, smaller, TypeScript-native lodash — it competes on performance and migration ease for existing lodash codebases. helpers4’s pitch is covering domains general toolkits skip entirely (dates, URLs, semver, observables). They overlap heavily on the “general utility” surface (array/object/string/predicates) but es-toolkit goes meaningfully further into territory helpers4 doesn’t touch at all — see below.

What es-toolkit has that helpers4 doesn’t

Section titled “What es-toolkit has that helpers4 doesn’t”

Map and Set utilities — a whole missing category

Section titled “Map and Set utilities — a whole missing category”

es-toolkit ships full parallel utility sets for native Map and Set: forEach, filter, map (Set only), mapKeys/mapValues (Map only), reduce, some, every, keyBy, countBy, findKey/findValue (Map), find (Set). helpers4 currently has zero manipulation utilities for these — only type guards (isMap, isSet). If you work with Map/Set as first-class collections rather than converting to arrays first, es-toolkit covers this and helpers4 doesn’t.

Concurrency primitives (@helpers4/promise gap)

Section titled “Concurrency primitives (@helpers4/promise gap)”
FunctionWhat it does
MutexMutual-exclusion lock for async code
SemaphoreLimit concurrent access to a resource
delayPromise-based sleep/wait
timeout / withTimeoutReject a promise if it doesn’t settle in time
retryRetry a function with configurable attempts

helpers4’s @helpers4/promise has settle, parallel, parallelSettle, and typed promise guards — but no lock/semaphore primitives, no generic delay, and no withTimeout wrapper. These are common, genuinely useful gaps.

es-toolkit has median, percentile, and *By iteratee variants (meanBy, medianBy, sumBy) for computing stats over a derived value. helpers4’s @helpers4/array has mean/sum but no median, no percentile, and no iteratee variants.

toCamelCaseKeys / toSnakeCaseKeys recursively transform every key of an object to a case style in one call. helpers4 has camelCase/snakeCase for individual strings but nothing that walks an object’s keys in bulk.

filterAsync, mapAsync, forEachAsync, flatMapAsync, reduceAsync, plus limitAsync for concurrency-limited async iteration. helpers4 has parallel/parallelSettle as standalone promise helpers, but not integrated as Array.prototype-shaped async iteration methods.

helpers4es-toolkitNotes
chunkchunkSame
compactcompactSame
countBycountBySame
differencedifference (+differenceBy/differenceWith)Same, es-toolkit adds iteratee/comparator variants
intersectionintersection (+By/With)Same
partitionpartitionSame
samplesample (+sampleSize)Same
shuffleshuffleSame
sort / sortBysortBy / orderByes-toolkit has no plain sort, only iteratee-based
uniqueuniq (+uniqBy/uniqWith)Same concept, different name
unzipunzip (+unzipWith)Same
withoutwithoutSame
zipzip (+zipWith/zipObject)Same
cartesianProductcartesianProductSame — exact match
max / minmaxBy / minByes-toolkit has no plain max/min either, only iteratee-based
replaceOrAppend, toggle, symmetricDifference, ensureArray, sortNaturalhelpers4 only
windowed, pull/pullAt/remove, keyBy, combinations, toFilledes-toolkit only
helpers4es-toolkitNotes
debouncedebounceSame
throttlethrottleSame
memoizememoizeSame
onceonceSame
partialpartial (+partialRight)Same
negatenegateSame
identityidentitySame
noopnoopSame
currycurry (+curryRight)Same
unaryunarySame — exact match
pipeflowSame concept, different name
composeflowRightSame concept, different name
flip, returnOrThrowErrorhelpers4 only
retry, before/after, ary, spread, restes-toolkit only

Both converge heavily here (isArray, isBoolean, isDate, isFunction, isMap, isNumber, isPlainObject, isPromise, isRegExp, isSet, isString, isSymbol, isUndefined all match by name). es-toolkit-only: isBrowser/isNode (environment detection), isJSON/isJSONArray/isJSONObject/isJSONValue (JSON-shape validation), isLength, isBuffer, isFile, isTypedArray. helpers4-only: the Temporal API guards (isTemporalDuration, isTemporalInstant, isTemporalPlainDate, etc.) and browser-form guards (isFormData, isBlob, isArrayBuffer, isCssColor) — es-toolkit has neither.

helpers4es-toolkitNotes
clone / cloneDeepclone / cloneDeep (+cloneDeepWith)Same
omit / omitByomit / omitBySame
pick / pickBypick / pickBySame
invertinvertSame
mergeDeepmerge / mergeWith / toMergedSame concept
flatten and unflattenflattenObject (one direction only)helpers4 covers both directions, es-toolkit only flattens
removeUndefinedNull, safeJsonParse, parsePropertyPathhelpers4 only
toCamelCaseKeys/toSnakeCaseKeys, sortKeyses-toolkit only (see gap above)

Both have the full case-conversion set (camelCase, kebabCase, snakeCase, pascalCase, capitalize). helpers4’s removeDiacritics matches es-toolkit’s deburr (same concept). Both have words. es-toolkit-only: constantCase, startCase (≈ helpers4’s titleCase), reverseString. helpers4-only: dedent, escapeHtml/unescapeHtml, extractErrorMessage, injectWordBreaks, isBlank/isNotBlank, leadingSentence, slugify, template, truncate.

ScenarioRecommendation
You need date formatting/comparisonhelpers4 (@helpers4/date)
You need URL path manipulationhelpers4 (@helpers4/url)
You need semver parsing/comparisonhelpers4 (@helpers4/version)
You need RxJS observable combinatorshelpers4 (@helpers4/observable)
You’re migrating an existing lodash codebasees-toolkit (es-toolkit/compat is a near drop-in)
You need Map/Set utilities, Mutex/Semaphore, or median/percentilees-toolkit
You need Temporal API guards or browser-form guards (FormData, Blob)helpers4
Multiple needshelpers4 + es-toolkit — they overlap on the basics but neither fully subsumes the other

es-toolkit is the strongest general-purpose competitor in this comparison by adoption and momentum (Toss-backed, ~2M weekly downloads, releasing multiple times a week) — and it covers real ground helpers4 doesn’t: Map/Set utilities, concurrency primitives (Mutex, Semaphore, withTimeout), and richer statistics (median, percentile). helpers4 still holds its own domain-specific ground (dates, URLs, semver, observables, Temporal guards) that es-toolkit’s lodash-replacement scope never aimed to cover. Where they overlap (arrays, objects, strings, basic predicates), coverage is close to 1:1 — pick based on the gaps that matter for your project, or use both.