MCPInstall

migrate

by toss

Guide migrating lodash code to es-toolkit. Use when the user wants to migrate from lodash, replace lodash imports, reduce bundle size by switching to es-toolkit, or understand the difference between es-toolkit and es-toolkit/compat.

Installs
315
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/toss/es-toolkit --skill migrate
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads migrate automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Lodash Migration & Compat Guide

Guide users through migrating lodash to es-toolkit and understanding the strict vs compat APIs, grounded in actual source code.

Input

$ARGUMENTS — Lodash code to migrate, specific function names, or a question about strict vs compat.

Core Concepts

es-toolkit (strict): Opinionated, simplified API for the 85% use case. Smaller bundle, may differ from lodash in edge cases by design. New functions are added here.

es-toolkit/compat: Aims for full lodash test compatibility within a defined scope. See docs/compatibility.md for out-of-scope behaviors (e.g., implicit type conversions, prototype modifications).

Why source-first matters

The only reliable way to know the difference between strict and compat is to inspect the version installed in the user's project. The skill may be installed as a standalone directory, so never assume the es-toolkit repository or a sibling docs directory is available.

Workflow

If a specific function or lodash code is given

1. Identify lodash functions from input

Extract which lodash functions are used and how they're imported.

2. Verify availability in the installed package

Run from the package that depends on es-toolkit. In a monorepo this is usually a workspace package, not the repository root. If the project uses Yarn Plug'n'Play, use yarn node instead of node.

Replace the example names with the lodash functions found in the input:

node --input-type=module -e "
import { createRequire } from 'node:module';

const require = createRequire(import.meta.url);
const names = ['get', 'chunk', 'map'];
const pkg = require('es-toolkit/package.json');
const entries = Object.keys(pkg.exports)
  .filter(subpath => subpath !== './package.json' && !subpath.includes('*'))
  .map(subpath => subpath === '.' ? 'es-toolkit' : 'es-toolkit/' + subpath.slice(2));
const modules = await Promise.all(entries.map(entry => import(entry).catch(() => null)));
if (modules.every(module => module == null)) {
  console.error('es-toolkit is not resolvable from ' + process.cwd());
  process.exit(1);
}
for (const name of names) {
  const found = entries.filter((_, index) => modules[index] != null && name in modules[index]);
  console.log(name.padEnd(20), found.join(', ') || 'NOT AVAILABLE');
}
"

A function can appear in several entry points, so read the complete result. es-toolkit/types is type-only and cannot be checked through a runtime import.

Resolve the package metadata with the following command, then read declarations under its dist/ directory for exact signatures and JSDoc. Do not assume a conventional node_modules path.

node -e "console.log(require.resolve('es-toolkit/package.json'))"

When the current project is the es-toolkit source repository itself, inspect src/{category}/{fn}.ts, src/compat/{category}/{fn}.ts, and their specs directly instead of requiring a built package.

3. Determine the right migration path

ScenarioRecommendation
Function exists in both, same behaviorUse es-toolkit (smaller bundle)
Function exists in both, different behaviorExplain the difference, let user choose
Only in compatUse es-toolkit/compat
Not available at allKeep lodash or suggest modern JS alternative

If the function only exists in compat (like get, set, has), explain why — es-toolkit doesn't implement functions replaceable by modern JS (optional chaining ?., Object.hasOwn(), etc.).

4. Generate before/after migration

For each function, provide:

  • Availability: es-toolkit and/or es-toolkit/compat
  • Doc link: https://es-toolkit.dev/reference/{category}/{fn}.html (strict) or https://es-toolkit.dev/compat/reference/{category}/{fn}.html (compat)
  • Before (lodash) and After (es-toolkit) code examples
  • Any behavioral differences found in source code
  • Feature comparison table: Compare API capabilities side-by-side (e.g., cancel support, flush, maxWait, return values, AbortSignal, callback arguments). Read both implementations to identify all supported options and present them in a table like:
Featurelodashes-toolkites-toolkit/compat
(list each option/capability)✅/❌✅/❌✅/❌
  • "When to use which": Based on the feature comparison, provide scenario-based guidance — e.g., "Use es-toolkit if you only need basic debounce; use compat if you rely on cancel/flush; keep lodash if you need X."

For migrations involving many functions, use a summary table instead of repeating the full template for each one.

5. Provide consolidated import rewrite

Show the final import transformation as a single block.

