Skip to content

1o1-utils vs es-toolkit

es-toolkit is a modern, high-performance utility library from the Toss team. It’s a direct lodash alternative with broader coverage than 1o1-utils but a larger footprint.

1o1-utilses-toolkit
Bundle size (gzip)~2 kB total~6 kB
Dependencies00
TypeScriptNative, strictNative
Tree-shakingFullFull
Named parametersYesNo (lodash-style positional)
Scope18 focused utilities200+ utilities
Maintained byPedro TroccoliToss (fintech)
es-toolkit1o1-utilsNotes
chunk(arr, n)chunk({ array, size })Named params
keyBy(arr, fn)arrayToHash({ array, key })Key-based only
groupBy(arr, fn)groupBy({ array, key })
sortBy(arr, keys)sortBy({ array, key })
uniq / uniqByunique({ array, key? })Unified
cloneDeep(obj)cloneDeep({ obj })
merge(a, b)deepMerge({ target, source })Explicit “deep”
isEmpty(v)isEmpty({ value })
omit(obj, keys)omit({ obj, keys })
pick(obj, keys)pick({ obj, keys })
capitalize(str)capitalize({ str })
camelCase / snakeCase / kebabCasetransformCase({ str, to })One function
debounce(fn, ms)debounce({ fn, wait })
throttle(fn, ms)throttle({ fn, wait })
// es-toolkit — lodash-style, positional
import { chunk, keyBy, pick, debounce } from "es-toolkit";
const pages = chunk(items, 10);
const byId = keyBy(users, (u) => u.id);
const picked = pick(user, ["id", "name"]);
const search = debounce(fn, 300);
// 1o1-utils — named params, declarative
import { chunk } from "1o1-utils/chunk";
import { arrayToHash } from "1o1-utils/array-to-hash";
import { pick } from "1o1-utils/pick";
import { debounce } from "1o1-utils/debounce";
const pages = chunk({ array: items, size: 10 });
const byId = arrayToHash({ array: users, key: "id" });
const picked = pick({ obj: user, keys: ["id", "name"] });
const search = debounce({ fn, wait: 300 });
  • You want a near drop-in lodash replacement with familiar positional API
  • You need broader coverage (math, chain, curry, partial, memoize, FP suite)
  • You’re migrating existing lodash code and want minimal refactor
  • You value a library backed by a large fintech team (Toss)
  • 3× smaller bundle (2 kB vs 6 kB)
  • Named parameters — self-documenting call sites, no signature guessing
  • Benchmarked in CI with strict size limits
  • Focused on the 18 utilities 90% of apps actually use — no bloat
  • You want per-utility imports with predictable tiny sizes (1o1-utils/chunk → 199 B)

Are the two libraries compatible? Yes — you can use both. 1o1-utils covers the core; supplement with es-toolkit or lodash for niche utilities.

Is 1o1-utils a fork of es-toolkit? No. Independent implementation with a different design philosophy (named params, focused scope).

es-toolkit alternative, smaller es-toolkit, es-toolkit vs 1o1-utils, lodash alternative, toss es-toolkit

I'm using 1o1-utils (npm: https://www.npmjs.com/package/1o1-utils, GitHub: https://github.com/pedrotroccoli/1o1-utils, LLM context: https://pedrotroccoli.github.io/1o1-utils/llms.txt). Given my project needs [X], compare es-toolkit and 1o1-utils and recommend which to use.