es-toolkit: How a Small Internal Library Became a Global Project (opens in new tab)
es-toolkit began at Toss as a modern alternative to lodash, addressing its outdated architecture, legacy-browser code, lack of native ECMAScript Module support, and inefficient implementations. By removing unnecessary logic and relying on modern browser APIs, es-toolkit achieved 2–10× performance improvements and, in some cases, reduced bundle sizes by more than 30×. Its open-source momentum attracted global contributors, eventually helping it become widely adopted.
The Beginning of es-toolkit
- Toss developers needed dependable utilities such as
throttle,debounce, anduniq. - Although lodash was widely used, it had several limitations:
- Outdated code structure and implementations.
- Defensive logic for legacy browsers such as Internet Explorer.
- Little use of native APIs like
Array#map. - No ECMAScript Modules, making tree-shaking difficult.
lodash-esadded ESM support but retained much of lodash’s older and inefficient implementation.- Toss’s internal
@toss/utilslibrary required significant effort to maintain and handle edge cases. - es-toolkit was created to provide a modern, efficient utility library for current web development.
- Initial results showed:
- At least 2× and sometimes over 10× faster execution.
- Bundle-size reductions of more than 30× in some cases.
Open-Source Adoption and Community Growth
- Toss initially announced es-toolkit through its frontend social media channels.
- Developers contributed missing functions, bug fixes, and performance improvements.
- After gaining attention in Korea, the project was shared on Reddit and received over 100 upvotes and tens of thousands of repository visitors.
- International discussions led to coverage in blogs and newsletters.
- Community members created bundler plugins and migrated dependencies in established libraries from lodash to es-toolkit.
From Contributor to Toss Developer
- Dayong Lee discovered es-toolkit through Toss’s announcement and began contributing despite not being a Toss employee.
- Starting with small pull requests, he gradually became the project’s second-largest contributor.
- Code reviews helped him develop stronger skills in:
- JavaScript language features.
- API and interface design.
- Open-source collaboration.
- His involvement with es-toolkit eventually contributed to his joining Toss Bank.
Making Migration Easier with es-toolkit/compat
- Although the library was becoming more complete, adoption remained slow because many projects depended heavily on older utility libraries.
- Migrating individual lodash functions across a large codebase would be tedious and risky.
- es-toolkit therefore introduced
es-toolkit/compat, a drop-in replacement designed to preserve lodash’s interfaces and behavior while modernizing its internal implementation. - This compatibility layer reduced migration effort and allowed projects to gain performance improvements by changing imports rather than rewriting utility usage.
- The layer was particularly important because es-toolkit’s streamlined behavior could otherwise differ from lodash in edge cases and cause runtime errors.
es-toolkit’s story demonstrates how a focused modernization effort can replace entrenched legacy dependencies. Providing both a faster native-style library and a compatibility layer made adoption more practical while enabling broad open-source participation.