Repository navigation
Releases
v1.53.2
Released on November 6th, 2026.
- Added support for per-function imports like
es-toolkit/array/chunk. (#2173) - Fixed
reduceAsyncto preserve explicitly providednullandundefinedinitial values. (#2176) - Fixed circular dependency warnings in bundlers when importing
orderByorsortBy. (#2187) - Fixed
truncateines-toolkit/compatto preserve separator boundaries, matching Lodash's behavior. (#2180) - Fixed
isErrorines-toolkit/compatto returntrueforDOMExceptionand error-like objects, matching Lodash's behavior. (#2188) - Fixed incorrect example outputs in the documentation for
random,keysIn,setWith, andcurryRight. (#2183) - Replaced Prettier and ESLint with oxfmt and oxlint, and forbade circular imports. (#2185, #2189, #2190)
- Enhanced the dist and browser compatibility checks to verify the packed tarball and only exported functions. (#2182, #2192)
We sincerely thank @D-Sketon, @frogscooper, @MycroCosmo, @raon0211, @subotac, and @ys0v9 for their contributions. We appreciate your great efforts!
v1.53.1
Released on October 31st, 2026.
This release includes security fixes for es-toolkit/compat, and we recommend upgrading. The fixes match Lodash, so results may differ if you relied on the previous behavior.
- Fixed
compat/templateto rejectvariablevalues andimportskeys that are not plain parameter names, and to replace all whitespace insourceURL, preventing code injection. - Fixed
compat/defaultsDeepto ignore__proto__keys, preventing prototype pollution. - Fixed
compat/unset,compat/omit, andcompat/pullAtto stop when__proto__,constructor, orprototypeappears before the last path key, preventing the deletion of built-in prototype properties.
The following are other fixes in this release.
- Fixed
cloneto preserve the offset and length of aDataView. ([#2166]) - Fixed
splitto keep surrogate pairs and combining marks together for an empty separator. ([#2171]) - Fixed
withTimeoutto clear its timer after the operation completes. ([#2170]) - Fixed
compat/pickByto not treat objects with a numeric length as array-like. ([#2165]) - Fixed
compat/findLastandcompat/someto not treatlengthas an element of array-likes. ([#2168])
We sincerely thank @arba-octo, @dayongkr, @frogscooper, and @KooYS for their contributions. We appreciate your great efforts!
v1.53.0
Released on October 24th, 2026.
-
Added
serializetoes-toolkit/util, andhashin the newes-toolkit/util/hashentrypoint. ([#2067], [#2154]) -
Added
stringifytoes-toolkit/query-string. ([#2121]) -
Added
sentenceCase. ([#2079]) -
Added
lerpandinverseLerp. ([#2078]) -
Added the
DistributiveOmittype. ([#2142]) -
es-toolkit/compatnow runs on Node.js 6 and ES2015 environments without transpilation or polyfills. ([#2097], [#2161]) -
Fixed
deepFreezeto freeze symbol and non-enumerable properties. ([#2143]) -
Fixed
Semaphoreto keepreleasefast when many tasks are waiting. ([#2149]) -
Fixed
DeepPartialandDeepReadonlyto preserve branded primitive types. ([#2074]) -
Fixed the
Mergetype to keep the input type when merging a type with itself or a narrower type, and to use the source type when a defined source replaces a nullable or primitive value. ([#2148], [#2155]) -
Fixed the
fpintersectionByto match each mapped value at most once in lazy pipes. ([#2146])
The following change results or types that v1.52.0 produced, so review them if you relied on the previous behavior.
dedentnow leaves interpolated values out of the indentation calculation ([#2099]), and throws aTypeErrorfor a malformed template literal, likeString.dedent([#2100]).deburrnow keeps letters of non-Latin scripts as they are. ([#2124])orderByandsortBynow sortNaNin a consistent position. ([#2133])oncenow calls the function with the caller'sthis. ([#2069])findKeyandmapKeysnow type keys likeObject.keys, so numeric keys are strings. ([#2077], [#2156])- The
fphead,last,maxBy, andminBynow always returnT | undefined. ([#2113])
The following bring es-toolkit/compat closer to Lodash. Behavior for the affected edge cases now matches Lodash, so results may differ if you relied on the previous output.
-
Fixed
compat/add,compat/subtract,compat/multiply, andcompat/divideto match Lodash onnulloperands. ([#2056]) -
Fixed
compat/ceil,compat/floor, andcompat/roundto coerce arguments like Lodash. ([#2064]) -
Fixed
compat/toStringto read sparse array holes asundefined. ([#2091]) -
Fixed
compat/dropWhile,compat/dropRightWhile, andcompat/someto normalize the predicate. ([#2072]) -
Fixed
compat/countByto return a plain object. ([#2090]) -
Fixed
compat/pull,compat/pullAll,compat/pullAllBy, andcompat/removeto handle nullish inputs. ([#2095]) -
Fixed
compat/xorByandcompat/xorWithto ignore the iteratee and comparator for a single array. ([#2098]) -
Fixed
compat/reduceandcompat/reduceRightto resolve the iteratee like Lodash, andcompat/forEach,compat/forEachRight,compat/forIn,compat/forInRight,compat/forOwn, andcompat/forOwnRightto treat a non-function iteratee asidentity. ([#2101], [#2158]) -
Fixed
compat/wordsto match titlecase letters, emoji sequences, and non-ASCII numerals and symbols, and to keep combining marks attached to their letter. ([#2102], [#2103], [#2110]) -
Fixed
compat/unionWithto pass comparator arguments in Lodash's order. ([#2114]) -
Fixed
compat/groupBy,compat/maxBy, andcompat/minByto call the iteratee with only the element. ([#2122]) -
Fixed
compat/deburrto only deburr Latin letters. ([#2123]) -
Fixed
compat/truncateto escape a stringseparator. ([#2130]) -
Fixed
compat/cloneDeepandcompat/cloneDeepWithto keep errors uncloned, andcompat/isMatchandcompat/matchesto compare errors like Lodash. ([#2159]) -
Fixed
compat/startCaseto only uppercase the first letter of each word. ([#2160]) -
Exported the
PropertyPathtype fromes-toolkit/compat. ([#2145]) -
Reduced the CommonJS bundle size of
compat/everyandcompat/findLastIndex. ([#2162]) -
Fixed documentation examples whose results did not match the code. ([#2071], [#2109], [#2132], [#2136], [#2138])
-
Listed the iterator docs under the es-toolkit and fp tabs. ([#2137])
-
Clarified which compat behavior fixes the contributing guide accepts. ([#2107], [#2108], [#2125])
We sincerely thank @arba-octo, @Archibald1948, @cyclomati, @D-Sketon, @dayongkr, @HyoYoonNam, @jaideeppyne, @jeonghoon11, @jeynes-log, @JonghwanWon, @mariazuheros, @MFA-G, @minseonkkim, @minsoo-web, @Patrick-SCH03, @poketopa, @raon0211, @ssi02014, @TalhaHunter101, and @Tnalxmsk for their contributions. We appreciate your great efforts!
v1.52.0
Released on August 28th, 2026.
-
Added the
es-toolkit/iteratorentrypoint, a lazy iterator module withchunk,count,dropWhile,head,iterate,partition,range,scan,takeWhile,uniqBy, andzip([#1815]), pluscartesianProduct([#2031]). The same functions are also available fromes-toolkit/fp/iterator. -
Added
deferanddeferAsynctoes-toolkit/util. ([#2032]) -
Added
flowAsynctoes-toolkit/fp, a promise-aware left-to-right composition. ([#2033]) -
Added the
EmptyObject,IsEqual,JSONValue,Primitive,SetOptional,SetRequired, andUnknownRecordtypes. ([#2044]) -
Fixed
mergeto infer the deep merged return type, and exported theMergetype. ([#1959]) -
Fixed
omitByandpickByto type numeric callback keys as strings, and exported theObjectKeystype. ([#2037]) -
Fixed
attemptandattemptAsyncto default their error type parameter tounknown. ([#2052])
The following bring es-toolkit/compat closer to Lodash. Behavior for the affected edge cases now matches Lodash, so results may differ if you relied on the previous output.
-
Fixed
compat/debounceto skip themaxWaitinvocation when bothleadingandtrailingarefalse. ([#1678]) -
Fixed
compat/toStringto convert objects with a customvalueOf. ([#2034]) -
Fixed
compat/mergeWithto assignnullvalues in array sources. ([#1929]) -
Fixed
compat/hasandcompat/hasInto normalize the-0path key. ([#2035]) -
Fixed
compat/differenceWithandcompat/withoutto normalize-0to0. ([#2049]) -
Fixed
compat/findLastIndexto convertfromIndexto an integer. ([#2047]) -
Fixed
compat/xorWithto match Lodash when no comparator is given. ([#2057]) -
Covered the new iterator entrypoints in the dist and browser compatibility checks. ([#2030])
-
Made the agent skills portable when installed on their own. ([#2054])
-
Fixed documentation typos and the Deno install commands. ([#2062])
v1.51.0
Released on August 17th, 2026.
-
Added the
es-toolkit/bigintentrypoint:bigintcounterparts of the math functions (sum,sumBy,max,min,maxBy,minBy,clamp,inRange,median,medianBy,percentile,range,rangeRight), kept separate so thenumberimplementations stay unchanged. ([#1966]) -
Added
dedent, which removes common leading whitespace from template strings. ([#1679]) -
Added
deepFreezefor recursively freezing objects. ([#1680]) -
Added
mapValuesAsyncandmapKeysAsync. ([#1544]) -
Added
toPascalCaseKeys,toKebabCaseKeys, andtoConstantCaseKeys, completing the object key casing family. ([#1984]) -
Exported the
ToCamelCaseKeys,ToPascalCaseKeys,ToSnakeCaseKeys,ToKebabCaseKeys, andToConstantCaseKeystypes. ([#1651]) -
Added a
preserveArraysoption toflattenObject. ([#974]) -
Fixed
retryto pass the last error to thedelaycallback ([#1759]) and to throw the last attempt's error without applying a final delay ([#1901]). -
Fixed
mergeWithandtoMergedto handle mixed array/object types consistently withmerge. ([#2026]) -
Fixed
pullAtto remove the correct elements with negative indices. ([#1613]) -
Fixed
at,pullAt,orderBy, andsortByto accept readonly arrays. ([#2016]) -
Moved
limitAsyncfrom the array to the promise category. ([#2022]) -
Included the NOTICE file in the published npm and JSR packages. ([#2020])
The following bring es-toolkit/compat closer to Lodash. Behavior for the affected edge cases now matches Lodash, so results may differ if you relied on the previous output.
-
Added
entriesandentriesIn. ([#1874]) -
Fixed
compat/isMatchandcompat/isMatchWithto handle object source patterns against primitive and non-plain-object targets like Lodash. ([#1432]) -
Fixed
compat/setto blockconstructor.prototypepaths, preventing prototype pollution. ([#1904]) -
Fixed
compat/findto respect array-likelength([#1958]) and to convertfromIndexto an integer ([#1961]), andcompat/indexOfto convertfromIndexto an integer when searching forNaN([#1951]). -
Fixed
compat/orderByto resolve unresolved deep paths and nullish elements toundefined([#2010]), to exclude thelengthproperty from array-like values ([#2002]), and to read the criterion property from primitive values ([#1903]). -
Fixed
compat/toPathto split unquoted dotted keys inside brackets. ([#1899]) -
Fixed
compat/omitto treat a key array as a single deep path. ([#1902]) -
Fixed
compat/mapto make the iteratee optional with an identity default. ([#1928]) -
Fixed
compat/sizeto count combined Unicode symbols as single characters. ([#1900]) -
Fixed
compat/intersectionByto support number, object, and nullish iteratee shorthands ([#1993]), andcompat/intersectionWithto apply the comparator when deduplicating the first array ([#1953]). -
Fixed
compat/difference,compat/differenceBy,compat/uniqBy, andcompat/unionByto normalize-0to0. ([#2007]) -
Fixed
compat/maxByandcompat/minByto skip nullish iteratee values ([#1927]), andcompat/meanByto skipundefinedvalues when averaging ([#1978]). -
Fixed
compat/some,compat/template([#2009]), andcompat/fill([#1952]) to gate guard handling withisIterateeCall. -
Fixed
compat/iterateeto treat a boolean as a property shorthand. ([#1941]) -
Fixed
compat/reverseto support array-like objects andarguments. ([#2008]) -
Fixed
compat/toArrayto convert non-array-like iterables. ([#1999]) -
Fixed
compat/toStringto render nested nullish values like Lodash. ([#1992]) -
Fixed
compat/zipObjectto treatnullkeys and values as empty arrays. ([#2005]) -
Fixed
compat/sampleSizeto clamp the default size to the collection length. ([#2003]) -
Fixed
compat/takeWhile,compat/takeRightWhile, andcompat/uniqByto support string inputs. ([#2004]) -
Fixed
compat/chunkto return an empty array for an empty collection with anInfinitysize. ([#1995]) -
Fixed
compat/lastIndexOfto read holes in sparse arrays asundefined. ([#1977]) -
Fixed
compat/lastto returnundefinedfor empty array-like inputs. ([#1954]) -
Fixed
compat/pullAllto return the array as-is whenvaluesis nullish. ([#1962]) -
Added a browser compatibility test suite. ([#2012])
-
Improved documentation, JSDoc accuracy, tests, and internal refactoring across
compatand the docs site. ([#1622], [#1789], [#1824], [#1844], [#1849], [#1854], [#1855], [#1859], [#1860], [#1868], [#1871], [#1887], [#1898], [#1933], [#1939], [#1947], [#1950], [#1955], [#1956], [#1957], [#1960], [#1963], [#1964], [#1968], [#1969], [#1970], [#1972], [#1979], [#1985], [#2000], [#2001], [#2021], [#2025], [#2027])
We sincerely thank @Antoliny0919, @D-Sketon, @kojesung, @chuenchen309, @mariazuheros, @DongEun02, @raon0211, @sukvvon, @racgoo, @dayongkr, @Kropiunig, @ssi02014, @sarathfrancis90, @mym0404, @mlnwns, @kdelay, @gwagjiug, @dohwi, @blro0319, @benedictleejh, @amir-rezaei, @ianzone, @sen2y, @rossyman, @eunwoo-levi, @ramong26, @Gdm0714, and everyone else who contributed. We appreciate your great efforts!
v1.50.0
Released on July 24th, 2026.
- Added the
es-toolkit/typesentrypoint: a declaration-only module of compile-time type utilities TypeScript lacks natively —ValueOf,Simplify,Writable,NonEmptyArray,DeepPartial, andDeepReadonly. ([#1818]) - Added
flowtoes-toolkit/fp, a reusable data-last composition built onpipe. ([#1812])
The following bring es-toolkit/compat closer to Lodash. Behavior for the affected edge cases now matches Lodash, so results may differ if you relied on the previous output.
-
Fixed
compat/intersectionByto dedupe a single array (including by the iteratee) and to keep results consistent with Lodash. ([#1935]) -
Fixed
compat/findIndexandcompat/findLastIndexto coerce aNaNfromIndexto0and to convertfromIndexto an integer. ([#1828], [#1834], [#1938]) -
Fixed
compat/lastIndexOfto coercefromIndexlike Lodash. ([#1832]) -
Fixed
compat/everyto treat a falsy, non-nullishdoesMatchas a_.propertyshorthand instead of identity. ([#1940]) -
Fixed
compat/nthto support string inputs. ([#1833]) -
Fixed
compat/inRangeto not throw on a lone negative bound. ([#1835]) -
Fixed
compat/toArrayto convertSets to arrays like Lodash. ([#1840]) -
Fixed
compat/valuesto treat sparse array holes asundefined. ([#1894]) -
Fixed
compat/maxByandcompat/minByto restore Lodash-compatible comparison. ([#1893]) -
Fixed
compat/includesto exclude thelengthproperty when matching array-like values. ([#1886]) -
Fixed the case functions to split ordinal numbers like Lodash, and to count string size and padding by code points for multi-byte characters. ([#1836], [#1852], [#1853])
-
Fixed
compat/unsetto not treat an own literal dotted key as a deep path. ([#1808]) -
Moved
compat/flattenDepth's flattening logic out offlatten. ([#1847]) -
Restored the standalone
eqandtemplateSettingsentry points. ([#1895]) -
Fixed
deburrto remove all combining diacritical marks, matching Lodash. ([#1807]) -
Fixed
partitionto accept any predicate return value, likeArray.prototype.filter. ([#1937]) -
Fixed
hasandhasInto prioritize nullish literal keys over paths. ([#1810]) -
Fixed
invokeMapto normalize a string path viatoPathforthisbinding. ([#1814]) -
Fixed
isDeepKeyto detect deep keys with stricter patterns. ([#1621]) -
Fixed
unzipWithto return an empty array instead of throwing on empty input. ([#1816]) -
Improved documentation, JSDoc accuracy, and internal refactoring across
compatandfp. ([#1817], [#1820], [#1822], [#1823], [#1825], [#1829], [#1830], [#1842], [#1845], [#1851], [#1858], [#1867], [#1879])
We sincerely thank @Antoliny0919, @raon0211, @dayongkr, @spokodev, @sarathfrancis90, @mayur-shenoy, @mahirhir, @kojesung, @Hprogram, @BangDori, and everyone else who contributed. We appreciate your great efforts!
v1.49.0
Released on June 26th, 2026.
- Added the
es-toolkit/fpentrypoint with data-last, pipeable utilities, documentation, benchmarks, and bundle-size checks. ([#1781]) - Added a broad set of array utilities to
es-toolkit/fp, covering slicing, grouping, set operations, ordering, zipping, and collection helpers. ([#1801]) - Fixed
trimStartto validate multi-character trim strings correctly before it stops trimming. ([#1615]) - Fixed
compat/pickto prefer a literal key over a dot-notation path when the picked value isundefined. ([#1775]) - Fixed
compat/randomto better match Lodash behavior for coerced bounds and floating-point options. ([#1767]) - Fixed
compat/chunkto handleNaNandInfinitysize values consistently with Lodash. ([#1797]) - Improved documentation and JSDoc accuracy across array, function, and compat references. ([#1785], [#1786], [#1788], [#1790], [#1791], [#1792], [#1793], [#1795], [#1800])
We sincerely thank @Antoliny0919, @D-Sketon, @eunwoo-levi, and @raon0211 for their contributions. We appreciate your great efforts!
v1.48.1
Released on June 21st, 2026.
- Fixed the
jsdelivrandunpkgCDN<script>entry that regressed in v1.48.0. The fields are now declared at the package root soyarn packpreserves them, sincepublishConfigonly carries standard fields and dropped them. Both CDNs now serve the UMD bundle again.
v1.48.0
Released on June 21st, 2026.
- Added
AbortSignalsupport totimeoutandwithTimeout. ([#1617]) - Fixed CDN
<script>resolution by pointingjsdelivr/unpkgto the UMD bundle and dropping the misusedbrowserfield. ([#1395]) - Fixed
toMergedto deep clone the target so untouched nested values stay independent. ([#1780]) - Fixed
compat/toPathto keep empty segments for consecutive and trailing dots. ([#1778]) - Fixed
compat/differenceto treat sparse array holes asundefined. ([#1773]) - Fixed
compat/parseIntto coerce input to a string before parsing. ([#1771]) - Fixed
compat/isNaNto improve checks for boxed values and non-numbers. ([#1646]) - Fixed
compat/isMatchWithto align nested primitive matching with lodash. ([#1647])
We sincerely thank @aidant, @Antoliny0919, @D-Sketon, @miinhho, @MyraxByte, @raon0211, @sarathfrancis90, and @ssi02014 for their contributions. We appreciate your great efforts!
v1.47.1
Released on June 12th, 2026.
- Fixed
maxByandminByto propagateNaN, matchingMath.max/Math.minbehavior. ([#1749]) - Fixed
orderByandsortByto placenullandundefinedvalues last when sorting. ([#1681]) - Fixed
isNumberto no longer treat boxedNumberobjects as numbers. ([#1726]) - Fixed
reduceandreduceRightto respect explicitly passed nullish accumulators. ([#1742]) - Fixed
isEmptyto handle functions with own enumerable properties. ([#1645]) - Fixed the
globalThispolyfill to avoidFunction(...), supporting CSP environments withoutunsafe-eval. - Fixed ESM resolution for
./compat/*subpaths in package exports. ([#1757]) - Fixed
compat/sizeto count array-like objects by theirlength. ([#1766]) - Fixed
compat/round,compat/ceil, andcompat/floorto returnInfinityfor infinite values with precision. ([#1764]) - Fixed
compat/randomto coerce the upper bound for non-numbermax. ([#1751]) - Fixed
compat/toLengthto coerce non-numeric values to 0. ([#1758]) - Removed unused generic type parameters from
pull. ([#1746])
We sincerely thank @Amund211, @Antoliny0919, @chatman-media, @D-Sketon, @dayongkr, @JetProc, @parkhojeong, @pbk95120, @raon0211, @sarathfrancis90, @shaked-shlomo, and @sukvvon for their contributions. We appreciate your great efforts!