---
title: "itertools Breaking Changes on crates.io | Since.dev"
description: "What each itertools release removed, renamed or changed: 61 breaking changes in 1 version on crates.io, each with its source."
canonical_url: https://since.dev/packages/crates/itertools
last_updated: 2026-06-16
---

# itertools breaking changes

Every breaking API change we have recorded in itertools on crates.io: 61 breaking changes in 1 version. Below are its newest version, removals and renames first, each with its source.

Newest change June 16, 2026

## 0.15.0

61 breaking changes, first published June 16, 2026.

- **Removed** `itertools::Position::First`  

itertools::Position::First was removed in itertools 0.15.0 [crates.io](https://crates.io/crates/itertools/0.15.0)
- **Removed** `itertools::Position::Last`  

itertools::Position::Last was removed in itertools 0.15.0 [crates.io](https://crates.io/crates/itertools/0.15.0)
- **Removed** `itertools::Position::Middle`  

itertools::Position::Middle was removed in itertools 0.15.0 [crates.io](https://crates.io/crates/itertools/0.15.0)
- **Removed** `itertools::Position::Only`  

itertools::Position::Only was removed in itertools 0.15.0 [crates.io](https://crates.io/crates/itertools/0.15.0)
- **Behavior changed** `collect_vec`  

Calling collect_vec and discarding its result now produces a compiler warning, which may fail builds that deny warnings. [github.com](https://github.com/rust-itertools/itertools/blob/v0.15.0/CHANGELOG.md)
- **Signature changed** `itertools::CombinationsWithReplacement`  

Was struct CombinationsWithReplacement<I> where I: Iterator, I::Item: Clone,; now type CombinationsWithReplacement<I> = CombinationsWithReplacementGeneric<I, Box<\[usize\]>>. [crates.io](https://crates.io/crates/itertools/0.15.0)
- **Signature changed** `itertools::Duplicates`  

Was type Duplicates<I> = private::DuplicatesBy<I, <I as Iterator>::Item, private::ById>; now type Duplicates<I, S = RandomState> = private::DuplicatesBy<I, <I as Iterator>::Item, private::ById, S>. [crates.io](https://crates.io/crates/itertools/0.15.0)
- **Signature changed** `itertools::DuplicatesBy`  

Was type DuplicatesBy<I, V, F> = private::DuplicatesBy<I, V, private::ByFn<F>>; now type DuplicatesBy<I, V, F, S = RandomState> = private::DuplicatesBy<I, V, private::ByFn<F>, S>. [crates.io](https://crates.io/crates/itertools/0.15.0)
- **Signature changed** `itertools::GroupingMap`  

Was struct GroupingMap<I>; now struct GroupingMap<I, S = RandomState> where S: BuildHasher,. [crates.io](https://crates.io/crates/itertools/0.15.0)
- **Signature changed** `itertools::GroupingMap::aggregate`  

Was fn aggregate<FO, R>(self, mut operation: FO) -> HashMap<K, R> where FO: FnMut(Option<R>, &K, V) -> Option<R>,; now fn aggregate<FO, R>(self, mut operation: FO) -> HashMap<K, R, S> where FO: FnMut(Option<R>, &K, V) -> Option<R>,. [crates.io](https://crates.io/crates/itertools/0.15.0)

And 51 more in this version.

## Check your code

These are the changes. To see which of them reach your code, [scan a public repository](https://since.dev/scan.md), or have your coding agent call `check_code` with your manifest or lockfile over [MCP](https://since.dev/docs.md#mcp). [The API](https://since.dev/docs.md#api) reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

## Put your code on continuous management.

Scan a public repository now, or give your agent one line.

### See how out of date your code is.

[Scan a repository](https://since.dev/scan.md). Any public GitHub repository. No sign-in.

### Tell your agent what changed since it was trained.

`claude mcp add --transport http since https://api.since.dev/mcp`

---

Every page on this site as Markdown: https://since.dev/sitemap.md. For agents: https://since.dev/llms.txt.
