# What changed in itertools

> 18 changes in itertools 0.15 from its official release notes, upgrade guides and advisories: 2 breaking, 2 deprecations, 6 new APIs and options. Each one cited. Sources checked 2026-11-12. HTML: https://unstale.sh/cargo/itertools/

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

## itertools 0.15

### Breaking changes

- The error type for all_equal_value has been canonicalized, which may affect code that names or handles that type. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)
- Position is now a struct instead of an enum, so code constructing or matching Position must adapt. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)

### Deprecations

- tuple_combinations is deprecated and replaced by array_combinations. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)
- tuple_windows is deprecated in favor of array_windows. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)

### New APIs and options

- array_combinations_with_replacement is available for combinations with replacement. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)
- array_windows is introduced. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)
- circular_array_windows is introduced. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)
- A strip_prefix method is available. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)
- A strip_prefix_by method is available. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)
- Adaptors with custom hashers are available. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)

### Performance

- ExactlyOneError::count has been specialized. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)

### Behavior and default changes

- array_combinations no longer requires Clone bounds. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)
- collect_vec is now marked must_use, so ignoring its return value produces a warning. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)
- izip! is now temporary friendly. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)
- tuple_combinations no longer requires Clone bounds. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)

### Fixes and other changes

- Remaining public types now implement Debug. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)
- The next_back behavior for PadUsing has been fixed. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)
- PeekingNext is implemented for more types, including vec::IntoIter. (0.15.0) — [release notes](https://github.com/rust-itertools/itertools/blob/37bd72aa6d58e594711d127b52418ca5e58b6091/CHANGELOG.md#0150)