5a. Suggest automation patterns for large-scale migrations

When migrating many files, mention practical automation approaches:

  • Bundler alias: Configure resolve.alias in webpack or Vite to redirect lodash imports at build time without changing source files:
    // vite.config.js or webpack.config.js
    resolve: { alias: { 'lodash': 'es-toolkit/compat' } }
    
  • ESLint rule: Use no-restricted-imports to warn or error on remaining lodash imports after migration.
  • Codemod: For systematic AST-based transforms, mention tools like jscodeshift if the migration pattern is complex.

6. Note bundle size impact

Explain that strict and compat imports are tree-shakeable, but quote exact size or performance numbers only after measuring the user's project or reading current benchmark data from an es-toolkit source checkout. Otherwise link to the official bundle-size and performance pages.

If no specific function (migration strategy overview)

Provide a strategic overview with three migration options:

  • Option A: Direct to es-toolkit — new/small projects
  • Option B: Gradual via compat — large codebases (recommended for legacy)
  • Option C: Mixed — pragmatic approach

For each option, include a trade-off matrix:

FactorOption A (strict)Option B (compat)Option C (mixed)
Code change volumeHighLowMedium
Bundle size reductionMaximumModerateVaries
Risk levelHigher (behavior diffs)Low (lodash-compatible)Medium
Maintenance effortLow (clean API)Medium (compat tracking)Higher (two APIs)

Compat-exclusive functions: Search src/compat/ for functions that don't exist in src/ (strict). List representative examples so users know what can only come from compat (e.g., get, set, has).

For concrete behavioral differences, read a few representative function pairs from source (e.g., chunk, debounce) to give real examples rather than abstract descriptions.

Documentation links

  • Migration overview: https://es-toolkit.dev/compat/intro.html
  • Bundle size: https://es-toolkit.dev/bundle-size.html
  • Performance: https://es-toolkit.dev/performance.html

Function pages use these forms:

  • strict: https://es-toolkit.dev/reference/{category}/{fn}.html
  • compat: https://es-toolkit.dev/compat/reference/{category}/{fn}.html
  • fp: https://es-toolkit.dev/fp/reference/{fn}.html

If you are unsure that a page exists, omit the page link rather than guessing.

FAQ

What does the migrate skill do?

Guide migrating lodash code to es-toolkit. Use when the user wants to migrate from lodash, replace lodash imports, reduce bundle size by switching to es-toolkit, or understand the difference between es-toolkit and es-toolkit/compat.

How do I install migrate?

Run npx skills add https://github.com/toss/es-toolkit --skill migrate in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/migrate/ (personal) or .claude/skills/migrate/ (project).

Which AI agents can use migrate?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is migrate safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains migrate?

It is published by toss in toss/es-toolkit. It has 315 recorded installs.

More from toss/es-toolkit

View all →

recommend

toss/es-toolkit

Analyze code or requirements and recommend the best es-toolkit functions. Use when the user asks which es-toolkit function to use, needs help finding a utility, or wants alternatives to manual implementations.

703 installs

guide

toss/es-toolkit

es-toolkit usage guide covering installation, import patterns, and setup for Node.js, Bun, Deno, and browsers. Use when the user asks how to install, import, or set up es-toolkit in their project.

Backend & APIs520 installs

compat-review

toss/es-toolkit

Open the skill to read its SKILL.md instructions.

pr-review

toss/es-toolkit

Open the skill to read its SKILL.md instructions.

release

toss/es-toolkit

Create a new es-toolkit release (version bump, changelog, tag)

188 installs

issue-review

toss/es-toolkit

Open the skill to read its SKILL.md instructions.

Popular other skills

View category →

hyperframes-cli

heygen-com/hyperframes

The HyperFrames CLI by job - scaffold, check, look at frames, edit the timeline, preview, render locally or in the cloud, publish, project history - plus reading its JSON and recovering from build or render failures.

1.3M installs

triage

mattpocock/skills

Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.

1M installs

ask-matt

mattpocock/skills

Ask which skill or flow fits your situation. A router over the skills in this repo.

778.4K installs

to-questionnaire

mattpocock/skills

Turn a decision you can't fully answer into a questionnaire for someone else to fill in.

508.9K installs

wait-what

mattpocock/skills

Stop. That last message did not land: re-pitch it.

459.7K installs

loop-me

mattpocock/skills

Grill me about specs for the workflows I want to build, within this workspace.

447.9K installs