Rust: error[E0596]: cannot borrow `v` as mutable, as it is not declared as mutable
You called a &mut method (or took &mut) on a binding/reference that isn't mutable.
error[E0596]: cannot borrow `v` as mutable, as it is not declared as mutablecannot borrow `*self` as mutable, as it is behind a `&` referencecannot borrow data in a `&` reference as mutableerror[E0596]: cannot borrow `x` as mutableE0596 help: consider changing this to be mutable: `mut v` Meaning
Add mut to the binding (let mut v = Vec::new();), take &mut parameters (fn f(v: &mut Vec<i32>)), and make self &mut self for mutating methods. Through &T you can't mutate — use &mut T, RefCell, or Cell.
Common causes
let v = Vec::new(); v.push(1);- Method takes
&selfbut mutates - Parameter is
&Tnot&mut T - Closure capturing a variable mutably without
mut - Iterating with
iter()then mutating (useiter_mut())
⚡ Quick fix
- Declare
let mut - Change signature to
&mut self/&mut T - Use
iter_mut(); considerRefCellfor interior mutability
Detailed fix by platform
Rust
fn add(&mut self, x: i32) { self.items.push(x); }
How to diagnose
- Binding — mut?
- Signature — &mut?
- Iterator — iter_mut?
🔧 Still not fixed?
Many errors look alike. If the steps above didn’t solve it, one of these is probably what you’re facing:
Similar errors
- Blocking waiting for file lock on package cache / build directory Cargo: Blocking waiting for file lock on package cache / on build directory
- cargo: failed to get from registry (spurious network error) Cargo: warning: spurious network error (2 tries remaining): [35] SSL connect error / error: failed to download from `https://index.crates.io/...`
- E0384: cannot assign twice to immutable variable Rust: error[E0384]: cannot assign twice to immutable variable `x`
Most viewed in Rust
- E0308 Rust: error[E0308]: mismatched types — expected `X`, found `Y`
- E0382 Rust: error[E0382]: borrow of moved value: `x`
- feature edition2024 is required / Cargo.lock version too new Cargo: error: failed to parse manifest — feature `edition2024` is required / lock file version 4 requires `-Znext-lockfile-bump`
Other ways to find it
Where this error sits
Origin: Application & API. Errors that are often confused with or caused by this one (click to open):
🧠 Still stuck? Analyze your error
Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.
💬 What worked for others
No tips yet — did something else fix this for you?
Share what worked for you
Tips are checked by an editor before they appear. Links are removed.
Report a correction or suggest an improvement
Last updated 5 Nov 2026