Then the crate is lying about its intentions or performing black magic using RefCell under the hood to go behind the user's back. A vec is a vec. If I don't want re-allocations I will use .with_capacity() and cap it or use a plain array. Also the data has to be changed somewhere to happen, and I'd rather the API be honest and give me &mut self than lie and say &self.