97% Smaller, 2x Faster: How es-toolkit Reached 10 Million Weekly Downloads

19 hours ago 1

es-toolkit is a modern JavaScript utility library built to replace lodash. It was designed from scratch around ES Modules and TypeScript.

Compared to lodash, es-toolkit delivers up to 97% smaller bundle sizes and more than 2x faster runtime performance. It also includes built-in TypeScript support, and a 100% compatible drop-in replacement via es-toolkit/compat.

Today, es-toolkit has surpassed 10 million weekly downloads on npm and is used by companies like Microsoft, Yarn, Storybook, IBM, and Recharts.

Why we built es-toolkit at Toss

In 2024, our Frontend Team at Toss asked a simple question: "Has a global-scale JavaScript library ever come out of Korea?"

It started as a casual conversation. But the more we explored the idea, the fewer reasons we found not to try. So, we decided to build one.

We chose JavaScript utility functions, a space lodash has dominated for over a decade. lodash filled a real gap when JavaScript lacked many basic features, becoming the foundation for millions of projects. But that was ten years ago.

The web today is different. ES Modules are now the standard, making true tree-shaking possible. Engines like V8 and SpiderMonkey have advanced significantly. TypeScript has become the default for most teams. And bundle size is now a critical metric, directly tied to Core Web Vitals.

lodash was built before these shifts, and its architecture hasn't evolved much since. To us, that looked like an opportunity.

es-toolkit is a JavaScript utility library built from scratch for the modern web, with ES Modules, TypeScript, and runtime performance at its core.

es-toolkit vs lodash: what's different

Bundle size

Up to 97% smaller

Larger due to internal dependencies

Runtime performance

2–3x faster

Designed for backward compatibility

Tree-shaking

Fully supported (each function is standalone)

Limited (lodash-es still has internal dependencies)

TypeScript

Built-in (source and types are co-located)

Requires separate @types/lodash package

ES Modules

Native support

Partial support via lodash-es

lodash compatibility

100% drop-in via es-toolkit/compat

Maintenance

Actively maintained (frequent releases)

Infrequent updates

npm weekly downloads

10M+

40M+

Benchmarks: es-toolkit vs lodash performance

Let the numbers speak for themselves.

Bundle size

es-toolkit@1.43.0

lodash-es@4.17.21

Difference

Sample

94 bytes

4817 bytes

-98.0%

Difference

90 bytes

7958 bytes

-98.9%

Sum

93 bytes

698 bytes

-86.7%

Debounce

531 bytes

2873 bytes

-81.5%

Throttle

855 bytes

3111 bytes

-72.5%

Pick

132 bytes

9520 bytes

-98.6%

Zip

221 bytes

3961 bytes

-94.4%

lodash-es is the ES Modules version, but it still carries internal helper dependencies. Importing a single function can pull in extra code, which is a limitation rooted in its pre-ES Modules design.

In contrast, every function in es-toolkit is fully independent from day one, with no hidden dependencies.

Runtime performance

JavaScript patterns that were either unavailable or slow a decade ago are now well-optimized by modern engines.

es-toolkit is built with these improvements in mind. In contrast, lodash can't easily adopt these optimizations due to backward compatibility constraints.

What does this look like in practice?

Say your project uses five functions: groupBy, keyBy, pick, omit, and debounce. Importing them from lodash-es adds roughly 30KB (minified) to your bundle once internal dependencies are included. With es-toolkit, the same five functions total around 1KB.

Same functionality, but up to 97% smaller bundles and 2x+ faster runtime. And it’s not because we cut features.

Who uses es-toolkit

Within 18 months of our first release, es-toolkit crossed 10 million weekly downloads on npm.

More telling than the download count is who adopted it: Microsoft across multiple internal projects, Yarn the package manager, Storybook the UI component workshop, IBM at enterprise scale, Recharts the React charting library, and Ink the CLI React renderer.

We didn’t reach out to any of these teams. They found es-toolkit on their own, ran their own benchmarks, and made their own decision to switch. More recently, projects like Dify have been migrating from lodash to es-toolkit as well. When a library delivers better results, people find it.

How to migrate from lodash to es-toolkit

A five-minute migration

es-toolkit is API-compatible with lodash. For most functions, migration is as simple as changing the import path:

- import { pick } from 'lodash-es'; + import { pick } from 'es-toolkit';

If you prefer not to change any code, you can use es-toolkit/compat, a 100% drop-in replacement for lodash:

{ "dependencies": { "lodash": "npm:es-toolkit@^1.44.0" } }

This single line makes every import ... from 'lodash' in your codebase work without any code modification. You get the bundle size and performance benefits immediately. The larger your codebase and the more widely lodash is used, the more effective this approach becomes.

Near-zero switching cost. Significant gains.

TypeScript-first

Every function in es-toolkit ships with precise TypeScript definitions that preserve type information:

const subset = pick(user, ['name', 'email']);

lodash relies on @types/lodash, a separate, community-maintained package. When source code and type definitions live apart, version mismatches and inaccuracies can occur. In es-toolkit, source and types are co-located, so the types stay accurate and up to date.

Actively Maintained

es-toolkit is under active development. New functions are added regularly, and issues and PRs are addressed quickly. A utility library is a long-lived dependency. It’s worth choosing one that's actively maintained.

Reaching 10 million weekly downloads

es-toolkit never had a viral moment. No celebrity developer endorsements. No front-page Hacker News post.

Rather, the growth was steady. From 100K to 500K, then 1M, 5M, eventually 10M weekly downloads. Every week, more teams discovered es-toolkit, compared it to what they were using, and decided to switch. Better tools spread on their own.

What's next

es-toolkit is part of a larger movement at Toss.

We’ve established an Open Source Committee within our Frontend Chapter, and we’re building several other libraries:


If you're currently using lodash, switching takes about five minutes.

Add "lodash": "npm:es-toolkit@^1.44.0" to your package.json and see how much your bundle shrinks.

For more details, check our migration guide. For performance data, refer to the benchmarks. To contribute, visit our GitHub.


es-toolkit is MIT licensed. Install it with npm install es-toolkit.

FAQ

Does es-toolkit support all lodash functions?

es-toolkit/compat aims for full compatibility with lodash. It's validated against lodash's actual test cases, and since v1.39.3, it guarantees 100% compatibility. Projects like Storybook, Recharts, and CKEditor have successfully migrated using this compatibility layer.

How long does it take to migrate from lodash to es-toolkit?

The fastest way is to add "lodash": "npm:es-toolkit@^1.44.0" to your package.json. No code changes required, and it works immediately. You can then gradually move from es-toolkit/compat to native es-toolkit imports for additional bundle and performance gains. An official codemod tool, (@es-toolkit/codemod), is also available.

Is the 97% bundle size reduction real?

It depends on the function. For example, sample is about 2,000 bytes in lodash compared to 88 bytes in es-toolkit, which is roughly 96% smaller. The omit function runs about 11.8x faster at runtime. The 97% figure represents the maximum observed reduction, with most functions falling in the 80–97% range.

Does es-toolkit work outside of Node.js?

Yes. It supports Node.js, Deno, Bun, and browsers. It's also available via CDNs, such as unpkg and jsdelivr.

Who built es-toolkit?

It’s developed by the Frontend Team at Toss (Viva Republica), a fintech company based in South Korea. It's open source under the MIT license and welcomes contributions from developers worldwide.

Reference

Press & Technical Coverage

Migration Case Studies

Official Documentation

Read Entire Article