# What changed in remeda

> 102 changes in remeda 2 from its official release notes, upgrade guides and advisories: 12 breaking, 3 new APIs and options. Each one cited. Sources checked 2026-11-14. HTML: https://unstale.sh/npm/remeda/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## remeda 2

### Breaking changes

- Reverts the arity parameter on purry. (2.61.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.61.0)
- Disjoint literal suffixes are rejected at compile time. (2.48.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.48.0)
- Narrows the callback data parameter type for lazy evaluators. (2.47.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.47.0)
- The runtime implementation and semantics were adjusted to handle edge cases more consistently. (2.0.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.0.0)
- `compact` was removed because it can be replaced with `filter(isTruthy)`. (2.0.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.0.0)
- `toPairs` is now named `entries` to align function names with ECMAScript standards. (2.0.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.0.0)
- Call `identity` with no parameters to get its dataLast implementation. (2.0.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.0.0)
- The indexed variants are merged into base functions, with indexed parameters as defaults. (2.0.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.0.0)
- Remeda is now compiled with a target of ES2022. (2.0.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.0.0)
- Call `keys` with no parameters to get its dataLast implementation. (2.0.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.0.0)
- The strict variants are merged into base functions, with improved typing as the default. (2.0.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.0.0)
- The minimum supported TypeScript version is now 5.1. (2.0.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.0.0)

### New APIs and options

- Adds pendingData to funnel's return value. (2.54.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.54.1)
- Adds hasProp to the API. (2.34.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.34.1)
- Adds a step parameter to the range function. (2.33.7) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.7)

### Performance

- Utilities are faster because arguments are passed as parameters instead of arrays. (2.60.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.60.0)
- Pipe and utilities are faster after redundant work was removed. (2.59.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.59.0)
- Typechecking performance improved for large literal tuples passed to sample. (2.36.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.36.0)

### Behavior and default changes

- Type-guards are the only functions that remain headless. (2.0.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.0.0)

### Tooling

- The build now generates a monolithic type definition file. (2.33.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.0)

### Fixes and other changes

- Handles __proto__ keys. (2.58.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.58.0)
- Handles __proto__ keys. (2.58.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.58.0)
- Handles __proto__ keys. (2.58.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.58.0)
- Handles __proto__ keys. (2.58.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.58.0)
- Handles __proto__ keys. (2.58.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.58.0)
- Handles __proto__ keys. (2.58.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.58.0)
- Handles __proto__ keys. (2.58.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.58.0)
- Handles __proto__ keys. (2.58.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.58.0)
- Handles __proto__ keys. (2.58.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.58.0)
- Handles __proto__ keys. (2.58.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.58.0)
- dropFirstBy now supports lazy evaluation. (2.57.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.57.0)
- dropLast now supports lazy evaluation. (2.57.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.57.0)
- dropWhile now supports lazy evaluation. (2.57.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.57.0)
- takeWhile now supports lazy evaluation. (2.57.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.57.0)
- Minor edge-case fixes. (2.56.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.56.0)
- pipe only evaluates lazily when a step can stop early. (2.55.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.55.0)
- In pipe, fractional and NaN counts now match data-first behavior. (2.54.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.54.0)
- In pipe, fractional and NaN counts now match data-first behavior. (2.54.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.54.0)
- In pipe, fractional and NaN counts now match data-first behavior. (2.54.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.54.0)
- The lazy evaluation engine used by pipe and purry was rewritten. (2.52.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.52.0)
- Missing values are handled differently than optional ones. (2.51.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.51.0)
- Fixes isNot to resolve trivial fixed-value conditions. (2.50.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.50.0)
- Rejects disjoint suffixes instead of disabling the return type. (2.49.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.49.0)
- Rejects disjoint prefixes instead of disabling the return type. (2.49.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.49.0)
- Disjoint literal prefixes are rejected at compile time. (2.48.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.48.0)
- Narrows the callback data parameter type for lazy evaluators. (2.47.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.47.0)
- Narrows the callback data parameter type for lazy evaluators. (2.47.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.47.0)
- Narrows the callback data parameter type for lazy evaluators. (2.47.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.47.0)
- Narrows the callback data parameter type for lazy evaluators. (2.47.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.47.0)
- Narrows the callback data parameter type for lazy evaluators. (2.47.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.47.0)
- Narrows the callback data parameter type for lazy evaluators. (2.47.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.47.0)
- Narrows the callback data parameter type for lazy evaluators. (2.47.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.47.0)
- Redesigned types for functions that accept type-narrowing predicates. (2.46.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.46.0)
- Redesigned types for functions that accept type-narrowing predicates. (2.46.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.46.0)
- Redesigned types for functions that accept type-narrowing predicates. (2.46.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.46.0)
- Redesigned types for functions that accept type-narrowing predicates. (2.46.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.46.0)
- Redesigned types for functions that accept type-narrowing predicates. (2.46.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.46.0)
- Redesigned types for functions that accept type-narrowing predicates. (2.46.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.46.0)
- Redesigned types for functions that accept type-narrowing predicates. (2.46.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.46.0)
- Redesigned types for functions that accept type-narrowing predicates. (2.46.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.46.0)
- Allows widening type predicates. (2.45.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.45.0)
- Supports type predicates that aren't subtypes of the item type. (2.44.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.44.0)
- Early returns can now short-circuit the pipe. (2.43.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.43.0)
- Objects are no longer shared between pipes. (2.43.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.43.0)
- Handles data-last usage with an empty parameter. (2.42.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.42.0)
- Handles data-last usage with an empty parameter. (2.42.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.42.0)
- Fixes handling of index signatures in prop. (2.41.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.41.0)
- ceil was affected by manual fixes accompanying dependency updates; the notes do not specify the change. (2.40.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.40.0)
- evolve was affected by manual fixes accompanying dependency updates; the notes do not specify the change. (2.40.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.40.0)
- floor was affected by manual fixes accompanying dependency updates; the notes do not specify the change. (2.40.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.40.0)
- isDeepEqual was affected by manual fixes accompanying dependency updates; the notes do not specify the change. (2.40.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.40.0)
- isShallowEqual was affected by manual fixes accompanying dependency updates; the notes do not specify the change. (2.40.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.40.0)
- last was affected by manual fixes accompanying dependency updates; the notes do not specify the typing change. (2.40.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.40.0)
- mergeDeep was affected by manual fixes accompanying dependency updates; the notes do not specify the change. (2.40.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.40.0)
- round was affected by manual fixes accompanying dependency updates; the notes do not specify the change. (2.40.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.40.0)
- swapIndices was affected by manual fixes accompanying dependency updates; the notes do not specify the change. (2.40.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.40.0)
- Corrects types through NoInfer. (2.39.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.39.0)
- Corrects types through NoInfer. (2.39.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.39.0)
- Moves data-last inference to the curried data parameter, improving type inference for curried use. (2.37.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.37.0)
- Fixes a typing issue with union types. (2.35.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.35.0)
- isDeepEqual now allows null-prototype objects. (2.34.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.34.0)
- The Merge type was improved. (2.33.6) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.6)
- truncate now handles primitive inputs. (2.33.5) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.5)
- Avoids calling setTimeout with negative numbers. (2.33.4) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.4)
- Export symbols are now available when declarations are enabled with declarations: true. (2.33.3) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.3)
- Fixes mapKeys for a mapper with a single literal value. (2.33.2) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.2)
- Typing for optional tuple elements is refined when exactOptionalPropertyTypes is enabled. (2.33.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.1)
- Typing for optional tuple elements is refined when exactOptionalPropertyTypes is enabled. (2.33.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.1)
- Typing for optional tuple elements is refined when exactOptionalPropertyTypes is enabled. (2.33.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.1)
- Typing for optional tuple elements is refined when exactOptionalPropertyTypes is enabled. (2.33.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.1)
- Typing for optional tuple elements is refined when exactOptionalPropertyTypes is enabled. (2.33.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.1)
- Typing for optional tuple elements is refined when exactOptionalPropertyTypes is enabled. (2.33.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.1)
- Typing for optional tuple elements is refined when exactOptionalPropertyTypes is enabled. (2.33.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.1)
- Typing for optional tuple elements is refined when exactOptionalPropertyTypes is enabled. (2.33.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.1)
- Typing for optional tuple elements is refined when exactOptionalPropertyTypes is enabled. (2.33.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.1)
- Typing for optional tuple elements is refined when exactOptionalPropertyTypes is enabled. (2.33.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.1)
- Typing for optional tuple elements is refined when exactOptionalPropertyTypes is enabled. (2.33.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.1)
- Typing for optional tuple elements is refined when exactOptionalPropertyTypes is enabled. (2.33.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.1)
- Typing for optional tuple elements is refined when exactOptionalPropertyTypes is enabled. (2.33.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.33.1)
- Handles complex tuple inputs, unions, and unbounded keys. (2.32.2) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.32.2)
- Fixes union type narrowing for simple arrays. (2.32.1) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.32.1)
- Typing changes better reflect JavaScript's handling of `symbol` and `number` keys. (2.0.0) — [release notes](https://github.com/remeda/remeda/releases/tag/v2.0.0)
